wifi: cfg80211: report unprotected deauth/disassoc in wowlan
authorShaul Triebitz <shaul.triebitz@intel.com>
Tue, 6 Feb 2024 14:54:11 +0000 (16:54 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 12 Feb 2024 20:22:48 +0000 (21:22 +0100)
Add to cfg80211_wowlan_wakeup another wakeup reason -
unprot_deauth_disassoc.
To be set to true if the woke up was due to an
unprotected deauth or disassoc frame in MFP.
In that case report WOWLAN_TRIG_UNPROTECTED_DEAUTH_DISASSOC.

Signed-off-by: Shaul Triebitz <shaul.triebitz@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240206164849.a3d739850d03.I8f52a21c4f36d1af1f8068bed79e2f9cbf8289ef@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/cfg80211.h
net/wireless/nl80211.c

index 0a31515..93e9abb 100644 (file)
@@ -3612,12 +3612,15 @@ struct cfg80211_wowlan_nd_info {
  * @tcp_connlost: TCP connection lost or failed to establish
  * @tcp_nomoretokens: TCP data ran out of tokens
  * @net_detect: if not %NULL, woke up because of net detect
+ * @unprot_deauth_disassoc: woke up due to unprotected deauth or
+ *     disassoc frame (in MFP).
  */
 struct cfg80211_wowlan_wakeup {
        bool disconnect, magic_pkt, gtk_rekey_failure,
             eap_identity_req, four_way_handshake,
             rfkill_release, packet_80211,
-            tcp_match, tcp_connlost, tcp_nomoretokens;
+            tcp_match, tcp_connlost, tcp_nomoretokens,
+            unprot_deauth_disassoc;
        s32 pattern_idx;
        u32 packet_present_len, packet_len;
        const void *packet;
index 612ca99..5f18cbf 100644 (file)
@@ -19851,6 +19851,11 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev,
                                 NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS))
                        goto free_msg;
 
+               if (wakeup->unprot_deauth_disassoc &&
+                   nla_put_flag(msg,
+                                NL80211_WOWLAN_TRIG_UNPROTECTED_DEAUTH_DISASSOC))
+                       goto free_msg;
+
                if (wakeup->packet) {
                        u32 pkt_attr = NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211;
                        u32 len_attr = NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN;