From nobody Wed Jul 06 00:33:02 2022 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 310841D0BCAD; Wed, 6 Jul 2022 00:33:04 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Ld0rH1fWZz4q4w; Wed, 6 Jul 2022 00:33:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1657067583; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=X5xBcCR49rLcSQifpt0IJeDz4YuewzKsD3c1WmVBMB4=; b=S5YTwnnIlMsU3HYgO9spncgPFysV0+ZAUyhxOT7CH+SopM5M4OLF7RXkDOqB6fkrmusPvX H7RWTgBXWlcIHv/5aoHkEuejUOfAMZzILipzkWRTft2ruMJBBDz++emuZ6ADONp15WihGH ka2C4awwL7Lwt2ReuA0Re9kZGfOBLrQP3J6tJr/kUv82WlEaw+Tbc78axaC+2llCM/qnxN 6091cwHZUZ/yyQQSfifcyhqENuiFBpAfBREvOfgYV1HhND9gc2AtFVI63vakgjMiE4Or+q ezWVnfWwlm8d/DACdaoph1eyXzCrzJIcXA8q7kBC34SLtRYTrq/S9VauQO3mXQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 07AEB7E55; Wed, 6 Jul 2022 00:33:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2660X245043109; Wed, 6 Jul 2022 00:33:02 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2660X2pV043108; Wed, 6 Jul 2022 00:33:02 GMT (envelope-from git) Date: Wed, 6 Jul 2022 00:33:02 GMT Message-Id: <202207060033.2660X2pV043108@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Cy Schubert Subject: git: 7c38194341bf - stable/12 - wpa_supplicant: Resolve secondary VAP association issue List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cy X-Git-Repository: src X-Git-Refname: refs/heads/stable/12 X-Git-Reftype: branch X-Git-Commit: 7c38194341bf39e8878e3a88838aac7880825c02 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1657067583; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=X5xBcCR49rLcSQifpt0IJeDz4YuewzKsD3c1WmVBMB4=; b=Pobbvc1TplA7yiwYNlunQlRsjiMfNedZtGA8Zgg37sho4ns0BTd95bjlSI5HiWdWTdsJy8 rSQxOinsQ2Z/eeLMXW9ChRgBIEkawbtA37i8B7KIJOJ+8Ut7aEmjGaJuYCEasfa8wEfwzt a7mGf6KTDlL1DNqLjRwg81z3bSHhjN1fm/cFbUf0J86qzqH9YfXem9DmJNGKQ3Y8r5o7cw VOOTjPHNZbs1KTJRTzsnWY4xwg61obnCqQdd0/niECEjQS1tqASZ6Qh0p+mbW1fbZA9RhT rv0H/QAOdGCffinLzVeNA2H17U6BG7MuYbHHFIqy3e8XRKXzf6rnYTDEKiA9pg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1657067583; a=rsa-sha256; cv=none; b=oq2ESqweR6+8ZvNM/e77Tc23i5y4Lrim4pEpntzkgbRCXwg0MYxl49FBe6jGe5VA6JnrbD 469ngJWWtzU0DdxkDCqGpyeQLx7kblMFIIBWMSPvfsRURGEy9orkRjFHXlYdmEnro70YJO 5lHXXqAOSn5w3oC4YTjblQ12ifNfh1+qy53ttYo3SPav5LGXt9Au9RetSD9zdnCkRpH+jq oWVTYmFzo8owas4QSQlNzUvlD/BKoZ/JwiZu+QxveDjbZMqGGKHsCTZRHWAE+SZBco+X8Z uyYaYJApD9DueocwhHHYy687kEEWNhvdcZcinMkBNrlrpdYnTRAEkUCQksQmPg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/12 has been updated by cy: URL: https://cgit.FreeBSD.org/src/commit/?id=7c38194341bf39e8878e3a88838aac7880825c02 commit 7c38194341bf39e8878e3a88838aac7880825c02 Author: J.R. Oldroyd AuthorDate: 2022-07-02 18:15:31 +0000 Commit: Cy Schubert CommitDate: 2022-07-06 00:32:53 +0000 wpa_supplicant: Resolve secondary VAP association issue Association will fail on a secondary open unprotected VAP when the primary VAP is configured for WPA. Examples of secondary VAPs are, hotels, universities, and commodity routers' guest networks. A broadly similar bug was discussed on Red Hat's bugzilla affecting association to a D-Link DIR-842. This suggests that as IEs were added to the 802.11 protocol the old code was increasingly inadaquate to handle the additional IEs, not only a secondary VAP. PR: 264238 Reported by: Jaskie "J.R. Oldroyd" Submitted by: "J.R. Oldroyd" (cherry picked from commit 775611ea11db0973fd8b7aef0f5eb527308efd05) --- contrib/wpa/src/drivers/driver_bsd.c | 65 ++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/contrib/wpa/src/drivers/driver_bsd.c b/contrib/wpa/src/drivers/driver_bsd.c index c455bc931036..345bbb892ecf 100644 --- a/contrib/wpa/src/drivers/driver_bsd.c +++ b/contrib/wpa/src/drivers/driver_bsd.c @@ -14,6 +14,7 @@ #include "driver.h" #include "eloop.h" #include "common/ieee802_11_defs.h" +#include "common/ieee802_11_common.h" #include "common/wpa_common.h" #include @@ -1200,14 +1201,42 @@ handle_read(void *ctx, const u8 *src_addr, const u8 *buf, size_t len) drv_event_eapol_rx(drv->ctx, src_addr, buf, len); } +static int +wpa_driver_bsd_set_rsn_wpa_ie(struct bsd_driver_data * drv, + struct wpa_driver_associate_params *params, const u8 *ie) +{ + int privacy; + size_t ie_len = ie[1] ? ie[1] + 2 : 0; + + /* XXX error handling is wrong but unclear what to do... */ + if (wpa_driver_bsd_set_wpa_ie(drv, ie, ie_len) < 0) + return -1; + + privacy = !(params->pairwise_suite == WPA_CIPHER_NONE && + params->group_suite == WPA_CIPHER_NONE && + params->key_mgmt_suite == WPA_KEY_MGMT_NONE); + wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, + privacy); + + if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) + return -1; + + if (ie_len && + set80211param(drv, IEEE80211_IOC_WPA, + ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) + return -1; + + return 0; +} + static int wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params) { struct bsd_driver_data *drv = priv; struct ieee80211req_mlme mlme; u32 mode; - int privacy; int ret = 0; + const u8 *wpa_ie, *rsn_ie; wpa_printf(MSG_DEBUG, "%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u" @@ -1256,23 +1285,25 @@ wpa_driver_bsd_associate(void *priv, struct wpa_driver_associate_params *params) ret = -1; if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) ret = -1; - /* XXX error handling is wrong but unclear what to do... */ - if (wpa_driver_bsd_set_wpa_ie(drv, params->wpa_ie, params->wpa_ie_len) < 0) - return -1; - privacy = !(params->pairwise_suite == WPA_CIPHER_NONE && - params->group_suite == WPA_CIPHER_NONE && - params->key_mgmt_suite == WPA_KEY_MGMT_NONE && - params->wpa_ie_len == 0); - wpa_printf(MSG_DEBUG, "%s: set PRIVACY %u", __func__, privacy); - - if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) - return -1; - - if (params->wpa_ie_len && - set80211param(drv, IEEE80211_IOC_WPA, - params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) - return -1; + if (params->wpa_ie_len) { + rsn_ie = get_ie(params->wpa_ie, params->wpa_ie_len, + WLAN_EID_RSN); + if (rsn_ie) { + if (wpa_driver_bsd_set_rsn_wpa_ie(drv, params, + rsn_ie) < 0) + return -1; + } + else { + wpa_ie = get_vendor_ie(params->wpa_ie, + params->wpa_ie_len, WPA_IE_VENDOR_TYPE); + if (wpa_ie) { + if (wpa_driver_bsd_set_rsn_wpa_ie(drv, params, + wpa_ie) < 0) + return -1; + } + } + } /* * NB: interface must be marked UP for association