]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
nl80211: Use bss->nl_connect unconditionally
authorJouni Malinen <quic_jouni@quicinc.com>
Mon, 18 Dec 2023 21:45:09 +0000 (23:45 +0200)
committerJouni Malinen <j@w1.fi>
Mon, 18 Dec 2023 21:45:09 +0000 (23:45 +0200)
Doing this based on driver support for control port RX or SAE seems like
undesired extra complexity. Just use this in all cases where the special
handle for a longer term operation, like connection or AP mode
operation, is needed.

Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
src/drivers/driver_nl80211.c
src/drivers/driver_nl80211.h

index 818b6d0c73b581ef3303758a70250acfab02a357..0d5677cbc931df462a3c5527e50ea50f0955a1c1 100644 (file)
@@ -627,14 +627,14 @@ static int send_and_recv_msgs_owner(struct wpa_driver_nl80211_data *drv,
         * the connection owner property set in the kernel.
         */
        if ((drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) &&
-           handle && set_owner &&
+           set_owner &&
            (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_OVER_NL80211) ||
             nla_put_flag(msg, NL80211_ATTR_SOCKET_OWNER) ||
             nla_put_u16(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE, ETH_P_PAE) ||
             nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_PREAUTH)))
                return -1;
 
-       return send_and_recv(drv->global, handle ? handle : drv->global->nl,
+       return send_and_recv(drv->global, handle,
                             msg, valid_handler, valid_data,
                             ack_handler_custom, ack_data, err_info);
 }
@@ -645,25 +645,9 @@ send_and_recv_msgs_connect_handle(struct wpa_driver_nl80211_data *drv,
                                  int set_owner,
                                  struct nl80211_err_info *err_info)
 {
-       struct nl_sock *nl_connect = get_connect_handle(bss);
-
-       if (nl_connect)
-               return send_and_recv_msgs_owner(drv, msg, nl_connect, set_owner,
-                                               NULL, NULL, NULL,
-                                               NULL, err_info);
-       else
-               return send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL,
-                                         err_info);
-}
-
-
-struct nl_sock * get_connect_handle(struct i802_bss *bss)
-{
-       if ((bss->drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) ||
-           bss->use_nl_connect)
-               return bss->nl_connect;
-
-       return NULL;
+       return send_and_recv_msgs_owner(drv, msg, bss->nl_connect, set_owner,
+                                       NULL, NULL, NULL,
+                                       NULL, err_info);
 }
 
 
@@ -3801,7 +3785,6 @@ int wpa_driver_nl80211_mlme(struct wpa_driver_nl80211_data *drv,
 {
        int ret;
        struct nl_msg *msg;
-       struct nl_sock *nl_connect = get_connect_handle(bss);
 
        if (!(msg = nl80211_drv_msg(drv, 0, cmd)) ||
            nla_put_u16(msg, NL80211_ATTR_REASON_CODE, reason_code) ||
@@ -3812,12 +3795,8 @@ int wpa_driver_nl80211_mlme(struct wpa_driver_nl80211_data *drv,
                return -1;
        }
 
-       if (nl_connect)
-               ret = send_and_recv(drv->global, nl_connect, msg,
-                                   NULL, NULL, NULL, NULL, NULL);
-       else
-               ret = send_and_recv_msgs(drv, msg, NULL, NULL, NULL, NULL,
-                                        NULL);
+       ret = send_and_recv(drv->global, bss->nl_connect, msg,
+                           NULL, NULL, NULL, NULL, NULL);
        if (ret) {
                wpa_dbg(drv->ctx, MSG_DEBUG,
                        "nl80211: MLME command failed: reason=%u ret=%d (%s)",
@@ -7285,11 +7264,6 @@ static int wpa_driver_nl80211_associate(
 
                if (wpa_driver_nl80211_set_mode(priv, nlmode) < 0)
                        return -1;
-               if (wpa_key_mgmt_sae(params->key_mgmt_suite) ||
-                   wpa_key_mgmt_sae(params->allowed_key_mgmts))
-                       bss->use_nl_connect = 1;
-               else
-                       bss->use_nl_connect = 0;
 
                return wpa_driver_nl80211_connect(drv, params, bss);
        }
@@ -11487,7 +11461,7 @@ static int nl80211_vendor_cmd(void *priv, unsigned int vendor_id,
                 * need the connect nl_sock, so use the owner-setting variant
                 * of send_and_recv_msgs(). */
                ret = send_and_recv_msgs_owner(drv, msg,
-                                              get_connect_handle(bss), 0,
+                                              bss->nl_connect, 0,
                                               cmd_reply_handler, buf,
                                               NULL, NULL, NULL);
                if (ret)
index f82f604e9017b40e1a4791dd1ddbf523a2f92af3..5db8c405d42a5da38a4f56b3dc9ab0929350a8fa 100644 (file)
@@ -81,7 +81,6 @@ struct i802_bss {
        unsigned int wdev_id_set:1;
        unsigned int added_if:1;
        unsigned int static_ap:1;
-       unsigned int use_nl_connect:1;
 
        u8 addr[ETH_ALEN];
        u8 prev_addr[ETH_ALEN];
@@ -285,7 +284,6 @@ int send_and_recv_msgs(struct wpa_driver_nl80211_data *drv, struct nl_msg *msg,
                       int (*ack_handler_custom)(struct nl_msg *, void *),
                       void *ack_data,
                       struct nl80211_err_info *err_info);
-struct nl_sock * get_connect_handle(struct i802_bss *bss);
 int nl80211_create_iface(struct wpa_driver_nl80211_data *drv,
                         const char *ifname, enum nl80211_iftype iftype,
                         const u8 *addr, int wds,