mac80211: fix debugfs default key links
Due to the way the default key links are created, it happens that a link is left dangling: * both unicast/multicast links are created * unicast link is destroyed, and the links are updated * during this update, adding the multicast link again fails because it is present, destroying the debugfs pointer * removing the multicast link won't work as the pointer has been destroyed Fix this by always removing the links and then re-creating them if needed. Reported-by: Marek Lindner <lindner_marek@yahoo.de> Reported-by: Antonio Quartulli <ordex@autistici.org> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
95ddc1fc45
commit
135792ec24
|
@ -283,6 +283,11 @@ void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata)
|
|||
|
||||
lockdep_assert_held(&sdata->local->key_mtx);
|
||||
|
||||
if (sdata->debugfs.default_unicast_key) {
|
||||
debugfs_remove(sdata->debugfs.default_unicast_key);
|
||||
sdata->debugfs.default_unicast_key = NULL;
|
||||
}
|
||||
|
||||
if (sdata->default_unicast_key) {
|
||||
key = key_mtx_dereference(sdata->local,
|
||||
sdata->default_unicast_key);
|
||||
|
@ -290,9 +295,11 @@ void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata)
|
|||
sdata->debugfs.default_unicast_key =
|
||||
debugfs_create_symlink("default_unicast_key",
|
||||
sdata->debugfs.dir, buf);
|
||||
} else {
|
||||
debugfs_remove(sdata->debugfs.default_unicast_key);
|
||||
sdata->debugfs.default_unicast_key = NULL;
|
||||
}
|
||||
|
||||
if (sdata->debugfs.default_multicast_key) {
|
||||
debugfs_remove(sdata->debugfs.default_multicast_key);
|
||||
sdata->debugfs.default_multicast_key = NULL;
|
||||
}
|
||||
|
||||
if (sdata->default_multicast_key) {
|
||||
|
@ -302,9 +309,6 @@ void ieee80211_debugfs_key_update_default(struct ieee80211_sub_if_data *sdata)
|
|||
sdata->debugfs.default_multicast_key =
|
||||
debugfs_create_symlink("default_multicast_key",
|
||||
sdata->debugfs.dir, buf);
|
||||
} else {
|
||||
debugfs_remove(sdata->debugfs.default_multicast_key);
|
||||
sdata->debugfs.default_multicast_key = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue