diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-05-03 01:04:47 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-05-13 03:18:05 +0200 |
commit | 78520cad4b222d81fa18f2dcfa52394d8d1722b0 (patch) | |
tree | 76f69aafe51620373cb805fd69782ec3970280dd /net | |
parent | wavelan: avoid index past end of array if DEBUG_SHOW_UNUSED is defined (diff) | |
download | linux-78520cad4b222d81fa18f2dcfa52394d8d1722b0.tar.xz linux-78520cad4b222d81fa18f2dcfa52394d8d1722b0.zip |
mac80211: fix debugfs default key oops
Under certain circumstances (in AP mode) the debugfs function
that is supposed to add the default key symlink can encounter
a NULL default_key pointer. This patch makes it handle that
situtation gracefully.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/debugfs_key.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c index 879e7210458a..19efc3a6a932 100644 --- a/net/mac80211/debugfs_key.c +++ b/net/mac80211/debugfs_key.c @@ -255,14 +255,23 @@ void ieee80211_debugfs_key_remove(struct ieee80211_key *key) void ieee80211_debugfs_key_add_default(struct ieee80211_sub_if_data *sdata) { char buf[50]; + struct ieee80211_key *key; if (!sdata->debugfsdir) return; - sprintf(buf, "../keys/%d", sdata->default_key->debugfs.cnt); - sdata->debugfs.default_key = - debugfs_create_symlink("default_key", sdata->debugfsdir, buf); + /* this is running under the key lock */ + + key = sdata->default_key; + if (key) { + sprintf(buf, "../keys/%d", key->debugfs.cnt); + sdata->debugfs.default_key = + debugfs_create_symlink("default_key", + sdata->debugfsdir, buf); + } else + ieee80211_debugfs_key_remove_default(sdata); } + void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata) { if (!sdata) |