aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/ipx.h
diff options
context:
space:
mode:
authorReshetova, Elena <elena.reshetova@intel.com>2017-07-04 15:53:09 +0300
committerDavid S. Miller <davem@davemloft.net>2017-07-04 22:35:17 +0100
commitd25189ca8665e3ed493c7bc0607e62c2fcb314ad (patch)
treed67e5f7c40bb816e507b8d1de02e0fe106352390 /include/net/ipx.h
parentnet, lapb: convert lapb_cb.refcnt from atomic_t to refcount_t (diff)
downloadlinux-dev-d25189ca8665e3ed493c7bc0607e62c2fcb314ad.tar.xz
linux-dev-d25189ca8665e3ed493c7bc0607e62c2fcb314ad.zip
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.h7
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);
}