Blame view
net/mac80211/debugfs_key.c
12.3 KB
d2912cb15 treewide: Replace... |
1 |
// SPDX-License-Identifier: GPL-2.0-only |
e9f207f0f [MAC80211]: Add d... |
2 3 4 5 |
/* * Copyright 2003-2005 Devicescape Software, Inc. * Copyright (c) 2006 Jiri Benc <jbenc@suse.cz> * Copyright 2007 Johannes Berg <johannes@sipsolutions.net> |
d0a77c656 mac80211: allow w... |
6 |
* Copyright (C) 2015 Intel Deutschland GmbH |
e9f207f0f [MAC80211]: Add d... |
7 8 9 |
*/ #include <linux/kobject.h> |
5a0e3ad6a include cleanup: ... |
10 |
#include <linux/slab.h> |
e9f207f0f [MAC80211]: Add d... |
11 |
#include "ieee80211_i.h" |
2c8dccc77 mac80211: rename ... |
12 |
#include "key.h" |
e9f207f0f [MAC80211]: Add d... |
13 14 |
#include "debugfs.h" #include "debugfs_key.h" |
07caf9d6c mac80211: refacto... |
15 |
#define KEY_READ(name, prop, format_string) \ |
e9f207f0f [MAC80211]: Add d... |
16 17 18 19 |
static ssize_t key_##name##_read(struct file *file, \ char __user *userbuf, \ size_t count, loff_t *ppos) \ { \ |
e9f207f0f [MAC80211]: Add d... |
20 |
struct ieee80211_key *key = file->private_data; \ |
07caf9d6c mac80211: refacto... |
21 22 |
return mac80211_format_buffer(userbuf, count, ppos, \ format_string, key->prop); \ |
e9f207f0f [MAC80211]: Add d... |
23 |
} |
07caf9d6c mac80211: refacto... |
24 25 26 27 |
#define KEY_READ_D(name) KEY_READ(name, name, "%d ") #define KEY_READ_X(name) KEY_READ(name, name, "0x%x ") |
e9f207f0f [MAC80211]: Add d... |
28 29 30 31 |
#define KEY_OPS(name) \ static const struct file_operations key_ ##name## _ops = { \ .read = key_##name##_read, \ |
234e34058 simple_open: auto... |
32 |
.open = simple_open, \ |
2b18ab36c net/wireless: use... |
33 |
.llseek = generic_file_llseek, \ |
e9f207f0f [MAC80211]: Add d... |
34 |
} |
d0a77c656 mac80211: allow w... |
35 36 37 38 39 40 41 |
#define KEY_OPS_W(name) \ static const struct file_operations key_ ##name## _ops = { \ .read = key_##name##_read, \ .write = key_##name##_write, \ .open = simple_open, \ .llseek = generic_file_llseek, \ } |
e9f207f0f [MAC80211]: Add d... |
42 43 44 |
#define KEY_FILE(name, format) \ KEY_READ_##format(name) \ KEY_OPS(name) |
07caf9d6c mac80211: refacto... |
45 46 47 48 |
#define KEY_CONF_READ(name, format_string) \ KEY_READ(conf_##name, conf.name, format_string) #define KEY_CONF_READ_D(name) KEY_CONF_READ(name, "%d ") |
8f20fc249 [MAC80211]: embed... |
49 50 51 52 |
#define KEY_CONF_OPS(name) \ static const struct file_operations key_ ##name## _ops = { \ .read = key_conf_##name##_read, \ |
234e34058 simple_open: auto... |
53 |
.open = simple_open, \ |
2b18ab36c net/wireless: use... |
54 |
.llseek = generic_file_llseek, \ |
8f20fc249 [MAC80211]: embed... |
55 56 57 58 59 60 61 62 63 |
} #define KEY_CONF_FILE(name, format) \ KEY_CONF_READ_##format(name) \ KEY_CONF_OPS(name) KEY_CONF_FILE(keylen, D); KEY_CONF_FILE(keyidx, D); KEY_CONF_FILE(hw_key_idx, D); |
11a843b7e [MAC80211]: rewor... |
64 |
KEY_FILE(flags, X); |
07caf9d6c mac80211: refacto... |
65 66 |
KEY_READ(ifindex, sdata->name, "%s "); |
e7a64f12a [MAC80211]: add i... |
67 |
KEY_OPS(ifindex); |
e9f207f0f [MAC80211]: Add d... |
68 69 70 71 72 |
static ssize_t key_algorithm_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { |
97359d123 mac80211: use cip... |
73 |
char buf[15]; |
e9f207f0f [MAC80211]: Add d... |
74 |
struct ieee80211_key *key = file->private_data; |
97359d123 mac80211: use cip... |
75 |
u32 c = key->conf.cipher; |
e9f207f0f [MAC80211]: Add d... |
76 |
|
97359d123 mac80211: use cip... |
77 78 79 80 |
sprintf(buf, "%.2x-%.2x-%.2x:%d ", c >> 24, (c >> 16) & 0xff, (c >> 8) & 0xff, c & 0xff); return simple_read_from_buffer(userbuf, count, ppos, buf, strlen(buf)); |
e9f207f0f [MAC80211]: Add d... |
81 82 |
} KEY_OPS(algorithm); |
d0a77c656 mac80211: allow w... |
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
static ssize_t key_tx_spec_write(struct file *file, const char __user *userbuf, size_t count, loff_t *ppos) { struct ieee80211_key *key = file->private_data; u64 pn; int ret; switch (key->conf.cipher) { case WLAN_CIPHER_SUITE_WEP40: case WLAN_CIPHER_SUITE_WEP104: return -EINVAL; case WLAN_CIPHER_SUITE_TKIP: /* not supported yet */ return -EOPNOTSUPP; case WLAN_CIPHER_SUITE_CCMP: case WLAN_CIPHER_SUITE_CCMP_256: case WLAN_CIPHER_SUITE_AES_CMAC: case WLAN_CIPHER_SUITE_BIP_CMAC_256: case WLAN_CIPHER_SUITE_BIP_GMAC_128: case WLAN_CIPHER_SUITE_BIP_GMAC_256: case WLAN_CIPHER_SUITE_GCMP: case WLAN_CIPHER_SUITE_GCMP_256: ret = kstrtou64_from_user(userbuf, count, 16, &pn); if (ret) return ret; /* PN is a 48-bit counter */ if (pn >= (1ULL << 48)) return -ERANGE; atomic64_set(&key->conf.tx_pn, pn); return count; default: return 0; } } |
e9f207f0f [MAC80211]: Add d... |
117 118 119 |
static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { |
aba83a0b3 mac80211: fix CCM... |
120 |
u64 pn; |
e9f207f0f [MAC80211]: Add d... |
121 122 123 |
char buf[20]; int len; struct ieee80211_key *key = file->private_data; |
97359d123 mac80211: use cip... |
124 125 126 |
switch (key->conf.cipher) { case WLAN_CIPHER_SUITE_WEP40: case WLAN_CIPHER_SUITE_WEP104: |
e9f207f0f [MAC80211]: Add d... |
127 128 |
len = scnprintf(buf, sizeof(buf), " "); |
50339a67e [MAC80211]: fix k... |
129 |
break; |
97359d123 mac80211: use cip... |
130 |
case WLAN_CIPHER_SUITE_TKIP: |
f8079d43c mac80211: move TK... |
131 |
pn = atomic64_read(&key->conf.tx_pn); |
e9f207f0f [MAC80211]: Add d... |
132 133 |
len = scnprintf(buf, sizeof(buf), "%08x %04x ", |
f8079d43c mac80211: move TK... |
134 135 |
TKIP_PN_TO_IV32(pn), TKIP_PN_TO_IV16(pn)); |
50339a67e [MAC80211]: fix k... |
136 |
break; |
97359d123 mac80211: use cip... |
137 |
case WLAN_CIPHER_SUITE_CCMP: |
2b2ba0db1 mac80111: Add CCM... |
138 |
case WLAN_CIPHER_SUITE_CCMP_256: |
97359d123 mac80211: use cip... |
139 |
case WLAN_CIPHER_SUITE_AES_CMAC: |
56c52da2d mac80111: Add BIP... |
140 |
case WLAN_CIPHER_SUITE_BIP_CMAC_256: |
8ade538bf mac80111: Add BIP... |
141 142 |
case WLAN_CIPHER_SUITE_BIP_GMAC_128: case WLAN_CIPHER_SUITE_BIP_GMAC_256: |
00b9cfa3f mac80111: Add GCM... |
143 144 |
case WLAN_CIPHER_SUITE_GCMP: case WLAN_CIPHER_SUITE_GCMP_256: |
db388a567 mac80211: move TX... |
145 |
pn = atomic64_read(&key->conf.tx_pn); |
00b9cfa3f mac80111: Add GCM... |
146 147 148 149 150 |
len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x ", (u8)(pn >> 40), (u8)(pn >> 32), (u8)(pn >> 24), (u8)(pn >> 16), (u8)(pn >> 8), (u8)pn); break; |
e9f207f0f [MAC80211]: Add d... |
151 152 153 154 155 |
default: return 0; } return simple_read_from_buffer(userbuf, count, ppos, buf, len); } |
d0a77c656 mac80211: allow w... |
156 |
KEY_OPS_W(tx_spec); |
e9f207f0f [MAC80211]: Add d... |
157 158 159 160 161 |
static ssize_t key_rx_spec_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct ieee80211_key *key = file->private_data; |
5a306f588 mac80211: introdu... |
162 |
char buf[14*IEEE80211_NUM_TIDS+1], *p = buf; |
e9f207f0f [MAC80211]: Add d... |
163 164 |
int i, len; const u8 *rpn; |
97359d123 mac80211: use cip... |
165 166 167 |
switch (key->conf.cipher) { case WLAN_CIPHER_SUITE_WEP40: case WLAN_CIPHER_SUITE_WEP104: |
e9f207f0f [MAC80211]: Add d... |
168 169 |
len = scnprintf(buf, sizeof(buf), " "); |
50339a67e [MAC80211]: fix k... |
170 |
break; |
97359d123 mac80211: use cip... |
171 |
case WLAN_CIPHER_SUITE_TKIP: |
5a306f588 mac80211: introdu... |
172 |
for (i = 0; i < IEEE80211_NUM_TIDS; i++) |
e9f207f0f [MAC80211]: Add d... |
173 174 175 |
p += scnprintf(p, sizeof(buf)+buf-p, "%08x %04x ", |
b0f76b335 mac80211: add a s... |
176 177 |
key->u.tkip.rx[i].iv32, key->u.tkip.rx[i].iv16); |
e9f207f0f [MAC80211]: Add d... |
178 |
len = p - buf; |
50339a67e [MAC80211]: fix k... |
179 |
break; |
97359d123 mac80211: use cip... |
180 |
case WLAN_CIPHER_SUITE_CCMP: |
2b2ba0db1 mac80111: Add CCM... |
181 |
case WLAN_CIPHER_SUITE_CCMP_256: |
5a306f588 mac80211: introdu... |
182 |
for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++) { |
e9f207f0f [MAC80211]: Add d... |
183 184 185 186 187 188 189 190 |
rpn = key->u.ccmp.rx_pn[i]; p += scnprintf(p, sizeof(buf)+buf-p, "%02x%02x%02x%02x%02x%02x ", rpn[0], rpn[1], rpn[2], rpn[3], rpn[4], rpn[5]); } len = p - buf; |
50339a67e [MAC80211]: fix k... |
191 |
break; |
97359d123 mac80211: use cip... |
192 |
case WLAN_CIPHER_SUITE_AES_CMAC: |
56c52da2d mac80111: Add BIP... |
193 |
case WLAN_CIPHER_SUITE_BIP_CMAC_256: |
3cfcf6ac6 mac80211: 802.11w... |
194 195 196 197 198 199 200 201 |
rpn = key->u.aes_cmac.rx_pn; p += scnprintf(p, sizeof(buf)+buf-p, "%02x%02x%02x%02x%02x%02x ", rpn[0], rpn[1], rpn[2], rpn[3], rpn[4], rpn[5]); len = p - buf; break; |
8ade538bf mac80111: Add BIP... |
202 203 204 205 206 207 208 209 210 211 |
case WLAN_CIPHER_SUITE_BIP_GMAC_128: case WLAN_CIPHER_SUITE_BIP_GMAC_256: rpn = key->u.aes_gmac.rx_pn; p += scnprintf(p, sizeof(buf)+buf-p, "%02x%02x%02x%02x%02x%02x ", rpn[0], rpn[1], rpn[2], rpn[3], rpn[4], rpn[5]); len = p - buf; break; |
00b9cfa3f mac80111: Add GCM... |
212 213 214 215 216 217 218 219 220 221 222 223 |
case WLAN_CIPHER_SUITE_GCMP: case WLAN_CIPHER_SUITE_GCMP_256: for (i = 0; i < IEEE80211_NUM_TIDS + 1; i++) { rpn = key->u.gcmp.rx_pn[i]; p += scnprintf(p, sizeof(buf)+buf-p, "%02x%02x%02x%02x%02x%02x ", rpn[0], rpn[1], rpn[2], rpn[3], rpn[4], rpn[5]); } len = p - buf; break; |
e9f207f0f [MAC80211]: Add d... |
224 225 226 227 228 229 230 231 232 233 234 235 236 |
default: return 0; } return simple_read_from_buffer(userbuf, count, ppos, buf, len); } KEY_OPS(rx_spec); static ssize_t key_replays_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct ieee80211_key *key = file->private_data; char buf[20]; int len; |
97359d123 mac80211: use cip... |
237 238 |
switch (key->conf.cipher) { case WLAN_CIPHER_SUITE_CCMP: |
2b2ba0db1 mac80111: Add CCM... |
239 |
case WLAN_CIPHER_SUITE_CCMP_256: |
3cfcf6ac6 mac80211: 802.11w... |
240 241 242 |
len = scnprintf(buf, sizeof(buf), "%u ", key->u.ccmp.replays); break; |
97359d123 mac80211: use cip... |
243 |
case WLAN_CIPHER_SUITE_AES_CMAC: |
56c52da2d mac80111: Add BIP... |
244 |
case WLAN_CIPHER_SUITE_BIP_CMAC_256: |
3cfcf6ac6 mac80211: 802.11w... |
245 246 247 248 |
len = scnprintf(buf, sizeof(buf), "%u ", key->u.aes_cmac.replays); break; |
8ade538bf mac80111: Add BIP... |
249 250 251 252 253 254 |
case WLAN_CIPHER_SUITE_BIP_GMAC_128: case WLAN_CIPHER_SUITE_BIP_GMAC_256: len = scnprintf(buf, sizeof(buf), "%u ", key->u.aes_gmac.replays); break; |
00b9cfa3f mac80111: Add GCM... |
255 256 257 258 259 |
case WLAN_CIPHER_SUITE_GCMP: case WLAN_CIPHER_SUITE_GCMP_256: len = scnprintf(buf, sizeof(buf), "%u ", key->u.gcmp.replays); break; |
3cfcf6ac6 mac80211: 802.11w... |
260 |
default: |
e9f207f0f [MAC80211]: Add d... |
261 |
return 0; |
3cfcf6ac6 mac80211: 802.11w... |
262 |
} |
e9f207f0f [MAC80211]: Add d... |
263 264 265 |
return simple_read_from_buffer(userbuf, count, ppos, buf, len); } KEY_OPS(replays); |
3cfcf6ac6 mac80211: 802.11w... |
266 267 268 269 270 271 |
static ssize_t key_icverrors_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct ieee80211_key *key = file->private_data; char buf[20]; int len; |
97359d123 mac80211: use cip... |
272 273 |
switch (key->conf.cipher) { case WLAN_CIPHER_SUITE_AES_CMAC: |
56c52da2d mac80111: Add BIP... |
274 |
case WLAN_CIPHER_SUITE_BIP_CMAC_256: |
3cfcf6ac6 mac80211: 802.11w... |
275 276 277 278 |
len = scnprintf(buf, sizeof(buf), "%u ", key->u.aes_cmac.icverrors); break; |
8ade538bf mac80111: Add BIP... |
279 280 281 282 283 284 |
case WLAN_CIPHER_SUITE_BIP_GMAC_128: case WLAN_CIPHER_SUITE_BIP_GMAC_256: len = scnprintf(buf, sizeof(buf), "%u ", key->u.aes_gmac.icverrors); break; |
3cfcf6ac6 mac80211: 802.11w... |
285 286 287 288 289 290 |
default: return 0; } return simple_read_from_buffer(userbuf, count, ppos, buf, len); } KEY_OPS(icverrors); |
b98ea0586 mac80211: add deb... |
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
static ssize_t key_mic_failures_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct ieee80211_key *key = file->private_data; char buf[20]; int len; if (key->conf.cipher != WLAN_CIPHER_SUITE_TKIP) return -EINVAL; len = scnprintf(buf, sizeof(buf), "%u ", key->u.tkip.mic_failures); return simple_read_from_buffer(userbuf, count, ppos, buf, len); } KEY_OPS(mic_failures); |
e9f207f0f [MAC80211]: Add d... |
307 308 309 310 |
static ssize_t key_key_read(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct ieee80211_key *key = file->private_data; |
520efd1ac mac80211: fix fai... |
311 |
int i, bufsize = 2 * key->conf.keylen + 2; |
e9f207f0f [MAC80211]: Add d... |
312 313 |
char *buf = kmalloc(bufsize, GFP_KERNEL); char *p = buf; |
520efd1ac mac80211: fix fai... |
314 315 316 317 |
ssize_t res; if (!buf) return -ENOMEM; |
e9f207f0f [MAC80211]: Add d... |
318 |
|
8f20fc249 [MAC80211]: embed... |
319 320 |
for (i = 0; i < key->conf.keylen; i++) p += scnprintf(p, bufsize + buf - p, "%02x", key->conf.key[i]); |
e9f207f0f [MAC80211]: Add d... |
321 322 323 324 325 326 327 328 329 |
p += scnprintf(p, bufsize+buf-p, " "); res = simple_read_from_buffer(userbuf, count, ppos, buf, p - buf); kfree(buf); return res; } KEY_OPS(key); #define DEBUGFS_ADD(name) \ |
7bcfaf2f4 cfg80211/mac80211... |
330 |
debugfs_create_file(#name, 0400, key->debugfs.dir, \ |
84674ef4d mac80211: remove ... |
331 |
key, &key_##name##_ops) |
d0a77c656 mac80211: allow w... |
332 333 334 |
#define DEBUGFS_ADD_W(name) \ debugfs_create_file(#name, 0600, key->debugfs.dir, \ key, &key_##name##_ops); |
e9f207f0f [MAC80211]: Add d... |
335 |
|
3b96766f0 mac80211: fix key... |
336 |
void ieee80211_debugfs_key_add(struct ieee80211_key *key) |
9446f3efc mac80211: fix deb... |
337 |
{ |
50339a67e [MAC80211]: fix k... |
338 |
static int keycount; |
9446f3efc mac80211: fix deb... |
339 |
char buf[100]; |
3b96766f0 mac80211: fix key... |
340 |
struct sta_info *sta; |
e9f207f0f [MAC80211]: Add d... |
341 |
|
3b96766f0 mac80211: fix key... |
342 |
if (!key->local->debugfs.keys) |
e9f207f0f [MAC80211]: Add d... |
343 |
return; |
50339a67e [MAC80211]: fix k... |
344 |
sprintf(buf, "%d", keycount); |
d9c58f30b mac80211: fix key... |
345 |
key->debugfs.cnt = keycount; |
50339a67e [MAC80211]: fix k... |
346 |
keycount++; |
e9f207f0f [MAC80211]: Add d... |
347 |
key->debugfs.dir = debugfs_create_dir(buf, |
3b96766f0 mac80211: fix key... |
348 |
key->local->debugfs.keys); |
e9f207f0f [MAC80211]: Add d... |
349 |
|
40b275b69 mac80211: sparse ... |
350 351 |
sta = key->sta; if (sta) { |
9446f3efc mac80211: fix deb... |
352 353 |
sprintf(buf, "../../netdev:%s/stations/%pM", sta->sdata->name, sta->sta.addr); |
3b96766f0 mac80211: fix key... |
354 355 |
key->debugfs.stalink = debugfs_create_symlink("station", key->debugfs.dir, buf); |
40b275b69 mac80211: sparse ... |
356 |
} |
3b96766f0 mac80211: fix key... |
357 |
|
e9f207f0f [MAC80211]: Add d... |
358 |
DEBUGFS_ADD(keylen); |
8f20fc249 [MAC80211]: embed... |
359 |
DEBUGFS_ADD(flags); |
e9f207f0f [MAC80211]: Add d... |
360 361 |
DEBUGFS_ADD(keyidx); DEBUGFS_ADD(hw_key_idx); |
e9f207f0f [MAC80211]: Add d... |
362 |
DEBUGFS_ADD(algorithm); |
d0a77c656 mac80211: allow w... |
363 |
DEBUGFS_ADD_W(tx_spec); |
e9f207f0f [MAC80211]: Add d... |
364 365 |
DEBUGFS_ADD(rx_spec); DEBUGFS_ADD(replays); |
3cfcf6ac6 mac80211: 802.11w... |
366 |
DEBUGFS_ADD(icverrors); |
b98ea0586 mac80211: add deb... |
367 |
DEBUGFS_ADD(mic_failures); |
e9f207f0f [MAC80211]: Add d... |
368 |
DEBUGFS_ADD(key); |
e7a64f12a [MAC80211]: add i... |
369 |
DEBUGFS_ADD(ifindex); |
e9f207f0f [MAC80211]: Add d... |
370 |
}; |
e9f207f0f [MAC80211]: Add d... |
371 372 373 374 |
void ieee80211_debugfs_key_remove(struct ieee80211_key *key) { if (!key) return; |
7bcfaf2f4 cfg80211/mac80211... |
375 |
debugfs_remove_recursive(key->debugfs.dir); |
e9f207f0f [MAC80211]: Add d... |
376 377 |
key->debugfs.dir = NULL; } |
f7e0104c1 mac80211: support... |
378 379 |
void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata) |
e9f207f0f [MAC80211]: Add d... |
380 381 |
{ char buf[50]; |
78520cad4 mac80211: fix deb... |
382 |
struct ieee80211_key *key; |
e9f207f0f [MAC80211]: Add d... |
383 |
|
ddbfe860a mac80211: move sd... |
384 |
if (!sdata->vif.debugfs_dir) |
e9f207f0f [MAC80211]: Add d... |
385 |
return; |
f7e0104c1 mac80211: support... |
386 |
lockdep_assert_held(&sdata->local->key_mtx); |
78520cad4 mac80211: fix deb... |
387 |
|
5c6761adc mac80211: remove ... |
388 389 |
debugfs_remove(sdata->debugfs.default_unicast_key); sdata->debugfs.default_unicast_key = NULL; |
135792ec2 mac80211: fix deb... |
390 |
|
f7e0104c1 mac80211: support... |
391 |
if (sdata->default_unicast_key) { |
40b275b69 mac80211: sparse ... |
392 393 |
key = key_mtx_dereference(sdata->local, sdata->default_unicast_key); |
78520cad4 mac80211: fix deb... |
394 |
sprintf(buf, "../keys/%d", key->debugfs.cnt); |
f7e0104c1 mac80211: support... |
395 396 |
sdata->debugfs.default_unicast_key = debugfs_create_symlink("default_unicast_key", |
ddbfe860a mac80211: move sd... |
397 |
sdata->vif.debugfs_dir, buf); |
135792ec2 mac80211: fix deb... |
398 |
} |
5c6761adc mac80211: remove ... |
399 400 |
debugfs_remove(sdata->debugfs.default_multicast_key); sdata->debugfs.default_multicast_key = NULL; |
e9f207f0f [MAC80211]: Add d... |
401 |
|
f7e0104c1 mac80211: support... |
402 |
if (sdata->default_multicast_key) { |
40b275b69 mac80211: sparse ... |
403 404 |
key = key_mtx_dereference(sdata->local, sdata->default_multicast_key); |
f7e0104c1 mac80211: support... |
405 406 407 |
sprintf(buf, "../keys/%d", key->debugfs.cnt); sdata->debugfs.default_multicast_key = debugfs_create_symlink("default_multicast_key", |
ddbfe860a mac80211: move sd... |
408 |
sdata->vif.debugfs_dir, buf); |
f7e0104c1 mac80211: support... |
409 |
} |
e9f207f0f [MAC80211]: Add d... |
410 |
} |
e9f207f0f [MAC80211]: Add d... |
411 |
|
3cfcf6ac6 mac80211: 802.11w... |
412 413 414 415 |
void ieee80211_debugfs_key_add_mgmt_default(struct ieee80211_sub_if_data *sdata) { char buf[50]; struct ieee80211_key *key; |
ddbfe860a mac80211: move sd... |
416 |
if (!sdata->vif.debugfs_dir) |
3cfcf6ac6 mac80211: 802.11w... |
417 |
return; |
40b275b69 mac80211: sparse ... |
418 419 |
key = key_mtx_dereference(sdata->local, sdata->default_mgmt_key); |
3cfcf6ac6 mac80211: 802.11w... |
420 421 |
if (key) { sprintf(buf, "../keys/%d", key->debugfs.cnt); |
7bcfaf2f4 cfg80211/mac80211... |
422 |
sdata->debugfs.default_mgmt_key = |
3cfcf6ac6 mac80211: 802.11w... |
423 |
debugfs_create_symlink("default_mgmt_key", |
ddbfe860a mac80211: move sd... |
424 |
sdata->vif.debugfs_dir, buf); |
3cfcf6ac6 mac80211: 802.11w... |
425 426 427 428 429 430 431 432 |
} else ieee80211_debugfs_key_remove_mgmt_default(sdata); } void ieee80211_debugfs_key_remove_mgmt_default(struct ieee80211_sub_if_data *sdata) { if (!sdata) return; |
7bcfaf2f4 cfg80211/mac80211... |
433 434 |
debugfs_remove(sdata->debugfs.default_mgmt_key); sdata->debugfs.default_mgmt_key = NULL; |
3cfcf6ac6 mac80211: 802.11w... |
435 |
} |
e5473e80d mac80211: Support... |
436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 |
void ieee80211_debugfs_key_add_beacon_default(struct ieee80211_sub_if_data *sdata) { char buf[50]; struct ieee80211_key *key; if (!sdata->vif.debugfs_dir) return; key = key_mtx_dereference(sdata->local, sdata->default_beacon_key); if (key) { sprintf(buf, "../keys/%d", key->debugfs.cnt); sdata->debugfs.default_beacon_key = debugfs_create_symlink("default_beacon_key", sdata->vif.debugfs_dir, buf); } else { ieee80211_debugfs_key_remove_beacon_default(sdata); } } void ieee80211_debugfs_key_remove_beacon_default(struct ieee80211_sub_if_data *sdata) { if (!sdata) return; debugfs_remove(sdata->debugfs.default_beacon_key); sdata->debugfs.default_beacon_key = NULL; } |
e9f207f0f [MAC80211]: Add d... |
466 467 468 469 470 471 |
void ieee80211_debugfs_key_sta_del(struct ieee80211_key *key, struct sta_info *sta) { debugfs_remove(key->debugfs.stalink); key->debugfs.stalink = NULL; } |