Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 78893664 authored by Reshetova, Elena's avatar Reshetova, Elena Committed by David S. Miller
Browse files

net, atm: convert lec_arp_table.usage 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 458bc30c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -101,12 +101,12 @@ static void lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc);
/* must be done under lec_arp_lock */
static inline void lec_arp_hold(struct lec_arp_table *entry)
{
	atomic_inc(&entry->usage);
	refcount_inc(&entry->usage);
}

static inline void lec_arp_put(struct lec_arp_table *entry)
{
	if (atomic_dec_and_test(&entry->usage))
	if (refcount_dec_and_test(&entry->usage))
		kfree(entry);
}

@@ -1564,7 +1564,7 @@ static struct lec_arp_table *make_entry(struct lec_priv *priv,
	to_return->last_used = jiffies;
	to_return->priv = priv;
	skb_queue_head_init(&to_return->tx_wait);
	atomic_set(&to_return->usage, 1);
	refcount_set(&to_return->usage, 1);
	return to_return;
}

+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ struct lec_arp_table {
					 * the length of the tlvs array
					 */
	struct sk_buff_head tx_wait;	/* wait queue for outgoing packets */
	atomic_t usage;			/* usage count */
	refcount_t usage;		/* usage count */
};

/*