--- net/mac80211/debugfs_key.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) --- everything.orig/net/mac80211/debugfs_key.c 2008-04-28 20:15:42.000000000 +0200 +++ everything/net/mac80211/debugfs_key.c 2008-04-28 20:15:44.000000000 +0200 @@ -255,14 +255,29 @@ void ieee80211_debugfs_key_remove(struct 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); + rcu_read_lock(); + key = rcu_dereference(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 { + /* + * Oops. No default key, let's remove the debugfs entry + * This can happen if the workqueue is too slow. + */ + debugfs_remove(sdata->debugfs.default_key); + sdata->debugfs.default_key = NULL; + } + rcu_read_unlock(); } + void ieee80211_debugfs_key_remove_default(struct ieee80211_sub_if_data *sdata) { if (!sdata)