mirror of https://gitee.com/openkylin/linux.git
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