]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - net/mac80211/key.c
[MAC80211]: embed key conf in key, fix driver interface
[mirror_ubuntu-jammy-kernel.git] / net / mac80211 / key.c
1 /*
2 * Copyright 2002-2005, Instant802 Networks, Inc.
3 * Copyright 2005-2006, Devicescape Software, Inc.
4 * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11 #include <net/mac80211.h>
12 #include "ieee80211_i.h"
13 #include "debugfs_key.h"
14 #include "aes_ccm.h"
15
16 struct ieee80211_key *ieee80211_key_alloc(struct ieee80211_sub_if_data *sdata,
17 int idx, size_t key_len, gfp_t flags)
18 {
19 struct ieee80211_key *key;
20
21 key = kzalloc(sizeof(struct ieee80211_key) + key_len, flags);
22 if (!key)
23 return NULL;
24 kref_init(&key->kref);
25 return key;
26 }
27
28 static void ieee80211_key_release(struct kref *kref)
29 {
30 struct ieee80211_key *key;
31
32 key = container_of(kref, struct ieee80211_key, kref);
33 if (key->conf.alg == ALG_CCMP)
34 ieee80211_aes_key_free(key->u.ccmp.tfm);
35 ieee80211_debugfs_key_remove(key);
36 kfree(key);
37 }
38
39 void ieee80211_key_free(struct ieee80211_key *key)
40 {
41 if (key)
42 kref_put(&key->kref, ieee80211_key_release);
43 }