Commit | Line | Data |
---|---|---|
1f5a7e47 JB |
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 | ||
1f5a7e47 JB |
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); | |
8f20fc24 | 33 | if (key->conf.alg == ALG_CCMP) |
1f5a7e47 JB |
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 | } |