diff options
author | Reshetova, Elena <elena.reshetova@intel.com> | 2017-07-04 15:53:10 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-07-04 22:35:17 +0100 |
commit | 16f73c964956e0f78669f1681191093dd030c9ee (patch) | |
tree | 69006e3034abb570b6d8edda51ae3523b40f77ed /include/net | |
parent | d25189ca8665e3ed493c7bc0607e62c2fcb314ad (diff) | |
download | linux-16f73c964956e0f78669f1681191093dd030c9ee.tar.gz linux-16f73c964956e0f78669f1681191093dd030c9ee.tar.bz2 linux-16f73c964956e0f78669f1681191093dd030c9ee.zip |
net, ipx: convert ipx_route.refcnt from atomic_t to refcount_t
refcount_t type and corresponding API should be
used instead of atomic_t when the variable is used as
a reference counter. This allows to avoid accidental
refcounter overflows that might lead to use-after-free
situations.
Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David Windsor <dwindsor@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/ipx.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/include/net/ipx.h b/include/net/ipx.h index 2de12814ab81..af32b97b5ddd 100644 --- a/include/net/ipx.h +++ b/include/net/ipx.h @@ -81,7 +81,7 @@ struct ipx_route { unsigned char ir_routed; unsigned char ir_router_node[IPX_NODE_LEN]; struct list_head node; /* node in ipx_routes list */ - atomic_t refcnt; + refcount_t refcnt; }; struct ipx_cb { @@ -164,12 +164,12 @@ static __inline__ void ipxitf_put(struct ipx_interface *intrfc) static __inline__ void ipxrtr_hold(struct ipx_route *rt) { - atomic_inc(&rt->refcnt); + refcount_inc(&rt->refcnt); } static __inline__ void ipxrtr_put(struct ipx_route *rt) { - if (atomic_dec_and_test(&rt->refcnt)) + if (refcount_dec_and_test(&rt->refcnt)) kfree(rt); } #endif /* _NET_INET_IPX_H_ */ |