mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
net: convert netpoll_info.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>
This commit is contained in:
parent
7658b36f1b
commit
433cea4d9b
@ -11,6 +11,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/refcount.h>
|
||||
|
||||
union inet_addr {
|
||||
__u32 all[4];
|
||||
@ -34,7 +35,7 @@ struct netpoll {
|
||||
};
|
||||
|
||||
struct netpoll_info {
|
||||
atomic_t refcnt;
|
||||
refcount_t refcnt;
|
||||
|
||||
struct semaphore dev_lock;
|
||||
|
||||
|
@ -632,7 +632,7 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
|
||||
skb_queue_head_init(&npinfo->txq);
|
||||
INIT_DELAYED_WORK(&npinfo->tx_work, queue_process);
|
||||
|
||||
atomic_set(&npinfo->refcnt, 1);
|
||||
refcount_set(&npinfo->refcnt, 1);
|
||||
|
||||
ops = np->dev->netdev_ops;
|
||||
if (ops->ndo_netpoll_setup) {
|
||||
@ -642,7 +642,7 @@ int __netpoll_setup(struct netpoll *np, struct net_device *ndev)
|
||||
}
|
||||
} else {
|
||||
npinfo = rtnl_dereference(ndev->npinfo);
|
||||
atomic_inc(&npinfo->refcnt);
|
||||
refcount_inc(&npinfo->refcnt);
|
||||
}
|
||||
|
||||
npinfo->netpoll = np;
|
||||
@ -821,7 +821,7 @@ void __netpoll_cleanup(struct netpoll *np)
|
||||
|
||||
synchronize_srcu(&netpoll_srcu);
|
||||
|
||||
if (atomic_dec_and_test(&npinfo->refcnt)) {
|
||||
if (refcount_dec_and_test(&npinfo->refcnt)) {
|
||||
const struct net_device_ops *ops;
|
||||
|
||||
ops = np->dev->netdev_ops;
|
||||
|
Loading…
Reference in New Issue
Block a user