Date: Mon, 17 Mar 2025 13:15:59 GMT From: Cy Schubert <cy@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: 5cef4558c169 - main - net/hostapd* security/wpa-supplicant*: Fix 13 and 14 builds Message-ID: <202503171315.52HDFxbM014560@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by cy: URL: https://cgit.FreeBSD.org/ports/commit/?id=5cef4558c1690749b8f9dfb3747ea927e33a5edf commit 5cef4558c1690749b8f9dfb3747ea927e33a5edf Author: Cy Schubert <cy@FreeBSD.org> AuthorDate: 2025-03-16 14:42:04 +0000 Commit: Cy Schubert <cy@FreeBSD.org> CommitDate: 2025-03-17 13:15:29 +0000 net/hostapd* security/wpa-supplicant*: Fix 13 and 14 builds The updates imported from 15-CURRENT included features not implemented in FreeBSD 13 and 14. #ifdef them out. Fixes: 995f5b9b0e4d PR: 285371 --- .../files/patch-src_drivers_driver__bsd.c | 117 ++++++++++----------- net/hostapd/files/patch-src_drivers_driver__bsd.c | 90 +++++++++------- .../files/patch-src_drivers_driver__bsd.c | 117 ++++++++++----------- .../files/patch-src_drivers_driver__bsd.c | 90 +++++++++------- 4 files changed, 214 insertions(+), 200 deletions(-) diff --git a/net/hostapd-devel/files/patch-src_drivers_driver__bsd.c b/net/hostapd-devel/files/patch-src_drivers_driver__bsd.c index c0f39bee6eeb..53071c0f3f8e 100644 --- a/net/hostapd-devel/files/patch-src_drivers_driver__bsd.c +++ b/net/hostapd-devel/files/patch-src_drivers_driver__bsd.c @@ -1,6 +1,12 @@ ---- src/drivers/driver_bsd.c.orig 2025-02-15 11:51:02.000000000 -0800 -+++ src/drivers/driver_bsd.c 2025-03-13 13:43:16.777368000 -0700 -@@ -14,6 +14,7 @@ +--- src/drivers/driver_bsd.c.orig 2024-07-20 11:04:37.000000000 -0700 ++++ src/drivers/driver_bsd.c 2025-03-17 06:07:14.891847000 -0700 +@@ -9,11 +9,13 @@ + + #include "includes.h" + #include <sys/ioctl.h> ++#include <sys/param.h> + + #include "common.h" #include "driver.h" #include "eloop.h" #include "common/ieee802_11_defs.h" @@ -8,7 +14,7 @@ #include "common/wpa_common.h" #include <ifaddrs.h> -@@ -293,8 +294,9 @@ +@@ -293,8 +295,9 @@ } static int @@ -19,7 +25,7 @@ struct ifreq ifr; os_memset(&ifr, 0, sizeof(ifr)); -@@ -306,7 +308,34 @@ +@@ -306,7 +309,34 @@ return -1; } drv->flags = ifr.ifr_flags; @@ -54,55 +60,50 @@ } static int -@@ -325,9 +354,6 @@ - const u8 *key = params->key; - size_t key_len = params->key_len; - -- if (params->key_flag & KEY_FLAG_NEXT) -- return -1; -- - wpa_printf(MSG_DEBUG, "%s: alg=%d addr=%p key_idx=%d set_tx=%d " - "seq_len=%zu key_len=%zu", __func__, alg, addr, key_idx, - set_tx, seq_len, key_len); -@@ -352,6 +378,12 @@ +@@ -349,6 +379,14 @@ case WPA_ALG_CCMP: wk.ik_type = IEEE80211_CIPHER_AES_CCM; break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_ALG_GCMP: + wk.ik_type = IEEE80211_CIPHER_AES_GCM_128; + break; + case WPA_ALG_BIP_CMAC_128: + wk.ik_type = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif default: wpa_printf(MSG_ERROR, "%s: unknown alg=%d", __func__, alg); return -1; -@@ -422,7 +454,13 @@ - switch (params->wpa_group) { +@@ -420,6 +458,14 @@ case WPA_CIPHER_CCMP: v = IEEE80211_CIPHER_AES_CCM; -+ break; + break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_CIPHER_GCMP: + v = IEEE80211_CIPHER_AES_GCM_128; - break; ++ break; + case WPA_CIPHER_BIP_CMAC_128: + v = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif case WPA_CIPHER_TKIP: v = IEEE80211_CIPHER_TKIP; break; -@@ -459,6 +497,10 @@ +@@ -456,6 +502,12 @@ } v = 0; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + if (params->wpa_pairwise & WPA_CIPHER_BIP_CMAC_128) + v |= 1<<IEEE80211_CIPHER_BIP_CMAC_128; + if (params->wpa_pairwise & WPA_CIPHER_GCMP) + v |= 1<<IEEE80211_CIPHER_AES_GCM_128; ++#endif if (params->wpa_pairwise & WPA_CIPHER_CCMP) v |= 1<<IEEE80211_CIPHER_AES_CCM; if (params->wpa_pairwise & WPA_CIPHER_TKIP) -@@ -528,7 +570,7 @@ +@@ -525,7 +577,7 @@ __func__); return -1; } @@ -111,7 +112,7 @@ } static void -@@ -589,6 +631,7 @@ +@@ -586,6 +638,7 @@ mode = IFM_IEEE80211_11B; } else { mode = @@ -119,7 +120,7 @@ freq->ht_enabled ? IFM_IEEE80211_11NA : IFM_IEEE80211_11A; } -@@ -856,14 +899,18 @@ +@@ -853,14 +906,18 @@ drv = bsd_get_drvindex(global, ifm->ifm_index); if (drv == NULL) return; @@ -141,17 +142,7 @@ wpa_printf(MSG_DEBUG, "RTM_IFINFO: Interface '%s' UP", drv->ifname); wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED, -@@ -1001,8 +1048,7 @@ - } - - static void * --bsd_init(struct hostapd_data *hapd, struct wpa_init_params *params, -- enum wpa_p2p_mode p2p_mode) -+bsd_init(struct hostapd_data *hapd, struct wpa_init_params *params) - { - struct bsd_driver_data *drv; - -@@ -1031,7 +1077,8 @@ +@@ -1027,7 +1084,8 @@ if (l2_packet_get_own_addr(drv->sock_xmit, params->own_addr)) goto bad; @@ -161,7 +152,7 @@ goto bad; if (bsd_set_mediaopt(drv, IFM_OMASK, IFM_IEEE80211_HOSTAP) < 0) { -@@ -1056,12 +1103,13 @@ +@@ -1052,12 +1110,13 @@ { struct bsd_driver_data *drv = priv; @@ -176,13 +167,10 @@ static int bsd_set_sta_authorized(void *priv, const u8 *addr, unsigned int total_flags, unsigned int flags_or, -@@ -1200,6 +1248,34 @@ - struct bsd_driver_data *drv = ctx; +@@ -1199,13 +1258,41 @@ + } - drv_event_eapol_rx(drv->ctx, src_addr, buf, len); -+} -+ -+static int + static int +wpa_driver_bsd_set_rsn_wpa_ie(struct bsd_driver_data * drv, + struct wpa_driver_associate_params *params, const u8 *ie) +{ @@ -208,10 +196,11 @@ + return -1; + + return 0; - } - - static int -@@ -1208,8 +1284,8 @@ ++} ++ ++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; @@ -221,7 +210,7 @@ wpa_printf(MSG_DEBUG, "%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u" -@@ -1226,7 +1302,10 @@ +@@ -1222,7 +1309,10 @@ mode = 0 /* STA */; break; case IEEE80211_MODE_IBSS: @@ -232,7 +221,7 @@ break; case IEEE80211_MODE_AP: mode = IFM_IEEE80211_HOSTAP; -@@ -1255,22 +1334,31 @@ +@@ -1251,24 +1341,33 @@ ret = -1; if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) ret = -1; @@ -245,9 +234,6 @@ - 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) { + rsn_ie = get_ie(params->wpa_ie, params->wpa_ie_len, + WLAN_EID_RSN); @@ -267,9 +253,7 @@ + } + } -- if (params->wpa_ie_len && -- set80211param(drv, IEEE80211_IOC_WPA, -- params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) +- if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) + /* + * NB: interface must be marked UP for association + * or scanning (ap_scan=2) @@ -277,8 +261,15 @@ + if (bsd_ctrl_iface(drv, 1) < 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; +- os_memset(&mlme, 0, sizeof(mlme)); -@@ -1315,11 +1403,8 @@ + mlme.im_op = IEEE80211_MLME_ASSOC; + if (params->ssid != NULL) +@@ -1311,11 +1410,8 @@ } /* NB: interface must be marked UP to do a scan */ @@ -291,18 +282,20 @@ #ifdef IEEE80211_IOC_SCAN_MAX_SSID os_memset(&sr, 0, sizeof(sr)); -@@ -1499,6 +1584,10 @@ +@@ -1495,6 +1591,12 @@ drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP; if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_CCM) drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_GCM_128) + drv->capa.enc |= WPA_DRIVER_CAPA_ENC_GCMP; + if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_BIP_CMAC_128) + drv->capa.enc |= WPA_DRIVER_CAPA_ENC_BIP; ++#endif if (devcaps.dc_drivercaps & IEEE80211_C_HOSTAP) drv->capa.flags |= WPA_DRIVER_FLAGS_AP; -@@ -1551,6 +1640,8 @@ +@@ -1547,6 +1649,8 @@ } if (ifmr.ifm_current & IFM_IEEE80211_HOSTAP) return IEEE80211_M_HOSTAP; @@ -311,7 +304,7 @@ if (ifmr.ifm_current & IFM_IEEE80211_MONITOR) return IEEE80211_M_MONITOR; #ifdef IEEE80211_M_MBSS -@@ -1611,7 +1702,7 @@ +@@ -1607,7 +1711,7 @@ drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; /* Down interface during setup. */ @@ -320,13 +313,13 @@ goto fail; /* Proven to work, lets go! */ -@@ -1635,6 +1726,9 @@ +@@ -1630,6 +1734,9 @@ + if (drv->ifindex != 0 && !drv->if_removed) { wpa_driver_bsd_set_wpa(drv, 0); - ++ + /* NB: mark interface down */ + bsd_ctrl_iface(drv, 0); -+ + wpa_driver_bsd_set_wpa_internal(drv, drv->prev_wpa, drv->prev_privacy); - diff --git a/net/hostapd/files/patch-src_drivers_driver__bsd.c b/net/hostapd/files/patch-src_drivers_driver__bsd.c index 5c6671c0d638..53071c0f3f8e 100644 --- a/net/hostapd/files/patch-src_drivers_driver__bsd.c +++ b/net/hostapd/files/patch-src_drivers_driver__bsd.c @@ -1,6 +1,12 @@ --- src/drivers/driver_bsd.c.orig 2024-07-20 11:04:37.000000000 -0700 -+++ src/drivers/driver_bsd.c 2025-03-13 13:38:22.780127000 -0700 -@@ -14,6 +14,7 @@ ++++ src/drivers/driver_bsd.c 2025-03-17 06:07:14.891847000 -0700 +@@ -9,11 +9,13 @@ + + #include "includes.h" + #include <sys/ioctl.h> ++#include <sys/param.h> + + #include "common.h" #include "driver.h" #include "eloop.h" #include "common/ieee802_11_defs.h" @@ -8,7 +14,7 @@ #include "common/wpa_common.h" #include <ifaddrs.h> -@@ -293,8 +294,9 @@ +@@ -293,8 +295,9 @@ } static int @@ -19,7 +25,7 @@ struct ifreq ifr; os_memset(&ifr, 0, sizeof(ifr)); -@@ -306,7 +308,34 @@ +@@ -306,7 +309,34 @@ return -1; } drv->flags = ifr.ifr_flags; @@ -54,44 +60,50 @@ } static int -@@ -349,6 +378,12 @@ +@@ -349,6 +379,14 @@ case WPA_ALG_CCMP: wk.ik_type = IEEE80211_CIPHER_AES_CCM; break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_ALG_GCMP: + wk.ik_type = IEEE80211_CIPHER_AES_GCM_128; + break; + case WPA_ALG_BIP_CMAC_128: + wk.ik_type = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif default: wpa_printf(MSG_ERROR, "%s: unknown alg=%d", __func__, alg); return -1; -@@ -420,6 +455,12 @@ +@@ -420,6 +458,14 @@ case WPA_CIPHER_CCMP: v = IEEE80211_CIPHER_AES_CCM; break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_CIPHER_GCMP: + v = IEEE80211_CIPHER_AES_GCM_128; + break; + case WPA_CIPHER_BIP_CMAC_128: + v = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif case WPA_CIPHER_TKIP: v = IEEE80211_CIPHER_TKIP; break; -@@ -456,6 +497,10 @@ +@@ -456,6 +502,12 @@ } v = 0; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + if (params->wpa_pairwise & WPA_CIPHER_BIP_CMAC_128) + v |= 1<<IEEE80211_CIPHER_BIP_CMAC_128; + if (params->wpa_pairwise & WPA_CIPHER_GCMP) + v |= 1<<IEEE80211_CIPHER_AES_GCM_128; ++#endif if (params->wpa_pairwise & WPA_CIPHER_CCMP) v |= 1<<IEEE80211_CIPHER_AES_CCM; if (params->wpa_pairwise & WPA_CIPHER_TKIP) -@@ -525,7 +570,7 @@ +@@ -525,7 +577,7 @@ __func__); return -1; } @@ -100,7 +112,7 @@ } static void -@@ -586,6 +631,7 @@ +@@ -586,6 +638,7 @@ mode = IFM_IEEE80211_11B; } else { mode = @@ -108,7 +120,7 @@ freq->ht_enabled ? IFM_IEEE80211_11NA : IFM_IEEE80211_11A; } -@@ -853,14 +899,18 @@ +@@ -853,14 +906,18 @@ drv = bsd_get_drvindex(global, ifm->ifm_index); if (drv == NULL) return; @@ -130,7 +142,7 @@ wpa_printf(MSG_DEBUG, "RTM_IFINFO: Interface '%s' UP", drv->ifname); wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED, -@@ -1027,7 +1077,8 @@ +@@ -1027,7 +1084,8 @@ if (l2_packet_get_own_addr(drv->sock_xmit, params->own_addr)) goto bad; @@ -140,7 +152,7 @@ goto bad; if (bsd_set_mediaopt(drv, IFM_OMASK, IFM_IEEE80211_HOSTAP) < 0) { -@@ -1052,12 +1103,13 @@ +@@ -1052,12 +1110,13 @@ { struct bsd_driver_data *drv = priv; @@ -155,13 +167,10 @@ static int bsd_set_sta_authorized(void *priv, const u8 *addr, unsigned int total_flags, unsigned int flags_or, -@@ -1196,6 +1248,34 @@ - struct bsd_driver_data *drv = ctx; +@@ -1199,13 +1258,41 @@ + } - drv_event_eapol_rx(drv->ctx, src_addr, buf, len); -+} -+ -+static int + static int +wpa_driver_bsd_set_rsn_wpa_ie(struct bsd_driver_data * drv, + struct wpa_driver_associate_params *params, const u8 *ie) +{ @@ -187,10 +196,11 @@ + return -1; + + return 0; - } - - static int -@@ -1204,8 +1284,8 @@ ++} ++ ++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; @@ -200,7 +210,7 @@ wpa_printf(MSG_DEBUG, "%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u" -@@ -1222,7 +1302,10 @@ +@@ -1222,7 +1309,10 @@ mode = 0 /* STA */; break; case IEEE80211_MODE_IBSS: @@ -211,7 +221,7 @@ break; case IEEE80211_MODE_AP: mode = IFM_IEEE80211_HOSTAP; -@@ -1251,22 +1334,31 @@ +@@ -1251,24 +1341,33 @@ ret = -1; if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) ret = -1; @@ -224,9 +234,6 @@ - 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) { + rsn_ie = get_ie(params->wpa_ie, params->wpa_ie_len, + WLAN_EID_RSN); @@ -246,9 +253,7 @@ + } + } -- if (params->wpa_ie_len && -- set80211param(drv, IEEE80211_IOC_WPA, -- params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) +- if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) + /* + * NB: interface must be marked UP for association + * or scanning (ap_scan=2) @@ -256,8 +261,15 @@ + if (bsd_ctrl_iface(drv, 1) < 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; +- os_memset(&mlme, 0, sizeof(mlme)); -@@ -1311,11 +1403,8 @@ + mlme.im_op = IEEE80211_MLME_ASSOC; + if (params->ssid != NULL) +@@ -1311,11 +1410,8 @@ } /* NB: interface must be marked UP to do a scan */ @@ -270,18 +282,20 @@ #ifdef IEEE80211_IOC_SCAN_MAX_SSID os_memset(&sr, 0, sizeof(sr)); -@@ -1495,6 +1584,10 @@ +@@ -1495,6 +1591,12 @@ drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP; if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_CCM) drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_GCM_128) + drv->capa.enc |= WPA_DRIVER_CAPA_ENC_GCMP; + if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_BIP_CMAC_128) + drv->capa.enc |= WPA_DRIVER_CAPA_ENC_BIP; ++#endif if (devcaps.dc_drivercaps & IEEE80211_C_HOSTAP) drv->capa.flags |= WPA_DRIVER_FLAGS_AP; -@@ -1547,6 +1640,8 @@ +@@ -1547,6 +1649,8 @@ } if (ifmr.ifm_current & IFM_IEEE80211_HOSTAP) return IEEE80211_M_HOSTAP; @@ -290,7 +304,7 @@ if (ifmr.ifm_current & IFM_IEEE80211_MONITOR) return IEEE80211_M_MONITOR; #ifdef IEEE80211_M_MBSS -@@ -1607,7 +1702,7 @@ +@@ -1607,7 +1711,7 @@ drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; /* Down interface during setup. */ @@ -299,13 +313,13 @@ goto fail; /* Proven to work, lets go! */ -@@ -1631,6 +1726,9 @@ +@@ -1630,6 +1734,9 @@ + if (drv->ifindex != 0 && !drv->if_removed) { wpa_driver_bsd_set_wpa(drv, 0); - ++ + /* NB: mark interface down */ + bsd_ctrl_iface(drv, 0); -+ + wpa_driver_bsd_set_wpa_internal(drv, drv->prev_wpa, drv->prev_privacy); - diff --git a/security/wpa_supplicant-devel/files/patch-src_drivers_driver__bsd.c b/security/wpa_supplicant-devel/files/patch-src_drivers_driver__bsd.c index 61003e755553..53071c0f3f8e 100644 --- a/security/wpa_supplicant-devel/files/patch-src_drivers_driver__bsd.c +++ b/security/wpa_supplicant-devel/files/patch-src_drivers_driver__bsd.c @@ -1,6 +1,12 @@ ---- src/drivers/driver_bsd.c.orig 2025-02-15 11:51:02.000000000 -0800 -+++ src/drivers/driver_bsd.c 2025-03-13 13:42:51.318078000 -0700 -@@ -14,6 +14,7 @@ +--- src/drivers/driver_bsd.c.orig 2024-07-20 11:04:37.000000000 -0700 ++++ src/drivers/driver_bsd.c 2025-03-17 06:07:14.891847000 -0700 +@@ -9,11 +9,13 @@ + + #include "includes.h" + #include <sys/ioctl.h> ++#include <sys/param.h> + + #include "common.h" #include "driver.h" #include "eloop.h" #include "common/ieee802_11_defs.h" @@ -8,7 +14,7 @@ #include "common/wpa_common.h" #include <ifaddrs.h> -@@ -293,8 +294,9 @@ +@@ -293,8 +295,9 @@ } static int @@ -19,7 +25,7 @@ struct ifreq ifr; os_memset(&ifr, 0, sizeof(ifr)); -@@ -306,7 +308,34 @@ +@@ -306,7 +309,34 @@ return -1; } drv->flags = ifr.ifr_flags; @@ -54,55 +60,50 @@ } static int -@@ -325,9 +354,6 @@ - const u8 *key = params->key; - size_t key_len = params->key_len; - -- if (params->key_flag & KEY_FLAG_NEXT) -- return -1; -- - wpa_printf(MSG_DEBUG, "%s: alg=%d addr=%p key_idx=%d set_tx=%d " - "seq_len=%zu key_len=%zu", __func__, alg, addr, key_idx, - set_tx, seq_len, key_len); -@@ -352,6 +378,12 @@ +@@ -349,6 +379,14 @@ case WPA_ALG_CCMP: wk.ik_type = IEEE80211_CIPHER_AES_CCM; break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_ALG_GCMP: + wk.ik_type = IEEE80211_CIPHER_AES_GCM_128; + break; + case WPA_ALG_BIP_CMAC_128: + wk.ik_type = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif default: wpa_printf(MSG_ERROR, "%s: unknown alg=%d", __func__, alg); return -1; -@@ -422,7 +454,13 @@ - switch (params->wpa_group) { +@@ -420,6 +458,14 @@ case WPA_CIPHER_CCMP: v = IEEE80211_CIPHER_AES_CCM; -+ break; + break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_CIPHER_GCMP: + v = IEEE80211_CIPHER_AES_GCM_128; - break; ++ break; + case WPA_CIPHER_BIP_CMAC_128: + v = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif case WPA_CIPHER_TKIP: v = IEEE80211_CIPHER_TKIP; break; -@@ -459,6 +497,10 @@ +@@ -456,6 +502,12 @@ } v = 0; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + if (params->wpa_pairwise & WPA_CIPHER_BIP_CMAC_128) + v |= 1<<IEEE80211_CIPHER_BIP_CMAC_128; + if (params->wpa_pairwise & WPA_CIPHER_GCMP) + v |= 1<<IEEE80211_CIPHER_AES_GCM_128; ++#endif if (params->wpa_pairwise & WPA_CIPHER_CCMP) v |= 1<<IEEE80211_CIPHER_AES_CCM; if (params->wpa_pairwise & WPA_CIPHER_TKIP) -@@ -528,7 +570,7 @@ +@@ -525,7 +577,7 @@ __func__); return -1; } @@ -111,7 +112,7 @@ } static void -@@ -589,6 +631,7 @@ +@@ -586,6 +638,7 @@ mode = IFM_IEEE80211_11B; } else { mode = @@ -119,7 +120,7 @@ freq->ht_enabled ? IFM_IEEE80211_11NA : IFM_IEEE80211_11A; } -@@ -856,14 +899,18 @@ +@@ -853,14 +906,18 @@ drv = bsd_get_drvindex(global, ifm->ifm_index); if (drv == NULL) return; @@ -141,17 +142,7 @@ wpa_printf(MSG_DEBUG, "RTM_IFINFO: Interface '%s' UP", drv->ifname); wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_ENABLED, -@@ -1001,8 +1048,7 @@ - } - - static void * --bsd_init(struct hostapd_data *hapd, struct wpa_init_params *params, -- enum wpa_p2p_mode p2p_mode) -+bsd_init(struct hostapd_data *hapd, struct wpa_init_params *params) - { - struct bsd_driver_data *drv; - -@@ -1031,7 +1077,8 @@ +@@ -1027,7 +1084,8 @@ if (l2_packet_get_own_addr(drv->sock_xmit, params->own_addr)) goto bad; @@ -161,7 +152,7 @@ goto bad; if (bsd_set_mediaopt(drv, IFM_OMASK, IFM_IEEE80211_HOSTAP) < 0) { -@@ -1056,12 +1103,13 @@ +@@ -1052,12 +1110,13 @@ { struct bsd_driver_data *drv = priv; @@ -176,13 +167,10 @@ static int bsd_set_sta_authorized(void *priv, const u8 *addr, unsigned int total_flags, unsigned int flags_or, -@@ -1200,6 +1248,34 @@ - struct bsd_driver_data *drv = ctx; +@@ -1199,13 +1258,41 @@ + } - drv_event_eapol_rx(drv->ctx, src_addr, buf, len); -+} -+ -+static int + static int +wpa_driver_bsd_set_rsn_wpa_ie(struct bsd_driver_data * drv, + struct wpa_driver_associate_params *params, const u8 *ie) +{ @@ -208,10 +196,11 @@ + return -1; + + return 0; - } - - static int -@@ -1208,8 +1284,8 @@ ++} ++ ++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; @@ -221,7 +210,7 @@ wpa_printf(MSG_DEBUG, "%s: ssid '%.*s' wpa ie len %u pairwise %u group %u key mgmt %u" -@@ -1226,7 +1302,10 @@ +@@ -1222,7 +1309,10 @@ mode = 0 /* STA */; break; case IEEE80211_MODE_IBSS: @@ -232,7 +221,7 @@ break; case IEEE80211_MODE_AP: mode = IFM_IEEE80211_HOSTAP; -@@ -1255,22 +1334,31 @@ +@@ -1251,24 +1341,33 @@ ret = -1; if (wpa_driver_bsd_set_auth_alg(drv, params->auth_alg) < 0) ret = -1; @@ -245,9 +234,6 @@ - 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) { + rsn_ie = get_ie(params->wpa_ie, params->wpa_ie_len, + WLAN_EID_RSN); @@ -267,9 +253,7 @@ + } + } -- if (params->wpa_ie_len && -- set80211param(drv, IEEE80211_IOC_WPA, -- params->wpa_ie[0] == WLAN_EID_RSN ? 2 : 1) < 0) +- if (set80211param(drv, IEEE80211_IOC_PRIVACY, privacy) < 0) + /* + * NB: interface must be marked UP for association + * or scanning (ap_scan=2) @@ -277,8 +261,15 @@ + if (bsd_ctrl_iface(drv, 1) < 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; +- os_memset(&mlme, 0, sizeof(mlme)); -@@ -1315,11 +1403,8 @@ + mlme.im_op = IEEE80211_MLME_ASSOC; + if (params->ssid != NULL) +@@ -1311,11 +1410,8 @@ } /* NB: interface must be marked UP to do a scan */ @@ -291,18 +282,20 @@ #ifdef IEEE80211_IOC_SCAN_MAX_SSID os_memset(&sr, 0, sizeof(sr)); -@@ -1499,6 +1584,10 @@ +@@ -1495,6 +1591,12 @@ drv->capa.enc |= WPA_DRIVER_CAPA_ENC_TKIP; if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_CCM) drv->capa.enc |= WPA_DRIVER_CAPA_ENC_CCMP; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_AES_GCM_128) + drv->capa.enc |= WPA_DRIVER_CAPA_ENC_GCMP; + if (devcaps.dc_cryptocaps & IEEE80211_CRYPTO_BIP_CMAC_128) + drv->capa.enc |= WPA_DRIVER_CAPA_ENC_BIP; ++#endif if (devcaps.dc_drivercaps & IEEE80211_C_HOSTAP) drv->capa.flags |= WPA_DRIVER_FLAGS_AP; -@@ -1551,6 +1640,8 @@ +@@ -1547,6 +1649,8 @@ } if (ifmr.ifm_current & IFM_IEEE80211_HOSTAP) return IEEE80211_M_HOSTAP; @@ -311,7 +304,7 @@ if (ifmr.ifm_current & IFM_IEEE80211_MONITOR) return IEEE80211_M_MONITOR; #ifdef IEEE80211_M_MBSS -@@ -1611,7 +1702,7 @@ +@@ -1607,7 +1711,7 @@ drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; /* Down interface during setup. */ @@ -320,13 +313,13 @@ goto fail; /* Proven to work, lets go! */ -@@ -1635,6 +1726,9 @@ +@@ -1630,6 +1734,9 @@ + if (drv->ifindex != 0 && !drv->if_removed) { wpa_driver_bsd_set_wpa(drv, 0); - ++ + /* NB: mark interface down */ + bsd_ctrl_iface(drv, 0); -+ + wpa_driver_bsd_set_wpa_internal(drv, drv->prev_wpa, drv->prev_privacy); - diff --git a/security/wpa_supplicant/files/patch-src_drivers_driver__bsd.c b/security/wpa_supplicant/files/patch-src_drivers_driver__bsd.c index 19bf94621aaa..53071c0f3f8e 100644 --- a/security/wpa_supplicant/files/patch-src_drivers_driver__bsd.c +++ b/security/wpa_supplicant/files/patch-src_drivers_driver__bsd.c @@ -1,6 +1,12 @@ --- src/drivers/driver_bsd.c.orig 2024-07-20 11:04:37.000000000 -0700 -+++ src/drivers/driver_bsd.c 2025-03-13 13:35:55.927279000 -0700 -@@ -14,6 +14,7 @@ ++++ src/drivers/driver_bsd.c 2025-03-17 06:07:14.891847000 -0700 +@@ -9,11 +9,13 @@ + + #include "includes.h" + #include <sys/ioctl.h> ++#include <sys/param.h> + + #include "common.h" #include "driver.h" #include "eloop.h" #include "common/ieee802_11_defs.h" @@ -8,7 +14,7 @@ #include "common/wpa_common.h" #include <ifaddrs.h> -@@ -293,8 +294,9 @@ +@@ -293,8 +295,9 @@ } static int @@ -19,7 +25,7 @@ struct ifreq ifr; os_memset(&ifr, 0, sizeof(ifr)); -@@ -306,7 +308,34 @@ +@@ -306,7 +309,34 @@ return -1; } drv->flags = ifr.ifr_flags; @@ -54,44 +60,50 @@ } static int -@@ -349,6 +378,12 @@ +@@ -349,6 +379,14 @@ case WPA_ALG_CCMP: wk.ik_type = IEEE80211_CIPHER_AES_CCM; break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_ALG_GCMP: + wk.ik_type = IEEE80211_CIPHER_AES_GCM_128; + break; + case WPA_ALG_BIP_CMAC_128: + wk.ik_type = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif default: wpa_printf(MSG_ERROR, "%s: unknown alg=%d", __func__, alg); return -1; -@@ -420,6 +455,12 @@ +@@ -420,6 +458,14 @@ case WPA_CIPHER_CCMP: v = IEEE80211_CIPHER_AES_CCM; break; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + case WPA_CIPHER_GCMP: + v = IEEE80211_CIPHER_AES_GCM_128; + break; + case WPA_CIPHER_BIP_CMAC_128: + v = IEEE80211_CIPHER_BIP_CMAC_128; + break; ++#endif case WPA_CIPHER_TKIP: v = IEEE80211_CIPHER_TKIP; break; -@@ -456,6 +497,10 @@ +@@ -456,6 +502,12 @@ } v = 0; ++#if defined(__FreeBSD_version) && __FreeBSD_version >= 1500027 + if (params->wpa_pairwise & WPA_CIPHER_BIP_CMAC_128) + v |= 1<<IEEE80211_CIPHER_BIP_CMAC_128; + if (params->wpa_pairwise & WPA_CIPHER_GCMP) + v |= 1<<IEEE80211_CIPHER_AES_GCM_128; ++#endif if (params->wpa_pairwise & WPA_CIPHER_CCMP) v |= 1<<IEEE80211_CIPHER_AES_CCM; if (params->wpa_pairwise & WPA_CIPHER_TKIP) -@@ -525,7 +570,7 @@ +@@ -525,7 +577,7 @@ __func__); return -1; } @@ -100,7 +112,7 @@ } static void -@@ -586,6 +631,7 @@ +@@ -586,6 +638,7 @@ mode = IFM_IEEE80211_11B; } else { mode = @@ -108,7 +120,7 @@ freq->ht_enabled ? IFM_IEEE80211_11NA : IFM_IEEE80211_11A; } -@@ -853,14 +899,18 @@ +@@ -853,14 +906,18 @@ drv = bsd_get_drvindex(global, ifm->ifm_index); if (drv == NULL) return; @@ -130,7 +142,7 @@ wpa_printf(MSG_DEBUG, "RTM_IFINFO: Interface '%s' UP", drv->ifname); *** 154 LINES SKIPPED ***home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202503171315.52HDFxbM014560>
