Commit 5534a51a authored by Reshetova, Elena's avatar Reshetova, Elena Committed by David S. Miller

net, x25: convert x25_neigh.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: default avatarElena Reshetova <elena.reshetova@intel.com>
Signed-off-by: default avatarHans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarDavid Windsor <dwindsor@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5f9ccf6f
...@@ -142,7 +142,7 @@ struct x25_neigh { ...@@ -142,7 +142,7 @@ struct x25_neigh {
unsigned long t20; unsigned long t20;
struct timer_list t20timer; struct timer_list t20timer;
unsigned long global_facil_mask; unsigned long global_facil_mask;
atomic_t refcnt; refcount_t refcnt;
}; };
struct x25_sock { struct x25_sock {
...@@ -243,12 +243,12 @@ void x25_link_free(void); ...@@ -243,12 +243,12 @@ void x25_link_free(void);
/* x25_neigh.c */ /* x25_neigh.c */
static __inline__ void x25_neigh_hold(struct x25_neigh *nb) static __inline__ void x25_neigh_hold(struct x25_neigh *nb)
{ {
atomic_inc(&nb->refcnt); refcount_inc(&nb->refcnt);
} }
static __inline__ void x25_neigh_put(struct x25_neigh *nb) static __inline__ void x25_neigh_put(struct x25_neigh *nb)
{ {
if (atomic_dec_and_test(&nb->refcnt)) if (refcount_dec_and_test(&nb->refcnt))
kfree(nb); kfree(nb);
} }
......
...@@ -266,7 +266,7 @@ void x25_link_device_up(struct net_device *dev) ...@@ -266,7 +266,7 @@ void x25_link_device_up(struct net_device *dev)
X25_MASK_PACKET_SIZE | X25_MASK_PACKET_SIZE |
X25_MASK_WINDOW_SIZE; X25_MASK_WINDOW_SIZE;
nb->t20 = sysctl_x25_restart_request_timeout; nb->t20 = sysctl_x25_restart_request_timeout;
atomic_set(&nb->refcnt, 1); refcount_set(&nb->refcnt, 1);
write_lock_bh(&x25_neigh_list_lock); write_lock_bh(&x25_neigh_list_lock);
list_add(&nb->node, &x25_neigh_list); list_add(&nb->node, &x25_neigh_list);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment