]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
nl80211: Avoid sending unsupported attributes
authorBenjamin Berg <benjamin.berg@intel.com>
Thu, 28 Dec 2023 13:14:06 +0000 (15:14 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 14 Jan 2024 15:13:37 +0000 (17:13 +0200)
The kernel will reject commands if newer attributes are included even
though they should not be. Add appropriate checks in set_ap().

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
src/drivers/driver_nl80211.c
src/drivers/driver_nl80211.h

index 8313ac5943d22bfe43b7a21e6716ff91229a349b..4167b707ba7a3bc9beada05c71d28c9ff0c821dd 100644 (file)
@@ -5194,7 +5194,9 @@ static int wpa_driver_nl80211_set_ap(void *priv,
 
                flags |= NL80211_AP_SETTINGS_SA_QUERY_OFFLOAD_SUPPORT;
 
-               if (nla_put_u32(msg, NL80211_ATTR_AP_SETTINGS_FLAGS, flags))
+               if (nl80211_attr_supported(drv,
+                                          NL80211_ATTR_AP_SETTINGS_FLAGS) &&
+                   nla_put_u32(msg, NL80211_ATTR_AP_SETTINGS_FLAGS, flags))
                        goto fail;
        }
 
@@ -5328,7 +5330,8 @@ static int wpa_driver_nl80211_set_ap(void *priv,
        if (params->freq && nl80211_put_freq_params(msg, params->freq) < 0)
                goto fail;
 
-       if (params->freq && params->freq->he_enabled) {
+       if (params->freq && params->freq->he_enabled &&
+           nl80211_attr_supported(drv, NL80211_ATTR_HE_BSS_COLOR)) {
                struct nlattr *bss_color;
 
                bss_color = nla_nest_start(msg, NL80211_ATTR_HE_BSS_COLOR);
index 1eb5656fff81d61d141c7fd4c2945ab718b6a5ec..845603256ebfc169baa069f609a9d229525170ac 100644 (file)
@@ -353,6 +353,12 @@ const char * nl80211_iftype_str(enum nl80211_iftype mode);
 void nl80211_restore_ap_mode(struct i802_bss *bss);
 struct i802_link * nl80211_get_link(struct i802_bss *bss, s8 link_id);
 
+static inline bool
+nl80211_attr_supported(struct wpa_driver_nl80211_data *drv, unsigned int attr)
+{
+       return attr <= drv->global->nl80211_maxattr;
+}
+
 #ifdef ANDROID
 int android_nl_socket_set_nonblocking(struct nl_sock *handle);
 int android_pno_start(struct i802_bss *bss,