Allow authentication frames with a random local address as transmit address if the driver supports. This is required for below cases: - Enabling use of randomized transmit address for PASN authentication frames improve privacy of WLAN clients. - To allow user space to use link address indicated by driver as transmit address for authentication frames triggered by NL80211_CMD_EXTERNAL_AUTH for MLO connection. Signed-off-by: Veerendranath Jakkam <quic_vjakkam@xxxxxxxxxxx> --- include/uapi/linux/nl80211.h | 4 ++++ net/wireless/mlme.c | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 279f9715919e..9e665f7b3e23 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -6225,6 +6225,9 @@ enum nl80211_feature_flags { * @NL80211_EXT_FEATURE_RADAR_BACKGROUND: Device supports background radar/CAC * detection. * + * @NL80211_EXT_FEATURE_AUTH_TX_RANDOM_TA: Device supports randomized TA + * for authentication frames in @NL80211_CMD_FRAME. + * * @NUM_NL80211_EXT_FEATURES: number of extended features. * @MAX_NL80211_EXT_FEATURES: highest extended feature index. */ @@ -6292,6 +6295,7 @@ enum nl80211_ext_feature_index { NL80211_EXT_FEATURE_BSS_COLOR, NL80211_EXT_FEATURE_FILS_CRYPTO_OFFLOAD, NL80211_EXT_FEATURE_RADAR_BACKGROUND, + NL80211_EXT_FEATURE_AUTH_TX_RANDOM_TA, /* add new features before the definition below */ NUM_NL80211_EXT_FEATURES, diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index 2bb4da97b66a..176513a75ddf 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c @@ -736,6 +736,16 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, } if (!ether_addr_equal(mgmt->sa, wdev_address(wdev))) { + /* Allow random TA to be used with authentication frames if the + * driver has indicated support for this. Otherwise, only allow + * the local address to be used. + */ + if (ieee80211_is_auth(mgmt->frame_control) && + wiphy_ext_feature_isset( + &rdev->wiphy, + NL80211_EXT_FEATURE_AUTH_TX_RANDOM_TA)) + goto out_tx; + /* Allow random TA to be used with Public Action frames if the * driver has indicated support for this. Otherwise, only allow * the local address to be used. @@ -755,6 +765,7 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev, return -EINVAL; } +out_tx: /* Transmit the Action frame as requested by user space */ return rdev_mgmt_tx(rdev, wdev, params, cookie); } -- 2.25.1