Unverified Commit 717ad181 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!6959 mac802154: fix llsec key resources release in mac802154_llsec_key_del

parents 51ad856b 21e00f67
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -257,6 +257,7 @@ struct ieee802154_llsec_key {

struct ieee802154_llsec_key_entry {
	struct list_head list;
	struct rcu_head rcu;

	struct ieee802154_llsec_key_id id;
	struct ieee802154_llsec_key *key;
+13 −5
Original line number Diff line number Diff line
@@ -265,19 +265,27 @@ int mac802154_llsec_key_add(struct mac802154_llsec *sec,
	return -ENOMEM;
}

int mac802154_llsec_key_del(struct mac802154_llsec *sec,
			    const struct ieee802154_llsec_key_id *key)
static void mac802154_llsec_key_del_rcu(struct rcu_head *rcu)
{
	struct ieee802154_llsec_key_entry *pos;

	list_for_each_entry(pos, &sec->table.keys, list) {
	struct mac802154_llsec_key *mkey;

	pos = container_of(rcu, struct ieee802154_llsec_key_entry, rcu);
	mkey = container_of(pos->key, struct mac802154_llsec_key, key);

	llsec_key_put(mkey);
	kfree_sensitive(pos);
}

int mac802154_llsec_key_del(struct mac802154_llsec *sec,
			    const struct ieee802154_llsec_key_id *key)
{
	struct ieee802154_llsec_key_entry *pos;

	list_for_each_entry(pos, &sec->table.keys, list) {
		if (llsec_key_id_equal(&pos->id, key)) {
			list_del_rcu(&pos->list);
			llsec_key_put(mkey);
			call_rcu(&pos->rcu, mac802154_llsec_key_del_rcu);
			return 0;
		}
	}