diff options
| author | Johannes Berg <johannes@sipsolutions.net> | 2007-08-28 17:01:52 -0400 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:48:40 -0400 |
| commit | 50339a67e2d4386d8919195989371579cab8649d (patch) | |
| tree | 398fffe801706572f58ac0b7c8078112e1c3b97b | |
| parent | 2a8a9a88fc1b18f5c45244d0ef8a5352f6cf761f (diff) | |
[MAC80211]: fix key debugfs
This fixes two issues with the key debugfs:
1) key index obviously isn't unique
2) various missing break statements led to bogus output
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Michael Wu <flamingice@sourmilk.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/mac80211/debugfs_key.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c index 7d56dc9e7326..077f907271cf 100644 --- a/net/mac80211/debugfs_key.c +++ b/net/mac80211/debugfs_key.c | |||
| @@ -77,14 +77,17 @@ static ssize_t key_tx_spec_read(struct file *file, char __user *userbuf, | |||
| 77 | switch (key->alg) { | 77 | switch (key->alg) { |
| 78 | case ALG_WEP: | 78 | case ALG_WEP: |
| 79 | len = scnprintf(buf, sizeof(buf), "\n"); | 79 | len = scnprintf(buf, sizeof(buf), "\n"); |
| 80 | break; | ||
| 80 | case ALG_TKIP: | 81 | case ALG_TKIP: |
| 81 | len = scnprintf(buf, sizeof(buf), "%08x %04x\n", | 82 | len = scnprintf(buf, sizeof(buf), "%08x %04x\n", |
| 82 | key->u.tkip.iv32, | 83 | key->u.tkip.iv32, |
| 83 | key->u.tkip.iv16); | 84 | key->u.tkip.iv16); |
| 85 | break; | ||
| 84 | case ALG_CCMP: | 86 | case ALG_CCMP: |
| 85 | tpn = key->u.ccmp.tx_pn; | 87 | tpn = key->u.ccmp.tx_pn; |
| 86 | len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n", | 88 | len = scnprintf(buf, sizeof(buf), "%02x%02x%02x%02x%02x%02x\n", |
| 87 | tpn[0], tpn[1], tpn[2], tpn[3], tpn[4], tpn[5]); | 89 | tpn[0], tpn[1], tpn[2], tpn[3], tpn[4], tpn[5]); |
| 90 | break; | ||
| 88 | default: | 91 | default: |
| 89 | return 0; | 92 | return 0; |
| 90 | } | 93 | } |
| @@ -103,6 +106,7 @@ static ssize_t key_rx_spec_read(struct file *file, char __user *userbuf, | |||
| 103 | switch (key->alg) { | 106 | switch (key->alg) { |
| 104 | case ALG_WEP: | 107 | case ALG_WEP: |
| 105 | len = scnprintf(buf, sizeof(buf), "\n"); | 108 | len = scnprintf(buf, sizeof(buf), "\n"); |
| 109 | break; | ||
| 106 | case ALG_TKIP: | 110 | case ALG_TKIP: |
| 107 | for (i = 0; i < NUM_RX_DATA_QUEUES; i++) | 111 | for (i = 0; i < NUM_RX_DATA_QUEUES; i++) |
| 108 | p += scnprintf(p, sizeof(buf)+buf-p, | 112 | p += scnprintf(p, sizeof(buf)+buf-p, |
| @@ -110,6 +114,7 @@ static ssize_t key_rx_spec_read(struct file *file, char __user *userbuf, | |||
| 110 | key->u.tkip.iv32_rx[i], | 114 | key->u.tkip.iv32_rx[i], |
| 111 | key->u.tkip.iv16_rx[i]); | 115 | key->u.tkip.iv16_rx[i]); |
| 112 | len = p - buf; | 116 | len = p - buf; |
| 117 | break; | ||
| 113 | case ALG_CCMP: | 118 | case ALG_CCMP: |
| 114 | for (i = 0; i < NUM_RX_DATA_QUEUES; i++) { | 119 | for (i = 0; i < NUM_RX_DATA_QUEUES; i++) { |
| 115 | rpn = key->u.ccmp.rx_pn[i]; | 120 | rpn = key->u.ccmp.rx_pn[i]; |
| @@ -119,6 +124,7 @@ static ssize_t key_rx_spec_read(struct file *file, char __user *userbuf, | |||
| 119 | rpn[3], rpn[4], rpn[5]); | 124 | rpn[3], rpn[4], rpn[5]); |
| 120 | } | 125 | } |
| 121 | len = p - buf; | 126 | len = p - buf; |
| 127 | break; | ||
| 122 | default: | 128 | default: |
| 123 | return 0; | 129 | return 0; |
| 124 | } | 130 | } |
| @@ -164,12 +170,14 @@ KEY_OPS(key); | |||
| 164 | void ieee80211_debugfs_key_add(struct ieee80211_local *local, | 170 | void ieee80211_debugfs_key_add(struct ieee80211_local *local, |
| 165 | struct ieee80211_key *key) | 171 | struct ieee80211_key *key) |
| 166 | { | 172 | { |
| 173 | static int keycount; | ||
| 167 | char buf[20]; | 174 | char buf[20]; |
| 168 | 175 | ||
| 169 | if (!local->debugfs.keys) | 176 | if (!local->debugfs.keys) |
| 170 | return; | 177 | return; |
| 171 | 178 | ||
| 172 | sprintf(buf, "%d", key->keyidx); | 179 | sprintf(buf, "%d", keycount); |
| 180 | keycount++; | ||
| 173 | key->debugfs.dir = debugfs_create_dir(buf, | 181 | key->debugfs.dir = debugfs_create_dir(buf, |
| 174 | local->debugfs.keys); | 182 | local->debugfs.keys); |
| 175 | 183 | ||
| @@ -239,7 +247,7 @@ void ieee80211_debugfs_key_sta_link(struct ieee80211_key *key, | |||
| 239 | if (!key->debugfs.dir) | 247 | if (!key->debugfs.dir) |
| 240 | return; | 248 | return; |
| 241 | 249 | ||
| 242 | sprintf(buf, "../sta/" MAC_FMT, MAC_ARG(sta->addr)); | 250 | sprintf(buf, "../../stations/" MAC_FMT, MAC_ARG(sta->addr)); |
| 243 | key->debugfs.stalink = | 251 | key->debugfs.stalink = |
| 244 | debugfs_create_symlink("station", key->debugfs.dir, buf); | 252 | debugfs_create_symlink("station", key->debugfs.dir, buf); |
| 245 | } | 253 | } |
