mac80211: mark station unauthorized before key removal
authorJohannes Berg <johannes.berg@intel.com>
Thu, 26 Mar 2020 14:51:35 +0000 (15:51 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Apr 2020 09:02:01 +0000 (11:02 +0200)
commit b16798f5b907733966fd1a558fca823b3c67e4a1 upstream.

If a station is still marked as authorized, mark it as no longer
so before removing its keys. This allows frames transmitted to it
to be rejected, providing additional protection against leaking
plain text data during the disconnection flow.

Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20200326155133.ccb4fb0bb356.If48f0f0504efdcf16b8921f48c6d3bb2cb763c99@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/mac80211/sta_info.c

index 8d3a2389b055cfd970564ea995ed2a8877a7ba9e..21b1422b1b1c39ceb80eedfe0ebf9d32bee3b87e 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
  * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
- * Copyright (C) 2018-2019 Intel Corporation
+ * Copyright (C) 2018-2020 Intel Corporation
  */
 
 #include <linux/module.h>
@@ -1032,6 +1032,11 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
        might_sleep();
        lockdep_assert_held(&local->sta_mtx);
 
+       while (sta->sta_state == IEEE80211_STA_AUTHORIZED) {
+               ret = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
+               WARN_ON_ONCE(ret);
+       }
+
        /* now keys can no longer be reached */
        ieee80211_free_sta_keys(local, sta);