diff options
author | Reshetova, Elena <elena.reshetova@intel.com> | 2017-07-04 15:53:09 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-07-05 00:35:17 +0300 |
commit | d25189ca8665e3ed493c7bc0607e62c2fcb314ad (patch) | |
tree | d67e5f7c40bb816e507b8d1de02e0fe106352390 /include/net/ipx.h | |
parent | 0408c58be5a475c99b271f08d85859f7b59ec767 (diff) | |
download | linux-d25189ca8665e3ed493c7bc0607e62c2fcb314ad.tar.xz |
net, ipx: convert ipx_interface.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/ipx.h')
-rw-r--r-- | include/net/ipx.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/include/net/ipx.h b/include/net/ipx.h index e5cff6811b30..2de12814ab81 100644 --- a/include/net/ipx.h +++ b/include/net/ipx.h @@ -14,6 +14,7 @@ #include <linux/ipx.h> #include <linux/list.h> #include <linux/slab.h> +#include <linux/refcount.h> struct ipx_address { __be32 net; @@ -54,7 +55,7 @@ struct ipx_interface { /* IPX address */ __be32 if_netnum; unsigned char if_node[IPX_NODE_LEN]; - atomic_t refcnt; + refcount_t refcnt; /* physical device info */ struct net_device *if_dev; @@ -139,7 +140,7 @@ const char *ipx_device_name(struct ipx_interface *intrfc); static __inline__ void ipxitf_hold(struct ipx_interface *intrfc) { - atomic_inc(&intrfc->refcnt); + refcount_inc(&intrfc->refcnt); } void ipxitf_down(struct ipx_interface *intrfc); @@ -157,7 +158,7 @@ int ipxrtr_ioctl(unsigned int cmd, void __user *arg); static __inline__ void ipxitf_put(struct ipx_interface *intrfc) { - if (atomic_dec_and_test(&intrfc->refcnt)) + if (refcount_dec_and_test(&intrfc->refcnt)) ipxitf_down(intrfc); } |