RDMA/core: Use refcount_t instead of atomic_t on refcount of mcast_port
The refcount_t API will WARN on underflow and overflow of a reference counter, and avoid use-after-free risks. Link: https://lore.kernel.org/r/1622194663-2383-6-git-send-email-liweihang@huawei.com Signed-off-by: Weihang Li <liweihang@huawei.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
cd74db6cbb
commit
58d33b4fa9
@ -61,7 +61,7 @@ struct mcast_port {
|
||||
struct mcast_device *dev;
|
||||
spinlock_t lock;
|
||||
struct rb_root table;
|
||||
atomic_t refcount;
|
||||
refcount_t refcount;
|
||||
struct completion comp;
|
||||
u32 port_num;
|
||||
};
|
||||
@ -178,7 +178,7 @@ static struct mcast_group *mcast_insert(struct mcast_port *port,
|
||||
|
||||
static void deref_port(struct mcast_port *port)
|
||||
{
|
||||
if (atomic_dec_and_test(&port->refcount))
|
||||
if (refcount_dec_and_test(&port->refcount))
|
||||
complete(&port->comp);
|
||||
}
|
||||
|
||||
@ -589,7 +589,7 @@ static struct mcast_group *acquire_group(struct mcast_port *port,
|
||||
kfree(group);
|
||||
group = cur_group;
|
||||
} else
|
||||
atomic_inc(&port->refcount);
|
||||
refcount_inc(&port->refcount);
|
||||
found:
|
||||
atomic_inc(&group->refcount);
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
@ -840,7 +840,7 @@ static int mcast_add_one(struct ib_device *device)
|
||||
spin_lock_init(&port->lock);
|
||||
port->table = RB_ROOT;
|
||||
init_completion(&port->comp);
|
||||
atomic_set(&port->refcount, 1);
|
||||
refcount_set(&port->refcount, 1);
|
||||
++count;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user