From 345404476ac8fe88db06493b24194314e3107606 Mon Sep 17 00:00:00 2001 From: Ivan Pavlov Date: Wed, 8 Jul 2026 16:49:02 +0300 Subject: [PATCH] hostapd: update to 2026-07-09 Update to latest version from 2.12 branch Manually edit patches: - 110-mbedtls-TLS-crypto-option-initial-port.patch - 140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch - 780-Implement-APuP-Access-Point-Micro-Peering.patch Restored previously removed patch: - 060-nl80211-fix-reporting-spurious-frame-events.patch Removed upstreamed patches: - 001-AP-MLD-Fix-link-ID-validation-in-Basic-MLE-parsing.patch - 002-BSS-Add-bounds-check-for-link_id-in-Basic-MLE-parsin.patch - 003-MLD-Validate-MLE-Link-ID-fields-in-association-rejec.patch - 004-Verify-MLD-link-ID-validity-in-get_basic_mle_link_id.patch - 005-MLD-Verify-link-ID-validity-in-MLE-in-reconfiguratio.patch - 006-AP-MLD-Verify-AP-MLD-link-ID-validity-before-updatin.patch - 007-MLD-Fix-length-check-in-common-info-for-association-.patch - 008-BSS-Fix-validation-of-ML-common-info-length-during-s.patch All other patches refreshed automatically Fixes: https://github.com/openwrt/openwrt/issues/23867 Fixes: https://github.com/openwrt/openwrt/commit/89f57d48f945579fd45566240113be04f9431467 Runtime tested on: mt7622/Xiaomi redmi ax6s (openssl), mt76x8/Asus AC1200 (mbedtls) with 802.11r configuration. Signed-off-by: Ivan Pavlov Link: https://github.com/openwrt/openwrt/pull/24142 Signed-off-by: Jonas Jelonek --- package/network/services/hostapd/Makefile | 6 +- ...k-ID-validation-in-Basic-MLE-parsing.patch | 43 ------ ...heck-for-link_id-in-Basic-MLE-parsin.patch | 38 ------ ...-Link-ID-fields-in-association-rejec.patch | 45 ------ ...ID-validity-in-get_basic_mle_link_id.patch | 38 ------ ...ID-validity-in-MLE-in-reconfiguratio.patch | 49 ------- ...-MLD-link-ID-validity-before-updatin.patch | 37 ----- ...heck-in-common-info-for-association-.patch | 37 ----- ...on-of-ML-common-info-length-during-s.patch | 55 -------- ...hannels-to-be-selected-if-dfs-is-ena.patch | 24 ++-- ...erministic-channel-on-channel-switch.patch | 2 +- ...ix-sta-add-after-previous-connection.patch | 4 +- ...-extra-ies-only-if-allowed-by-driver.patch | 4 +- ...-fix-reporting-spurious-frame-events.patch | 22 +++ ...edtls-TLS-crypto-option-initial-port.patch | 30 ++-- .../patches/120-mbedtls-fips186_2_prf.patch | 2 +- ...efile-make-run-tests-with-CONFIG_TLS.patch | 30 ++-- ...void-stopping-DPP-chirp-when-offchan.patch | 2 +- ...tapd-update-cfs0-and-cfs1-for-160MHz.patch | 2 +- ...ort-for-specifying-the-link-id-in-th.patch | 6 +- .../hostapd/patches/200-multicall.patch | 38 +++--- .../patches/201-lto-jobserver-support.patch | 2 +- ..._AP-functions-dependant-on-CONFIG_AP.patch | 4 +- .../patches/220-indicate-features.patch | 6 +- .../patches/250-hostapd_cli_ifdef.patch | 12 +- .../patches/252-disable_ctrl_iface_mib.patch | 24 ++-- .../services/hostapd/patches/300-noscan.patch | 2 +- .../hostapd/patches/301-mesh-noscan.patch | 10 +- .../patches/310-rescan_immediately.patch | 2 +- .../341-mesh-ctrl-iface-channel-switch.patch | 4 +- .../patches/370-preserve_radio_mask.patch | 36 ++--- .../381-hostapd_cli_UNKNOWN-COMMAND.patch | 2 +- ...dd-new-config-params-to-be-used-with.patch | 10 +- .../patches/463-add-mcast_rate-to-11s.patch | 6 +- .../patches/464-fix-mesh-obss-check.patch | 2 +- .../hostapd/patches/600-ubus_support.patch | 36 ++--- .../hostapd/patches/601-ucode_support.patch | 129 ++++++++---------- .../patches/701-reload_config_inline.patch | 6 +- .../patches/720-iface_max_num_sta.patch | 4 +- .../hostapd/patches/730-ft_iface.patch | 2 +- .../hostapd/patches/740-snoop_iface.patch | 6 +- ...probe-requests-with-invalid-DSSS-par.patch | 2 +- .../hostapd/patches/770-radius_server.patch | 2 +- ...ment-APuP-Access-Point-Micro-Peering.patch | 28 ++-- 44 files changed, 264 insertions(+), 587 deletions(-) delete mode 100644 package/network/services/hostapd/patches/001-AP-MLD-Fix-link-ID-validation-in-Basic-MLE-parsing.patch delete mode 100644 package/network/services/hostapd/patches/002-BSS-Add-bounds-check-for-link_id-in-Basic-MLE-parsin.patch delete mode 100644 package/network/services/hostapd/patches/003-MLD-Validate-MLE-Link-ID-fields-in-association-rejec.patch delete mode 100644 package/network/services/hostapd/patches/004-Verify-MLD-link-ID-validity-in-get_basic_mle_link_id.patch delete mode 100644 package/network/services/hostapd/patches/005-MLD-Verify-link-ID-validity-in-MLE-in-reconfiguratio.patch delete mode 100644 package/network/services/hostapd/patches/006-AP-MLD-Verify-AP-MLD-link-ID-validity-before-updatin.patch delete mode 100644 package/network/services/hostapd/patches/007-MLD-Fix-length-check-in-common-info-for-association-.patch delete mode 100644 package/network/services/hostapd/patches/008-BSS-Fix-validation-of-ML-common-info-length-during-s.patch create mode 100644 package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index e765ef503fb..34d08c6b24c 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -9,9 +9,9 @@ PKG_RELEASE:=2 PKG_SOURCE_URL:=https://w1.fi/hostap.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2026-04-02 -PKG_SOURCE_VERSION:=b004de0bf1b54d669d358b7f33d6f474bd9719a6 -PKG_MIRROR_HASH:=0b0184e600c994a1f0415f52e8af26b39f13e376a30cdf0b4f3ca1a206e52fc8 +PKG_SOURCE_DATE:=2026-07-09 +PKG_SOURCE_VERSION:=f08f2749aa696c4e47c5c0f591dda99951bf9fac +PKG_MIRROR_HASH:=c1a978092c8a6e43a9e1bd47e1f334637b9c4969ca741c30ff45c24539132ca4 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=BSD-3-Clause diff --git a/package/network/services/hostapd/patches/001-AP-MLD-Fix-link-ID-validation-in-Basic-MLE-parsing.patch b/package/network/services/hostapd/patches/001-AP-MLD-Fix-link-ID-validation-in-Basic-MLE-parsing.patch deleted file mode 100644 index 1be3d8fdc7a..00000000000 --- a/package/network/services/hostapd/patches/001-AP-MLD-Fix-link-ID-validation-in-Basic-MLE-parsing.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 46dd5a4ffc9bcf44cf8fc45120b3e1e5ec922187 Mon Sep 17 00:00:00 2001 -From: Jouni Malinen -Date: Tue, 31 Mar 2026 23:24:04 +0300 -Subject: AP MLD: Fix link ID validation in Basic MLE parsing - -Link ID 15 can be indicated in the field, but that is not a valid value -and must be rejected to avoid issues pointing beyond the array of links -for a non-AP MLD. Without this, an invalid MLE could result in writing -beyond the end of the buffer and causing process termination or -unexpected behavior. - -Fixes: 5f5db9366cde ("AP: MLO: Process Multi-Link element from (Re)Association Request frame") -Signed-off-by: Jouni Malinen ---- - src/ap/ieee802_11_eht.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - ---- a/src/ap/ieee802_11_eht.c -+++ b/src/ap/ieee802_11_eht.c -@@ -1382,6 +1382,7 @@ u16 hostapd_process_ml_assoc_req(struct - u16 control; - const u8 *sub_elem_end; - int num_frag_subelems; -+ u8 link_id; - - num_frag_subelems = - ieee802_11_defrag_mle_subelem(mlbuf, pos, -@@ -1433,8 +1434,13 @@ u16 hostapd_process_ml_assoc_req(struct - goto out; - } - control = WPA_GET_LE16(pos); -- link_info = &info->links[control & -- BASIC_MLE_STA_CTRL_LINK_ID_MASK]; -+ link_id = control & BASIC_MLE_STA_CTRL_LINK_ID_MASK; -+ if (link_id >= MAX_NUM_MLD_LINKS) { -+ wpa_printf(MSG_DEBUG, -+ "MLD: Invalid Link ID in Per-STA Profile subelement"); -+ goto out; -+ } -+ link_info = &info->links[link_id]; - pos += 2; - - if (!(control & BASIC_MLE_STA_CTRL_COMPLETE_PROFILE)) { diff --git a/package/network/services/hostapd/patches/002-BSS-Add-bounds-check-for-link_id-in-Basic-MLE-parsin.patch b/package/network/services/hostapd/patches/002-BSS-Add-bounds-check-for-link_id-in-Basic-MLE-parsin.patch deleted file mode 100644 index 5fafd6ac455..00000000000 --- a/package/network/services/hostapd/patches/002-BSS-Add-bounds-check-for-link_id-in-Basic-MLE-parsin.patch +++ /dev/null @@ -1,38 +0,0 @@ -From aa9d345887389a251c63a3781d2ad2940d079193 Mon Sep 17 00:00:00 2001 -From: Amarnath Hullur Subramanyam -Date: Thu, 30 Apr 2026 18:24:35 -0700 -Subject: BSS: Add bounds check for link_id in Basic MLE parsing - -In wpa_bss_parse_basic_ml_element() in bss.c, an extracted link_id is -used without validation against the maximum allowed links -(MAX_NUM_MLD_LINKS). Processing a malformed Basic Multi-Link element -(MLE) with an out-of-bounds link_id could lead to memory corruption. -However, the modified location is within the body of the received frame -and as such, this does not result in additional issues since that area -is controlled by the transmitter of the frame. In any case, it is better -to be explicit with validating the Link ID value. - -This commit introduces a strict bounds check immediately after link_id -extraction. If link_id exceeds or equals MAX_NUM_MLD_LINKS, parsing is -gracefully aborted with a debug log entry. - -Fixes: de5e01010cb2 ("wpa_supplicant: Support ML probe request") -Signed-off-by: Amarnath Hullur Subramanyam ---- - wpa_supplicant/bss.c | 5 +++++ - 1 file changed, 5 insertions(+) - ---- a/wpa_supplicant/bss.c -+++ b/wpa_supplicant/bss.c -@@ -2055,6 +2055,11 @@ void wpa_bss_parse_basic_ml_element(stru - goto out; - - link_id = ml_basic_common_info->variable[0] & EHT_ML_LINK_ID_MSK; -+ if (link_id >= MAX_NUM_MLD_LINKS) { -+ wpa_printf(MSG_DEBUG, "MLD: Invalid link ID %u in Basic MLE", -+ link_id); -+ goto out; -+ } - - os_memcpy(bss->mld_addr, ml_basic_common_info->mld_addr, ETH_ALEN); - diff --git a/package/network/services/hostapd/patches/003-MLD-Validate-MLE-Link-ID-fields-in-association-rejec.patch b/package/network/services/hostapd/patches/003-MLD-Validate-MLE-Link-ID-fields-in-association-rejec.patch deleted file mode 100644 index 7c4d5695700..00000000000 --- a/package/network/services/hostapd/patches/003-MLD-Validate-MLE-Link-ID-fields-in-association-rejec.patch +++ /dev/null @@ -1,45 +0,0 @@ -From a8531e3d871e6fa72f2f85d91e9f787326b2af8b Mon Sep 17 00:00:00 2001 -From: Jouni Malinen -Date: Tue, 31 Mar 2026 23:16:08 +0300 -Subject: MLD: Validate MLE Link ID fields in association rejection case - -The Link ID Info field in the Common Info field needs to ignore the -reserved bits to be more extensible for future. Both that link ID for -the association link and the link IDs for other links need to be -verified to be within the valid range (0-14), so check that here. The -parsed link ID was not used for anything yet, but it is better to make -sure this in theory common parser is not exposing invalid data to the -caller should it be used for additional purposes in the future. - -Signed-off-by: Jouni Malinen ---- - wpa_supplicant/events.c | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - ---- a/wpa_supplicant/events.c -+++ b/wpa_supplicant/events.c -@@ -4318,7 +4318,12 @@ static unsigned int wpas_ml_parse_assoc( - pos = common_info->variable; - - /* Store the information for the association link */ -- ml_info[i].link_id = *pos; -+ ml_info[i].link_id = *pos & EHT_ML_LINK_ID_MSK; -+ if (ml_info[i].link_id >= MAX_NUM_MLD_LINKS) { -+ wpa_printf(MSG_DEBUG, -+ "MLD: Invalid Link ID value for assoc link"); -+ goto out; -+ } - pos++; - - /* Skip the BSS Parameters Change Count */ -@@ -4474,6 +4479,10 @@ static unsigned int wpas_ml_parse_assoc( - MAC2STR(pos + 1), nstr_bitmap_len); - - ml_info[i].link_id = ctrl & BASIC_MLE_STA_CTRL_LINK_ID_MASK; -+ if (ml_info[i].link_id >= MAX_NUM_MLD_LINKS) { -+ wpa_printf(MSG_DEBUG, "MLD: Invalid Link ID value"); -+ goto out; -+ } - os_memcpy(ml_info[i].bssid, pos + 1, ETH_ALEN); - - pos += sta_info_len; diff --git a/package/network/services/hostapd/patches/004-Verify-MLD-link-ID-validity-in-get_basic_mle_link_id.patch b/package/network/services/hostapd/patches/004-Verify-MLD-link-ID-validity-in-get_basic_mle_link_id.patch deleted file mode 100644 index d0110ae384f..00000000000 --- a/package/network/services/hostapd/patches/004-Verify-MLD-link-ID-validity-in-get_basic_mle_link_id.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 56216d113909650ae59621dc2dd16157afb94948 Mon Sep 17 00:00:00 2001 -From: Jouni Malinen -Date: Mon, 18 May 2026 11:57:02 +0300 -Subject: Verify MLD link ID validity in get_basic_mle_link_id() - -Link ID is 0..14, so ignore value 15 if an invalid frame is processed. -It does not look like the returned value was actually used to reference -any local array, but in any case, it is better to not return an invalid -value to reduce risk for unexpected behavior in the future. - -Signed-off-by: Jouni Malinen ---- - src/common/ieee802_11_common.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - ---- a/src/common/ieee802_11_common.c -+++ b/src/common/ieee802_11_common.c -@@ -3714,6 +3714,7 @@ int get_basic_mle_link_id(const u8 *buf, - ETH_ALEN; /* MLD MAC Address field (Basic) */ - size_t common_info_limit; - u8 common_info_len; -+ u8 link_id; - - if (len < MULTI_LINK_CONTROL_LEN) - return -1; -@@ -3735,7 +3736,11 @@ int get_basic_mle_link_id(const u8 *buf, - if (link_id_pos + EHT_ML_LINK_ID_LEN > common_info_limit) - return -1; - -- return buf[link_id_pos] & BASIC_MLE_STA_CTRL_LINK_ID_MASK; -+ link_id = buf[link_id_pos] & BASIC_MLE_STA_CTRL_LINK_ID_MASK; -+ if (link_id >= MAX_NUM_MLD_LINKS) -+ return -1; -+ -+ return link_id; - } - - diff --git a/package/network/services/hostapd/patches/005-MLD-Verify-link-ID-validity-in-MLE-in-reconfiguratio.patch b/package/network/services/hostapd/patches/005-MLD-Verify-link-ID-validity-in-MLE-in-reconfiguratio.patch deleted file mode 100644 index d045b45b7b4..00000000000 --- a/package/network/services/hostapd/patches/005-MLD-Verify-link-ID-validity-in-MLE-in-reconfiguratio.patch +++ /dev/null @@ -1,49 +0,0 @@ -From e4bd3442c2223802bf8c4a4d868e3b9443c7caf4 Mon Sep 17 00:00:00 2001 -From: Jouni Malinen -Date: Mon, 18 May 2026 12:13:21 +0300 -Subject: MLD: Verify link ID validity in MLE in reconfiguration cases - -Ignore or reject invalid link ID value 15 in ML reconfiguration. - -Signed-off-by: Jouni Malinen ---- - src/ap/ieee802_11_eht.c | 2 ++ - wpa_supplicant/bss.c | 3 ++- - wpa_supplicant/wnm_sta.c | 3 ++- - 3 files changed, 6 insertions(+), 2 deletions(-) - ---- a/src/ap/ieee802_11_eht.c -+++ b/src/ap/ieee802_11_eht.c -@@ -2166,6 +2166,8 @@ hostapd_parse_link_reconf_req_sta_profil - - link_id = sta_control & EHT_PER_STA_RECONF_CTRL_LINK_ID_MSK; - wpa_printf(MSG_DEBUG, "MLD: Per-STA profile for link=%u", link_id); -+ if (link_id >= MAX_NUM_MLD_LINKS) -+ goto out; - - reconf_type_mask = - sta_control & EHT_PER_STA_RECONF_CTRL_OP_UPDATE_TYPE_MSK; ---- a/wpa_supplicant/bss.c -+++ b/wpa_supplicant/bss.c -@@ -2243,7 +2243,8 @@ u16 wpa_bss_parse_reconf_ml_element(stru - u8 link_id; - - link_id = control & EHT_PER_STA_RECONF_CTRL_LINK_ID_MSK; -- removed_links |= BIT(link_id); -+ if (link_id < MAX_NUM_MLD_LINKS) -+ removed_links |= BIT(link_id); - } - - pos += 2 + sub_elem_len; ---- a/wpa_supplicant/wnm_sta.c -+++ b/wpa_supplicant/wnm_sta.c -@@ -546,7 +546,8 @@ static void wnm_parse_neighbor_report_mu - control = le_to_host16(sta_prof->sta_control); - - link_id = control & EHT_PER_STA_RECONF_CTRL_LINK_ID_MSK; -- rep->mld_links |= BIT(link_id); -+ if (link_id < MAX_NUM_MLD_LINKS) -+ rep->mld_links |= BIT(link_id); - } - - pos += 2 + sub_elem_len; diff --git a/package/network/services/hostapd/patches/006-AP-MLD-Verify-AP-MLD-link-ID-validity-before-updatin.patch b/package/network/services/hostapd/patches/006-AP-MLD-Verify-AP-MLD-link-ID-validity-before-updatin.patch deleted file mode 100644 index 3242e7a295a..00000000000 --- a/package/network/services/hostapd/patches/006-AP-MLD-Verify-AP-MLD-link-ID-validity-before-updatin.patch +++ /dev/null @@ -1,37 +0,0 @@ -From ce1a8612e309fe86133ecf05ffb452b0bdf3b035 Mon Sep 17 00:00:00 2001 -From: Jouni Malinen -Date: Mon, 18 May 2026 15:45:15 +0300 -Subject: AP MLD: Verify AP MLD link ID validity before updating bitmap of - links - -Link ID is 0..14, so ignore value 15 if an invalid frame is processed. -It does not look like the invalid value was actually used to reference -any local array, but in any case, it is better to not mark an invalid -link as being specified. - -Signed-off-by: Jouni Malinen ---- - src/ap/beacon.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - ---- a/src/ap/beacon.c -+++ b/src/ap/beacon.c -@@ -1411,6 +1411,7 @@ static bool parse_ml_probe_req(const str - for_each_element_id(sub, 0, pos, len) { - const struct ieee80211_eht_per_sta_profile *sta; - u16 sta_control; -+ u8 link_id; - - if (*links == 0xffff) - *links = 0; -@@ -1430,7 +1431,9 @@ static bool parse_ml_probe_req(const str - * partial profile was requested. - */ - sta_control = le_to_host16(sta->sta_control); -- *links |= BIT(sta_control & BASIC_MLE_STA_CTRL_LINK_ID_MASK); -+ link_id = sta_control & BASIC_MLE_STA_CTRL_LINK_ID_MASK; -+ if (link_id < MAX_NUM_MLD_LINKS) -+ *links |= BIT(link_id); - } - - if (!for_each_element_completed(sub, pos, len)) { diff --git a/package/network/services/hostapd/patches/007-MLD-Fix-length-check-in-common-info-for-association-.patch b/package/network/services/hostapd/patches/007-MLD-Fix-length-check-in-common-info-for-association-.patch deleted file mode 100644 index ab68f79f880..00000000000 --- a/package/network/services/hostapd/patches/007-MLD-Fix-length-check-in-common-info-for-association-.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 41c86a2ebed50567c73de23c102c2bf83eb883f2 Mon Sep 17 00:00:00 2001 -From: Jouni Malinen -Date: Tue, 31 Mar 2026 17:47:03 +0300 -Subject: MLD: Fix length check in common info for association failure cases - -It is not sufficient to check that the indicated common info length is -sufficiently large to contain the information; there needs to be a check -for the indicated value to not be too large to go beyond the end of the -MLE as well. Without this, invalid MLE might result in ml_len wrapping -around to a huge value and reading beyond the end of the buffer for the -received frame. This could result in process termination. - -Add the missed check for the Common Info field not being truncated in -the MLE in association failure cases. - -Fixes: a58a0c592e20 ("MLD: Fix Multi-Link element parsing for association failures") -Signed-off-by: Jouni Malinen ---- - wpa_supplicant/events.c | 7 +++++++ - 1 file changed, 7 insertions(+) - ---- a/wpa_supplicant/events.c -+++ b/wpa_supplicant/events.c -@@ -4306,6 +4306,13 @@ static unsigned int wpas_ml_parse_assoc( - goto out; - } - -+ if (sizeof(*ml) + common_info->len > ml_len) { -+ wpa_printf(MSG_DEBUG, -+ "MLD: Truncated common info (common_info->len=%u ml_len=%zu)", -+ common_info->len, ml_len); -+ goto out; -+ } -+ - wpa_printf(MSG_DEBUG, "MLD: address: " MACSTR, - MAC2STR(common_info->mld_addr)); - diff --git a/package/network/services/hostapd/patches/008-BSS-Fix-validation-of-ML-common-info-length-during-s.patch b/package/network/services/hostapd/patches/008-BSS-Fix-validation-of-ML-common-info-length-during-s.patch deleted file mode 100644 index 6b603a1aca9..00000000000 --- a/package/network/services/hostapd/patches/008-BSS-Fix-validation-of-ML-common-info-length-during-s.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 595194d0305189922a057e8ea8b743a1bd8d2d29 Mon Sep 17 00:00:00 2001 -From: Jouni Malinen -Date: Mon, 18 May 2026 16:17:15 +0300 -Subject: BSS: Fix validation of ML common info length during scan result - parsing - -The validation of the ML common info length before use allowed reading -beyond the end of the element when the MSD info and EML capabilities -were claimed to be present but were not actually inclued. While this was -noticed after reading these fields and further processing of the element -was stopped, this could result in reading two bytes beyond the end of -the buffer. - -Avoid this by checking the remaining length explicitly for the optiional -fields. - -Fixes: 1b07e8baca13 ("BSS: Use correct AP MLD ID") -Signed-off-by: Jouni Malinen ---- - wpa_supplicant/bss.c | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - ---- a/wpa_supplicant/bss.c -+++ b/wpa_supplicant/bss.c -@@ -2006,13 +2006,20 @@ void wpa_bss_parse_basic_ml_element(stru - - /* Medium Synchronization Delay Information */ - if (le_to_host16(eht_ml->ml_control) & -- BASIC_MULTI_LINK_CTRL_PRES_MSD_INFO) -+ BASIC_MULTI_LINK_CTRL_PRES_MSD_INFO) { -+ if (ml_basic_common_info->len < -+ sizeof(*ml_basic_common_info) + pos + 2) -+ goto out; - pos += 2; -+ } - - /* EML Capabilities */ - bss->eml_capa = 0; - if (le_to_host16(eht_ml->ml_control) & - BASIC_MULTI_LINK_CTRL_PRES_EML_CAPA) { -+ if (ml_basic_common_info->len < -+ sizeof(*ml_basic_common_info) + pos + 2) -+ goto out; - bss->eml_capa = - WPA_GET_LE16(&ml_basic_common_info->variable[pos]); - pos += 2; -@@ -2020,6 +2027,8 @@ void wpa_bss_parse_basic_ml_element(stru - - /* MLD Capabilities And Operations (always present, see - * control/control_mask) */ -+ if (ml_basic_common_info->len < sizeof(*ml_basic_common_info) + pos + 2) -+ goto out; - bss->mld_capa = WPA_GET_LE16(&ml_basic_common_info->variable[pos]); - pos += 2; - diff --git a/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch b/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch index 74f64f37df0..76c2581c863 100644 --- a/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch +++ b/package/network/services/hostapd/patches/010-mesh-Allow-DFS-channels-to-be-selected-if-dfs-is-ena.patch @@ -14,7 +14,7 @@ Signed-off-by: Peter Oh --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -3048,7 +3048,7 @@ static int drv_supports_vht(struct wpa_s +@@ -3062,7 +3062,7 @@ static int drv_supports_vht(struct wpa_s } @@ -23,7 +23,7 @@ Signed-off-by: Peter Oh { int i; -@@ -3057,7 +3057,10 @@ static bool ibss_mesh_is_80mhz_avail(int +@@ -3071,7 +3071,10 @@ static bool ibss_mesh_is_80mhz_avail(int chan = hw_get_channel_chan(mode, i, NULL); if (!chan || @@ -35,7 +35,7 @@ Signed-off-by: Peter Oh return false; } -@@ -3184,7 +3187,7 @@ static void ibss_mesh_select_40mhz(struc +@@ -3198,7 +3201,7 @@ static void ibss_mesh_select_40mhz(struc const struct wpa_ssid *ssid, struct hostapd_hw_modes *mode, struct hostapd_freq_params *freq, @@ -44,7 +44,7 @@ Signed-off-by: Peter Oh { int chan_idx; struct hostapd_channel_data *pri_chan = NULL, *sec_chan = NULL; -@@ -3215,8 +3218,11 @@ static void ibss_mesh_select_40mhz(struc +@@ -3229,8 +3232,11 @@ static void ibss_mesh_select_40mhz(struc return; /* Check primary channel flags */ @@ -58,7 +58,7 @@ Signed-off-by: Peter Oh #ifdef CONFIG_HT_OVERRIDES if (ssid->disable_ht40) -@@ -3251,8 +3257,11 @@ static void ibss_mesh_select_40mhz(struc +@@ -3265,8 +3271,11 @@ static void ibss_mesh_select_40mhz(struc return; /* Check secondary channel flags */ @@ -72,7 +72,7 @@ Signed-off-by: Peter Oh if (freq->ht_enabled) { if (ht40 == -1) { -@@ -3330,7 +3339,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3344,7 +3353,7 @@ static bool ibss_mesh_select_80_160mhz(s const struct wpa_ssid *ssid, struct hostapd_hw_modes *mode, struct hostapd_freq_params *freq, @@ -81,7 +81,7 @@ Signed-off-by: Peter Oh static const int bw80[] = { 5180, 5260, 5500, 5580, 5660, 5745, 5825, 5955, 6035, 6115, 6195, 6275, 6355, 6435, -@@ -3383,7 +3392,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3397,7 +3406,7 @@ static bool ibss_mesh_select_80_160mhz(s goto skip_80mhz; /* Use 40 MHz if channel not usable */ @@ -90,7 +90,7 @@ Signed-off-by: Peter Oh goto skip_80mhz; chwidth = CONF_OPER_CHWIDTH_80MHZ; -@@ -3425,7 +3434,7 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3439,7 +3448,7 @@ static bool ibss_mesh_select_80_160mhz(s HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G) && (ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_160MHZ || ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ) && @@ -99,7 +99,7 @@ Signed-off-by: Peter Oh for (j = 0; j < ARRAY_SIZE(bw160); j++) { u8 start_chan; -@@ -3448,11 +3457,11 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3462,11 +3471,11 @@ static bool ibss_mesh_select_80_160mhz(s EHT_PHYCAP_320MHZ_IN_6GHZ_SUPPORT_MASK) && is_6ghz && ssid->max_oper_chwidth == CONF_OPER_CHWIDTH_320MHZ && ibss_mesh_is_80mhz_avail(channel + 16 - @@ -114,7 +114,7 @@ Signed-off-by: Peter Oh for (j = 0; j < ARRAY_SIZE(bw320); j += 2) { if (freq->freq >= bw320[j] && freq->freq <= bw320[j + 1]) { -@@ -3481,10 +3490,12 @@ static bool ibss_mesh_select_80_160mhz(s +@@ -3495,10 +3504,12 @@ static bool ibss_mesh_select_80_160mhz(s if (!chan) continue; @@ -131,7 +131,7 @@ Signed-off-by: Peter Oh /* Found a suitable second segment for 80+80 */ chwidth = CONF_OPER_CHWIDTH_80P80MHZ; -@@ -3539,6 +3550,7 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3553,6 +3564,7 @@ void ibss_mesh_setup_freq(struct wpa_sup int obss_scan = 1; u8 channel; bool is_6ghz, is_24ghz; @@ -139,7 +139,7 @@ Signed-off-by: Peter Oh freq->freq = ssid->frequency; -@@ -3582,9 +3594,9 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3596,9 +3608,9 @@ void ibss_mesh_setup_freq(struct wpa_sup /* Setup higher BW only for 5 and 6 GHz */ if (mode->mode == HOSTAPD_MODE_IEEE80211A) { ibss_mesh_select_40mhz(wpa_s, ssid, mode, freq, obss_scan, diff --git a/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch b/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch index c81a8474c23..37f13f0512d 100644 --- a/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch +++ b/package/network/services/hostapd/patches/011-mesh-use-deterministic-channel-on-channel-switch.patch @@ -68,7 +68,7 @@ Signed-off-by: Markus Theil chan_idx, num_available_chandefs); --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -12012,6 +12012,10 @@ static int nl80211_switch_channel(void * +@@ -12349,6 +12349,10 @@ static int nl80211_switch_channel(void * if (ret) goto error; diff --git a/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch b/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch index 70a1cb5d3b4..9de53dd10c3 100644 --- a/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch +++ b/package/network/services/hostapd/patches/021-fix-sta-add-after-previous-connection.patch @@ -4,7 +4,7 @@ Subject: [PATCH] fix adding back stations after a missed deauth/disassoc --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c -@@ -6370,6 +6370,13 @@ static int add_associated_sta(struct hos +@@ -6511,6 +6511,13 @@ static int add_associated_sta(struct hos * drivers to accept the STA parameter configuration. Since this is * after a new FT-over-DS exchange, a new TK has been derived, so key * reinstallation is not a concern for this case. @@ -18,7 +18,7 @@ Subject: [PATCH] fix adding back stations after a missed deauth/disassoc */ wpa_printf(MSG_DEBUG, "Add associated STA " MACSTR " (added_unassoc=%d auth_alg=%u ft_over_ds=%u reassoc=%d authorized=%d ft_tk=%d fils_tk=%d)", -@@ -6383,7 +6390,8 @@ static int add_associated_sta(struct hos +@@ -6524,7 +6531,8 @@ static int add_associated_sta(struct hos (!(sta->flags & WLAN_STA_AUTHORIZED) || (reassoc && sta->ft_over_ds && sta->auth_alg == WLAN_AUTH_FT) || (!wpa_auth_sta_ft_tk_already_set(sta->wpa_sm) && diff --git a/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch b/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch index 34823de67b9..7dd22edcd38 100644 --- a/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch +++ b/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch @@ -26,7 +26,7 @@ Signed-off-by: David Bauer --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -2469,6 +2469,9 @@ struct wpa_driver_capa { +@@ -2595,6 +2595,9 @@ struct wpa_driver_capa { /** Maximum number of iterations in a single scan plan */ u32 max_sched_scan_plan_iterations; @@ -38,7 +38,7 @@ Signed-off-by: David Bauer --- a/src/drivers/driver_nl80211_capa.c +++ b/src/drivers/driver_nl80211_capa.c -@@ -1004,6 +1004,10 @@ static int wiphy_info_handler(struct nl_ +@@ -1370,6 +1370,10 @@ static int wiphy_info_handler(struct nl_ nla_get_u32(tb[NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS]); } diff --git a/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch b/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch new file mode 100644 index 00000000000..2640150c51c --- /dev/null +++ b/package/network/services/hostapd/patches/060-nl80211-fix-reporting-spurious-frame-events.patch @@ -0,0 +1,22 @@ +From: Felix Fietkau +Date: Tue, 26 Aug 2025 22:04:57 +0200 +Subject: [PATCH] nl80211: fix reporting spurious frame events + +When the nl80211 driver is shared across multiple interfaces (on the same +wiphy), nl80211_spurious_frame can send the event to the wrong interface by +using drv->ctx. Fix this by using bss->ctx instead. + +Signed-off-by: Felix Fietkau +--- + +--- a/src/drivers/driver_nl80211_event.c ++++ b/src/drivers/driver_nl80211_event.c +@@ -2874,7 +2874,7 @@ static void nl80211_spurious_frame(struc + event.rx_from_unknown.link_id = tb[NL80211_ATTR_MLO_LINK_ID] ? + nla_get_u8(tb[NL80211_ATTR_MLO_LINK_ID]) : -1; + +- wpa_supplicant_event(drv->ctx, EVENT_RX_FROM_UNKNOWN, &event); ++ wpa_supplicant_event(bss->ctx, EVENT_RX_FROM_UNKNOWN, &event); + } + + diff --git a/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch b/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch index e728fa72708..7e7664e1c21 100644 --- a/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch +++ b/package/network/services/hostapd/patches/110-mbedtls-TLS-crypto-option-initial-port.patch @@ -283,13 +283,15 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_AES HOBJS += ../src/crypto/aes-internal.o HOBJS += ../src/crypto/aes-internal-enc.o -@@ -1402,18 +1489,24 @@ SOBJS += ../src/common/sae.o +@@ -1402,6 +1489,7 @@ SOBJS += ../src/common/sae.o SOBJS += ../src/common/sae_pk.o SOBJS += ../src/common/dragonfly.o SOBJS += $(AESOBJS) +ifneq ($(CONFIG_TLS), mbedtls) - SOBJS += ../src/crypto/sha384.o - SOBJS += ../src/crypto/sha512.o + ifneq ($(CONFIG_TLS), openssl) + ifneq ($(CONFIG_TLS), linux) + ifneq ($(CONFIG_TLS), gnutls) +@@ -1415,17 +1503,22 @@ endif SOBJS += ../src/crypto/sha256-prf.o SOBJS += ../src/crypto/sha384-prf.o SOBJS += ../src/crypto/sha512-prf.o @@ -301,7 +303,11 @@ Signed-off-by: Glenn Strauss SOBJS += ../src/crypto/sha512-kdf.o +endif SOBJS += ../src/common/wpa_common.o + ifdef CONFIG_NO_RANDOM_POOL + CFLAGS += -DCONFIG_NO_RANDOM_POOL + else SOBJS += ../src/crypto/random.o + endif +ifneq ($(CONFIG_TLS), mbedtls) SOBJS += ../src/crypto/sha1-prf.o +endif @@ -7770,7 +7776,7 @@ Signed-off-by: Glenn Strauss CONFIG_SIM_SIMULATOR=y --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1271,6 +1271,29 @@ endif +@@ -1276,6 +1276,29 @@ endif CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONFIG_TLS_DEFAULT_CIPHERS)\" endif @@ -7800,7 +7806,7 @@ Signed-off-by: Glenn Strauss ifeq ($(CONFIG_TLS), gnutls) ifndef CONFIG_CRYPTO # default to libgcrypt -@@ -1463,9 +1486,11 @@ endif +@@ -1468,9 +1491,11 @@ endif ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) @@ -7812,7 +7818,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_OPENSSL_INTERNAL_AES_WRAP # Seems to be needed at least with BoringSSL NEED_INTERNAL_AES_WRAP=y -@@ -1479,9 +1504,11 @@ endif +@@ -1484,9 +1509,11 @@ endif ifdef NEED_INTERNAL_AES_WRAP ifneq ($(CONFIG_TLS), linux) @@ -7824,7 +7830,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_AES_EAX AESOBJS += ../src/crypto/aes-eax.o NEED_AES_CTR=y -@@ -1491,35 +1518,45 @@ AESOBJS += ../src/crypto/aes-siv.o +@@ -1496,35 +1523,45 @@ AESOBJS += ../src/crypto/aes-siv.o NEED_AES_CTR=y endif ifdef NEED_AES_CTR @@ -7870,7 +7876,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_AES_ENC ifdef CONFIG_INTERNAL_AES AESOBJS += ../src/crypto/aes-internal-enc.o -@@ -1534,12 +1571,16 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1539,12 +1576,16 @@ ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) ifneq ($(CONFIG_TLS), wolfssl) @@ -7887,7 +7893,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_SHA1 SHA1OBJS += ../src/crypto/sha1-internal.o ifdef NEED_FIPS186_2_PRF -@@ -1551,29 +1592,37 @@ CFLAGS += -DCONFIG_NO_PBKDF2 +@@ -1556,29 +1597,37 @@ CFLAGS += -DCONFIG_NO_PBKDF2 else ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) @@ -7925,7 +7931,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_MD5 ifdef CONFIG_INTERNAL_MD5 MD5OBJS += ../src/crypto/md5-internal.o -@@ -1628,12 +1677,17 @@ ifneq ($(CONFIG_TLS), openssl) +@@ -1633,12 +1682,17 @@ ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), linux) ifneq ($(CONFIG_TLS), gnutls) ifneq ($(CONFIG_TLS), wolfssl) @@ -7943,7 +7949,7 @@ Signed-off-by: Glenn Strauss ifdef CONFIG_INTERNAL_SHA256 SHA256OBJS += ../src/crypto/sha256-internal.o endif -@@ -1646,50 +1700,68 @@ CFLAGS += -DCONFIG_INTERNAL_SHA512 +@@ -1651,50 +1705,68 @@ CFLAGS += -DCONFIG_INTERNAL_SHA512 SHA256OBJS += ../src/crypto/sha512-internal.o endif ifdef NEED_TLS_PRF_SHA256 @@ -8012,7 +8018,7 @@ Signed-off-by: Glenn Strauss ifdef NEED_ASN1 OBJS += ../src/tls/asn1.o -@@ -1864,10 +1936,12 @@ ifdef CONFIG_FIPS +@@ -1869,10 +1941,12 @@ ifdef CONFIG_FIPS CFLAGS += -DCONFIG_FIPS ifneq ($(CONFIG_TLS), openssl) ifneq ($(CONFIG_TLS), wolfssl) diff --git a/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch b/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch index faeec75a8ef..db67c442e33 100644 --- a/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch +++ b/package/network/services/hostapd/patches/120-mbedtls-fips186_2_prf.patch @@ -101,7 +101,7 @@ Signed-off-by: Glenn Strauss --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1282,10 +1282,6 @@ endif +@@ -1287,10 +1287,6 @@ endif OBJS += ../src/crypto/crypto_$(CONFIG_CRYPTO).o OBJS_p += ../src/crypto/crypto_$(CONFIG_CRYPTO).o OBJS_priv += ../src/crypto/crypto_$(CONFIG_CRYPTO).o diff --git a/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch b/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch index 23e5af97b6e..1cdba474f42 100644 --- a/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch +++ b/package/network/services/hostapd/patches/140-tests-Makefile-make-run-tests-with-CONFIG_TLS.patch @@ -695,7 +695,7 @@ Signed-off-by: Glenn Strauss tls = dev.request("GET tls_library") + if tls.startswith("mbed TLS"): + raise HwsimSkip("TLS v1.3 not supported") - ok = ['run=OpenSSL 1.1.1', 'run=OpenSSL 3.', 'wolfSSL'] + ok = ['run=OpenSSL', 'wolfSSL'] for s in ok: if s in tls: @@ -121,11 +160,15 @@ def check_pkcs12_support(dev): @@ -979,7 +979,7 @@ Signed-off-by: Glenn Strauss raise HwsimSkip("Crypto library does not support Brainpool curves: " + tls) capa = dev.request("GET_CAPABILITY dpp") ver = 1 -@@ -3940,6 +3941,9 @@ def test_dpp_proto_auth_req_no_i_proto_k +@@ -3968,6 +3969,9 @@ def test_dpp_proto_auth_req_no_i_proto_k def test_dpp_proto_auth_req_invalid_i_proto_key(dev, apdev): """DPP protocol testing - invalid I-proto key in Auth Req""" @@ -989,7 +989,7 @@ Signed-off-by: Glenn Strauss run_dpp_proto_auth_req_missing(dev, 66, "Invalid Initiator Protocol Key") def test_dpp_proto_auth_req_no_i_nonce(dev, apdev): -@@ -4035,7 +4039,12 @@ def test_dpp_proto_auth_resp_no_r_proto_ +@@ -4063,7 +4067,12 @@ def test_dpp_proto_auth_resp_no_r_proto_ def test_dpp_proto_auth_resp_invalid_r_proto_key(dev, apdev): """DPP protocol testing - invalid R-Proto Key in Auth Resp""" @@ -1003,7 +1003,7 @@ Signed-off-by: Glenn Strauss def test_dpp_proto_auth_resp_no_r_nonce(dev, apdev): """DPP protocol testing - no R-nonce in Auth Resp""" -@@ -4397,11 +4406,17 @@ def test_dpp_proto_pkex_exchange_resp_in +@@ -4425,11 +4434,17 @@ def test_dpp_proto_pkex_exchange_resp_in def test_dpp_proto_pkex_cr_req_invalid_bootstrap_key(dev, apdev): """DPP protocol testing - invalid Bootstrap Key in PKEX Commit-Reveal Request""" @@ -1088,7 +1088,7 @@ Signed-off-by: Glenn Strauss + raise HwsimSkip("Brainpool EC group 27 not supported by mbed TLS") + return if int(group) in [25]: - if not (tls.startswith("OpenSSL") and ("build=OpenSSL 1.0.2" in tls or "build=OpenSSL 1.1" in tls or "build=OpenSSL 3." in tls) and ("run=OpenSSL 1.0.2" in tls or "run=OpenSSL 1.1" in tls or "run=OpenSSL 3." in tls)): + if not (tls.startswith("OpenSSL") and ("build=OpenSSL" in tls) and ("run=OpenSSL" in tls)): raise HwsimSkip("EC group not supported") --- a/tests/hwsim/test_pmksa_cache.py +++ b/tests/hwsim/test_pmksa_cache.py @@ -1141,10 +1141,10 @@ Signed-off-by: Glenn Strauss return + if tls.startswith("mbed TLS"): + return - if not tls.startswith("OpenSSL"): - raise HwsimSkip("TLS library not supported for Suite B: " + tls) - supported = False -@@ -539,6 +541,7 @@ def test_suite_b_192_rsa_insufficient_dh + if tls.startswith("OpenSSL"): + return + raise HwsimSkip("TLS library not supported for Suite B: " + tls) +@@ -530,6 +532,7 @@ def test_suite_b_192_rsa_insufficient_dh dev[0].connect("test-suite-b", key_mgmt="WPA-EAP-SUITE-B-192", ieee80211w="2", @@ -1289,7 +1289,7 @@ Signed-off-by: Glenn Strauss if (need_more_data) { --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1229,6 +1229,7 @@ TLS_FUNCS=y +@@ -1234,6 +1234,7 @@ TLS_FUNCS=y endif ifeq ($(CONFIG_TLS), wolfssl) @@ -1297,7 +1297,7 @@ Signed-off-by: Glenn Strauss CFLAGS += -DCRYPTO_RSA_OAEP_SHA256 ifdef TLS_FUNCS CFLAGS += -DWOLFSSL_DER_LOAD -@@ -1245,6 +1246,7 @@ LIBS_p += -lwolfssl -lm +@@ -1250,6 +1251,7 @@ LIBS_p += -lwolfssl -lm endif ifeq ($(CONFIG_TLS), openssl) @@ -1305,7 +1305,7 @@ Signed-off-by: Glenn Strauss CFLAGS += -DCRYPTO_RSA_OAEP_SHA256 ifdef TLS_FUNCS CFLAGS += -DEAP_TLS_OPENSSL -@@ -1272,6 +1274,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF +@@ -1277,6 +1279,7 @@ CFLAGS += -DTLS_DEFAULT_CIPHERS=\"$(CONF endif ifeq ($(CONFIG_TLS), mbedtls) @@ -1313,7 +1313,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO CONFIG_CRYPTO=mbedtls endif -@@ -1291,6 +1294,7 @@ endif +@@ -1296,6 +1299,7 @@ endif endif ifeq ($(CONFIG_TLS), gnutls) @@ -1321,7 +1321,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO # default to libgcrypt CONFIG_CRYPTO=gnutls -@@ -1321,6 +1325,7 @@ endif +@@ -1326,6 +1330,7 @@ endif endif ifeq ($(CONFIG_TLS), internal) @@ -1329,7 +1329,7 @@ Signed-off-by: Glenn Strauss ifndef CONFIG_CRYPTO CONFIG_CRYPTO=internal endif -@@ -1401,6 +1406,7 @@ endif +@@ -1406,6 +1411,7 @@ endif endif ifeq ($(CONFIG_TLS), linux) diff --git a/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch b/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch index 45eaa0e59b0..ca8c3c1c709 100644 --- a/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch +++ b/package/network/services/hostapd/patches/161-wpa_supplicant-avoid-stopping-DPP-chirp-when-offchan.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau --- a/wpa_supplicant/dpp_supplicant.c +++ b/wpa_supplicant/dpp_supplicant.c -@@ -5132,7 +5132,10 @@ static void wpas_dpp_chirp_start(struct +@@ -5135,7 +5135,10 @@ static void wpas_dpp_chirp_start(struct wpa_s->own_addr, broadcast, wpabuf_head(msg), wpabuf_len(msg), 2000, wpas_dpp_chirp_tx_status, 0) < 0) diff --git a/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch b/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch index 81cf3d64f0f..59d747b7a8e 100644 --- a/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch +++ b/package/network/services/hostapd/patches/170-hostapd-update-cfs0-and-cfs1-for-160MHz.patch @@ -130,7 +130,7 @@ Signed-off-by: P Praneesh #undef VHT_CAP_CHECK_MAX --- a/src/common/ieee802_11_defs.h +++ b/src/common/ieee802_11_defs.h -@@ -1468,6 +1468,8 @@ struct ieee80211_ampe_ie { +@@ -1469,6 +1469,8 @@ struct ieee80211_ampe_ie { #define VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB ((u32) BIT(26) | BIT(27)) #define VHT_CAP_RX_ANTENNA_PATTERN ((u32) BIT(28)) #define VHT_CAP_TX_ANTENNA_PATTERN ((u32) BIT(29)) diff --git a/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch b/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch index eeb5c1e3f61..d43a2d02fca 100644 --- a/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch +++ b/package/network/services/hostapd/patches/191-hostapd-add-support-for-specifying-the-link-id-in-th.patch @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -4959,6 +4959,8 @@ static int hostapd_config_fill(struct ho +@@ -4974,6 +4974,8 @@ static int hostapd_config_fill(struct ho conf->punct_acs_threshold = val; } else if (os_strcmp(buf, "mld_ap") == 0) { bss->mld_ap = !!atoi(pos); @@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau wpa_printf(MSG_ERROR, "Line %d: Invalid mld_addr", --- a/src/ap/ap_config.c +++ b/src/ap/ap_config.c -@@ -179,6 +179,9 @@ void hostapd_config_defaults_bss(struct +@@ -180,6 +180,9 @@ void hostapd_config_defaults_bss(struct #endif /* CONFIG_PASN */ bss->urnm_mfpr_x20 = -1; bss->urnm_mfpr = -1; @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau bss->pmksa_caching_privacy = 0; --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -979,6 +979,8 @@ struct hostapd_bss_config { +@@ -991,6 +991,8 @@ struct hostapd_bss_config { /* The AP's MLD MAC address within the AP MLD */ u8 mld_addr[ETH_ALEN]; diff --git a/package/network/services/hostapd/patches/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch index 951d03b5a68..b1461a58997 100644 --- a/package/network/services/hostapd/patches/200-multicall.patch +++ b/package/network/services/hostapd/patches/200-multicall.patch @@ -56,7 +56,7 @@ This allows building both hostapd and wpa_supplicant as a single binary hostapd: $(OBJS) $(Q)$(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS) @$(E) " LD " $@ -@@ -1518,6 +1530,12 @@ include ../src/objs.mk +@@ -1530,6 +1542,12 @@ include ../src/objs.mk _OBJS_VAR := SOBJS include ../src/objs.mk @@ -71,7 +71,7 @@ This allows building both hostapd and wpa_supplicant as a single binary @$(E) " LD " $@ --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -744,6 +744,11 @@ fail: +@@ -749,6 +749,11 @@ fail: return -1; } @@ -83,7 +83,7 @@ This allows building both hostapd and wpa_supplicant as a single binary #ifdef CONFIG_WPS static int gen_uuid(const char *txt_addr) -@@ -868,6 +873,8 @@ int main(int argc, char *argv[]) +@@ -873,6 +878,8 @@ int main(int argc, char *argv[]) return -1; #endif /* CONFIG_DPP */ @@ -94,7 +94,7 @@ This allows building both hostapd and wpa_supplicant as a single binary if (c < 0) --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c -@@ -2596,8 +2596,8 @@ static void hostapd_mld_iface_disable(st +@@ -2599,8 +2599,8 @@ static void hostapd_mld_iface_disable(st #endif /* CONFIG_IEEE80211BE */ @@ -105,7 +105,7 @@ This allows building both hostapd and wpa_supplicant as a single binary { struct hostapd_data *hapd = ctx; struct sta_info *sta; -@@ -2967,7 +2967,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -2970,7 +2970,7 @@ void wpa_supplicant_event(void *ctx, enu } @@ -116,7 +116,7 @@ This allows building both hostapd and wpa_supplicant as a single binary struct hapd_interfaces *interfaces = ctx; --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -7313,8 +7313,8 @@ union wpa_event_data { +@@ -7804,8 +7804,8 @@ union wpa_event_data { * Driver wrapper code should call this function whenever an event is received * from the driver. */ @@ -127,7 +127,7 @@ This allows building both hostapd and wpa_supplicant as a single binary /** * wpa_supplicant_event_global - Report a driver event for wpa_supplicant -@@ -7326,7 +7326,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -7817,7 +7817,7 @@ void wpa_supplicant_event(void *ctx, enu * Same as wpa_supplicant_event(), but we search for the interface in * wpa_global. */ @@ -159,7 +159,7 @@ This allows building both hostapd and wpa_supplicant as a single binary include ../src/build.rules ifdef CONFIG_BUILD_PASN_SO -@@ -411,7 +412,9 @@ endif +@@ -415,7 +416,9 @@ endif ifdef CONFIG_IBSS_RSN NEED_RSN_AUTHENTICATOR=y CFLAGS += -DCONFIG_IBSS_RSN @@ -169,7 +169,7 @@ This allows building both hostapd and wpa_supplicant as a single binary OBJS += ibss_rsn.o endif -@@ -1020,6 +1023,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS +@@ -1025,6 +1028,10 @@ ifdef CONFIG_DYNAMIC_EAP_METHODS CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS LIBS += -ldl -rdynamic endif @@ -180,7 +180,7 @@ This allows building both hostapd and wpa_supplicant as a single binary endif ifdef CONFIG_AP -@@ -1027,9 +1034,11 @@ NEED_EAP_COMMON=y +@@ -1032,9 +1039,11 @@ NEED_EAP_COMMON=y NEED_RSN_AUTHENTICATOR=y CFLAGS += -DCONFIG_AP OBJS += ap.o @@ -192,7 +192,7 @@ This allows building both hostapd and wpa_supplicant as a single binary OBJS += ../src/ap/hostapd.o OBJS += ../src/ap/wpa_auth_glue.o OBJS += ../src/ap/utils.o -@@ -1121,6 +1130,12 @@ endif +@@ -1126,6 +1135,12 @@ endif ifdef CONFIG_HS20 OBJS += ../src/ap/hs20.o endif @@ -205,7 +205,7 @@ This allows building both hostapd and wpa_supplicant as a single binary endif ifdef CONFIG_MBO -@@ -1130,7 +1145,9 @@ NEED_GAS=y +@@ -1135,7 +1150,9 @@ NEED_GAS=y endif ifdef NEED_RSN_AUTHENTICATOR @@ -215,7 +215,7 @@ This allows building both hostapd and wpa_supplicant as a single binary NEED_AES_WRAP=y OBJS += ../src/ap/wpa_auth.o OBJS += ../src/ap/wpa_auth_ie.o -@@ -2130,6 +2147,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv) +@@ -2135,6 +2152,12 @@ wpa_priv: $(BCHECK) $(OBJS_priv) _OBJS_VAR := OBJS include ../src/objs.mk @@ -228,7 +228,7 @@ This allows building both hostapd and wpa_supplicant as a single binary wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs) $(Q)$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) @$(E) " LD " $@ -@@ -2262,6 +2285,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK) +@@ -2267,6 +2290,12 @@ eap_gpsk.so: $(SRC_EAP_GPSK) $(Q)sed -e 's|\@BINDIR\@|$(BINDIR)|g' $< >$@ @$(E) " sed" $< @@ -278,7 +278,7 @@ This allows building both hostapd and wpa_supplicant as a single binary os_memset(&eapol_test, 0, sizeof(eapol_test)); --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c -@@ -6643,8 +6643,8 @@ static int wpas_pasn_auth(struct wpa_sup +@@ -6703,8 +6703,8 @@ static int wpas_pasn_auth(struct wpa_sup #endif /* CONFIG_PASN */ @@ -289,7 +289,7 @@ This allows building both hostapd and wpa_supplicant as a single binary { struct wpa_supplicant *wpa_s = ctx; int resched; -@@ -7638,7 +7638,7 @@ void wpa_supplicant_event(void *ctx, enu +@@ -7742,7 +7742,7 @@ void wpa_supplicant_event(void *ctx, enu } @@ -331,7 +331,7 @@ This allows building both hostapd and wpa_supplicant as a single binary os_memset(&global, 0, sizeof(global)); --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -8259,7 +8259,6 @@ struct wpa_interface * wpa_supplicant_ma +@@ -8303,7 +8303,6 @@ struct wpa_interface * wpa_supplicant_ma return NULL; } @@ -339,7 +339,7 @@ This allows building both hostapd and wpa_supplicant as a single binary /** * wpa_supplicant_match_existing - Match existing interfaces * @global: Pointer to global data from wpa_supplicant_init() -@@ -8294,6 +8293,11 @@ static int wpa_supplicant_match_existing +@@ -8338,6 +8337,11 @@ static int wpa_supplicant_match_existing #endif /* CONFIG_MATCH_IFACE */ @@ -351,7 +351,7 @@ This allows building both hostapd and wpa_supplicant as a single binary /** * wpa_supplicant_add_iface - Add a new network interface -@@ -8550,6 +8554,8 @@ struct wpa_global * wpa_supplicant_init( +@@ -8594,6 +8598,8 @@ struct wpa_global * wpa_supplicant_init( #ifndef CONFIG_NO_WPA_MSG wpa_msg_register_ifname_cb(wpa_supplicant_msg_ifname_cb); #endif /* CONFIG_NO_WPA_MSG */ diff --git a/package/network/services/hostapd/patches/201-lto-jobserver-support.patch b/package/network/services/hostapd/patches/201-lto-jobserver-support.patch index 2211d0eedad..0e175c82ac8 100644 --- a/package/network/services/hostapd/patches/201-lto-jobserver-support.patch +++ b/package/network/services/hostapd/patches/201-lto-jobserver-support.patch @@ -25,7 +25,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS) --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -2154,31 +2154,31 @@ wpa_supplicant_multi.a: .config $(BCHECK +@@ -2159,31 +2159,31 @@ wpa_supplicant_multi.a: .config $(BCHECK @$(AR) cr $@ wpa_supplicant_multi.o $(OBJS) wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs) diff --git a/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch b/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch index b3718adf053..0901f639b0f 100644 --- a/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch +++ b/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch @@ -13,7 +13,7 @@ Signed-off-by: David Bauer --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c -@@ -14007,7 +14007,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -14234,7 +14234,7 @@ char * wpa_supplicant_ctrl_iface_process if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18)) reply_len = -1; #endif /* CONFIG_WNM */ @@ -22,7 +22,7 @@ Signed-off-by: David Bauer } else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) { if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18)) reply_len = -1; -@@ -14017,7 +14017,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -14244,7 +14244,7 @@ char * wpa_supplicant_ctrl_iface_process } else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) { if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11)) reply_len = -1; diff --git a/package/network/services/hostapd/patches/220-indicate-features.patch b/package/network/services/hostapd/patches/220-indicate-features.patch index a3a1786402a..95a2e7146e4 100644 --- a/package/network/services/hostapd/patches/220-indicate-features.patch +++ b/package/network/services/hostapd/patches/220-indicate-features.patch @@ -15,7 +15,7 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of struct hapd_global { void **drv_priv; -@@ -876,7 +876,7 @@ int main(int argc, char *argv[]) +@@ -881,7 +881,7 @@ int main(int argc, char *argv[]) wpa_supplicant_event = hostapd_wpa_event; wpa_supplicant_event_global = hostapd_wpa_event_global; for (;;) { @@ -24,7 +24,7 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of if (c < 0) break; switch (c) { -@@ -913,6 +913,8 @@ int main(int argc, char *argv[]) +@@ -918,6 +918,8 @@ int main(int argc, char *argv[]) break; #endif /* CONFIG_DEBUG_LINUX_TRACING */ case 'v': @@ -52,7 +52,7 @@ Subject: [PATCH] hostapd: support optional argument for the -v switch of if (c < 0) break; switch (c) { -@@ -313,8 +314,12 @@ int main(int argc, char *argv[]) +@@ -314,8 +315,12 @@ int main(int argc, char *argv[]) break; #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ case 'v': diff --git a/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch b/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch index 8cb7ef601b8..373df0da738 100644 --- a/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch +++ b/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch @@ -5,7 +5,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the --- a/hostapd/hostapd_cli.c +++ b/hostapd/hostapd_cli.c -@@ -409,7 +409,6 @@ static int hostapd_cli_cmd_disassociate( +@@ -411,7 +411,6 @@ static int hostapd_cli_cmd_disassociate( } @@ -13,7 +13,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the static int hostapd_cli_cmd_signature(struct wpa_ctrl *ctrl, int argc, char *argv[]) { -@@ -422,7 +421,6 @@ static int hostapd_cli_cmd_signature(str +@@ -424,7 +423,6 @@ static int hostapd_cli_cmd_signature(str os_snprintf(buf, sizeof(buf), "SIGNATURE %s", argv[0]); return wpa_ctrl_command(ctrl, buf); } @@ -21,7 +21,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the static int hostapd_cli_cmd_sa_query(struct wpa_ctrl *ctrl, int argc, -@@ -439,7 +437,6 @@ static int hostapd_cli_cmd_sa_query(stru +@@ -441,7 +439,6 @@ static int hostapd_cli_cmd_sa_query(stru } @@ -29,7 +29,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the static int hostapd_cli_cmd_wps_pin(struct wpa_ctrl *ctrl, int argc, char *argv[]) { -@@ -665,7 +662,6 @@ static int hostapd_cli_cmd_wps_config(st +@@ -667,7 +664,6 @@ static int hostapd_cli_cmd_wps_config(st ssid_hex, argv[1]); return wpa_ctrl_command(ctrl, buf); } @@ -37,7 +37,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc, -@@ -1715,13 +1711,10 @@ static const struct hostapd_cli_cmd host +@@ -1717,13 +1713,10 @@ static const struct hostapd_cli_cmd host { "disassociate", hostapd_cli_cmd_disassociate, hostapd_complete_stations, " = disassociate a station" }, @@ -51,7 +51,7 @@ Subject: [PATCH] hostapd: support wps in hostapd_cli even when built from the { "wps_pin", hostapd_cli_cmd_wps_pin, NULL, " [timeout] [addr] = add WPS Enrollee PIN" }, { "wps_check_pin", hostapd_cli_cmd_wps_check_pin, NULL, -@@ -1746,7 +1739,6 @@ static const struct hostapd_cli_cmd host +@@ -1748,7 +1741,6 @@ static const struct hostapd_cli_cmd host " = configure AP" }, { "wps_get_status", hostapd_cli_cmd_wps_get_status, NULL, "= show current WPS status" }, diff --git a/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch b/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch index ff5f1c86d44..5cd89e73d34 100644 --- a/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch +++ b/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch @@ -16,7 +16,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality else --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c -@@ -3978,6 +3978,7 @@ static int hostapd_ctrl_iface_receive_pr +@@ -3987,6 +3987,7 @@ static int hostapd_ctrl_iface_receive_pr reply_size); } else if (os_strcmp(buf, "STATUS-DRIVER") == 0) { reply_len = hostapd_drv_status(hapd, reply, reply_size); @@ -24,7 +24,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality } else if (os_strcmp(buf, "MIB") == 0) { reply_len = ieee802_11_get_mib(hapd, reply, reply_size); if (reply_len >= 0) { -@@ -4019,6 +4020,7 @@ static int hostapd_ctrl_iface_receive_pr +@@ -4028,6 +4029,7 @@ static int hostapd_ctrl_iface_receive_pr } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { reply_len = hostapd_ctrl_iface_sta_next(hapd, buf + 9, reply, reply_size); @@ -131,7 +131,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality static void ieee802_1x_wnm_notif_send(void *eloop_ctx, void *timeout_ctx) --- a/src/ap/wpa_auth.c +++ b/src/ap/wpa_auth.c -@@ -6544,6 +6544,7 @@ static const char * wpa_bool_txt(int val +@@ -6548,6 +6548,7 @@ static const char * wpa_bool_txt(int val return val ? "TRUE" : "FALSE"; } @@ -139,7 +139,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality #define RSN_SUITE "%02x-%02x-%02x-%d" #define RSN_SUITE_ARG(s) \ -@@ -6696,7 +6697,7 @@ int wpa_get_mib_sta(struct wpa_state_mac +@@ -6700,7 +6701,7 @@ int wpa_get_mib_sta(struct wpa_state_mac return len; } @@ -150,7 +150,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality { --- a/src/rsn_supp/wpa.c +++ b/src/rsn_supp/wpa.c -@@ -4272,6 +4272,8 @@ static u32 wpa_key_mgmt_suite(struct wpa +@@ -4301,6 +4301,8 @@ static u32 wpa_key_mgmt_suite(struct wpa } @@ -159,7 +159,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality #define RSN_SUITE "%02x-%02x-%02x-%d" #define RSN_SUITE_ARG(s) \ ((s) >> 24) & 0xff, ((s) >> 16) & 0xff, ((s) >> 8) & 0xff, (s) & 0xff -@@ -4353,6 +4355,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch +@@ -4382,6 +4384,7 @@ int wpa_sm_get_mib(struct wpa_sm *sm, ch return (int) len; } @@ -169,7 +169,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile -@@ -1078,6 +1078,9 @@ ifdef CONFIG_FILS +@@ -1083,6 +1083,9 @@ ifdef CONFIG_FILS OBJS += ../src/ap/fils_hlp.o endif ifdef CONFIG_CTRL_IFACE @@ -181,7 +181,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c -@@ -1535,7 +1535,7 @@ int wpas_ap_wps_nfc_report_handover(stru +@@ -1538,7 +1538,7 @@ int wpas_ap_wps_nfc_report_handover(stru #endif /* CONFIG_WPS */ @@ -201,7 +201,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality if (wpa_s->ap_iface) { pos += ap_ctrl_iface_wpa_get_status(wpa_s, pos, end - pos, -@@ -13336,6 +13336,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -13563,6 +13563,7 @@ char * wpa_supplicant_ctrl_iface_process } else if (os_strncmp(buf, "NOTE ", 5) == 0) { wpa_printf(MSG_INFO, "NOTE: %s", buf + 5); wpa_trace_set_context(buf + 5); @@ -209,7 +209,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality } else if (os_strcmp(buf, "MIB") == 0) { reply_len = wpa_sm_get_mib(wpa_s->wpa, reply, reply_size); if (reply_len >= 0) { -@@ -13348,6 +13349,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -13575,6 +13576,7 @@ char * wpa_supplicant_ctrl_iface_process reply_size - reply_len); #endif /* CONFIG_MACSEC */ } @@ -217,7 +217,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality } else if (os_strncmp(buf, "STATUS", 6) == 0) { reply_len = wpa_supplicant_ctrl_iface_status( wpa_s, buf + 6, reply, reply_size); -@@ -13835,6 +13837,7 @@ char * wpa_supplicant_ctrl_iface_process +@@ -14062,6 +14064,7 @@ char * wpa_supplicant_ctrl_iface_process reply_len = wpa_supplicant_ctrl_iface_bss( wpa_s, buf + 4, reply, reply_size); #ifdef CONFIG_AP @@ -225,7 +225,7 @@ Subject: [PATCH] Remove some unnecessary control interface functionality } else if (os_strcmp(buf, "STA-FIRST") == 0) { reply_len = ap_ctrl_iface_sta_first(wpa_s, reply, reply_size); } else if (os_strncmp(buf, "STA ", 4) == 0) { -@@ -13843,12 +13846,15 @@ char * wpa_supplicant_ctrl_iface_process +@@ -14070,12 +14073,15 @@ char * wpa_supplicant_ctrl_iface_process } else if (os_strncmp(buf, "STA-NEXT ", 9) == 0) { reply_len = ap_ctrl_iface_sta_next(wpa_s, buf + 9, reply, reply_size); diff --git a/package/network/services/hostapd/patches/300-noscan.patch b/package/network/services/hostapd/patches/300-noscan.patch index ab3df7c1b44..ea71a12c1b8 100644 --- a/package/network/services/hostapd/patches/300-noscan.patch +++ b/package/network/services/hostapd/patches/300-noscan.patch @@ -18,7 +18,7 @@ Subject: [PATCH] Add noscan, no_ht_coex config options } else if (os_strcmp(buf, "ht_capab") == 0) { --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -1119,6 +1119,8 @@ struct hostapd_config { +@@ -1131,6 +1131,8 @@ struct hostapd_config { int ht_op_mode_fixed; u16 ht_capab; diff --git a/package/network/services/hostapd/patches/301-mesh-noscan.patch b/package/network/services/hostapd/patches/301-mesh-noscan.patch index cb737826456..500a8ca6afd 100644 --- a/package/network/services/hostapd/patches/301-mesh-noscan.patch +++ b/package/network/services/hostapd/patches/301-mesh-noscan.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c -@@ -2795,6 +2795,7 @@ static const struct parse_data ssid_fiel +@@ -2827,6 +2827,7 @@ static const struct parse_data ssid_fiel #else /* CONFIG_MESH */ { INT_RANGE(mode, 0, 4) }, #endif /* CONFIG_MESH */ @@ -47,7 +47,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also /* --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -3120,7 +3120,7 @@ static bool ibss_mesh_can_use_vht(struct +@@ -3134,7 +3134,7 @@ static bool ibss_mesh_can_use_vht(struct const struct wpa_ssid *ssid, struct hostapd_hw_modes *mode) { @@ -56,7 +56,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also return false; if (!drv_supports_vht(wpa_s, ssid)) -@@ -3194,7 +3194,7 @@ static void ibss_mesh_select_40mhz(struc +@@ -3208,7 +3208,7 @@ static void ibss_mesh_select_40mhz(struc int i, res; unsigned int j; static const int ht40plus_5ghz[] = { @@ -65,7 +65,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also 149, 157, 165, 173, 184, 192 }; static const int ht40plus_6ghz[] = { -@@ -3547,7 +3547,7 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3561,7 +3561,7 @@ void ibss_mesh_setup_freq(struct wpa_sup int ieee80211_mode = wpas_mode_to_ieee80211_mode(ssid->mode); enum hostapd_hw_mode hw_mode; struct hostapd_hw_modes *mode = NULL; @@ -74,7 +74,7 @@ Subject: [PATCH] Allow HT40 also on 2.4GHz if noscan option is set, which also u8 channel; bool is_6ghz, is_24ghz; bool dfs_enabled = wpa_s->conf->country[0] && (wpa_s->drv_flags & WPA_DRIVER_FLAGS_RADAR); -@@ -3591,6 +3591,8 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3605,6 +3605,8 @@ void ibss_mesh_setup_freq(struct wpa_sup freq->he_enabled = ibss_mesh_can_use_he(wpa_s, ssid, mode, ieee80211_mode); freq->channel = channel; diff --git a/package/network/services/hostapd/patches/310-rescan_immediately.patch b/package/network/services/hostapd/patches/310-rescan_immediately.patch index 14bf064defc..7a32e1d2fde 100644 --- a/package/network/services/hostapd/patches/310-rescan_immediately.patch +++ b/package/network/services/hostapd/patches/310-rescan_immediately.patch @@ -5,7 +5,7 @@ Subject: [PATCH] rescan_immediately.patch --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -6481,7 +6481,7 @@ wpa_supplicant_alloc(struct wpa_supplica +@@ -6519,7 +6519,7 @@ wpa_supplicant_alloc(struct wpa_supplica if (wpa_s == NULL) return NULL; wpa_s->scan_req = INITIAL_SCAN_REQ; diff --git a/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch b/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch index 8a9d0ad8890..bd79546592a 100644 --- a/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch +++ b/package/network/services/hostapd/patches/341-mesh-ctrl-iface-channel-switch.patch @@ -5,7 +5,7 @@ Subject: [PATCH] wpa_supplicant: fix calling channel switch via wpa_cli on --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c -@@ -1863,6 +1863,21 @@ int ap_switch_channel(struct wpa_supplic +@@ -1866,6 +1866,21 @@ int ap_switch_channel(struct wpa_supplic #ifdef CONFIG_CTRL_IFACE @@ -27,7 +27,7 @@ Subject: [PATCH] wpa_supplicant: fix calling channel switch via wpa_cli on int ap_ctrl_iface_chanswitch(struct wpa_supplicant *wpa_s, const char *pos) { struct csa_settings settings; -@@ -1882,12 +1897,18 @@ int ap_ctrl_iface_chanswitch(struct wpa_ +@@ -1885,12 +1900,18 @@ int ap_ctrl_iface_chanswitch(struct wpa_ return -1; ret = hostapd_parse_csa_settings(iface, pos, &settings); diff --git a/package/network/services/hostapd/patches/370-preserve_radio_mask.patch b/package/network/services/hostapd/patches/370-preserve_radio_mask.patch index c933208ba20..81725f8e66b 100644 --- a/package/network/services/hostapd/patches/370-preserve_radio_mask.patch +++ b/package/network/services/hostapd/patches/370-preserve_radio_mask.patch @@ -1,6 +1,6 @@ --- a/src/drivers/driver_nl80211.h +++ b/src/drivers/driver_nl80211.h -@@ -95,6 +95,7 @@ struct i802_bss { +@@ -99,6 +99,7 @@ struct i802_bss { u64 wdev_id; char ifname[IFNAMSIZ + 1]; char brname[IFNAMSIZ]; @@ -8,7 +8,7 @@ unsigned int added_if_into_bridge:1; unsigned int already_in_bridge:1; unsigned int added_bridge:1; -@@ -346,7 +347,7 @@ send_and_recv_resp(struct wpa_driver_nl8 +@@ -354,7 +355,7 @@ send_and_recv_resp(struct wpa_driver_nl8 int nl80211_create_iface(struct wpa_driver_nl80211_data *drv, const char *ifname, enum nl80211_iftype iftype, @@ -19,17 +19,17 @@ void nl80211_remove_iface(struct wpa_driver_nl80211_data *drv, int ifidx); --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -887,6 +887,7 @@ struct wiphy_idx_data { - enum nl80211_iftype nlmode; - u8 *macaddr; +@@ -894,6 +894,7 @@ struct wiphy_idx_data { u8 use_4addr; + u64 wdev_id; + bool wdev_id_set; + u32 radio_mask; }; -@@ -912,6 +913,9 @@ static int netdev_info_handler(struct nl - if (tb[NL80211_ATTR_4ADDR]) - info->use_4addr = nla_get_u8(tb[NL80211_ATTR_4ADDR]); +@@ -924,6 +925,9 @@ static int netdev_info_handler(struct nl + info->wdev_id_set = true; + } + if (tb[NL80211_ATTR_VIF_RADIO_MASK]) + info->radio_mask = nla_get_u32(tb[NL80211_ATTR_VIF_RADIO_MASK]); @@ -37,7 +37,7 @@ return NL_SKIP; } -@@ -978,6 +982,20 @@ static int nl80211_get_4addr(struct i802 +@@ -990,6 +994,20 @@ static int nl80211_get_4addr(struct i802 } @@ -58,7 +58,7 @@ static int nl80211_register_beacons(struct wpa_driver_nl80211_data *drv, struct nl80211_wiphy_data *w) { -@@ -2584,6 +2602,8 @@ static void * wpa_driver_nl80211_drv_ini +@@ -2608,6 +2626,8 @@ static void * wpa_driver_nl80211_drv_ini p2p_mode)) goto failed; @@ -67,7 +67,7 @@ if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_TX_STATUS) { drv->control_port_ap = 1; goto skip_wifi_status; -@@ -6531,7 +6551,7 @@ const char * nl80211_iftype_str(enum nl8 +@@ -6797,7 +6817,7 @@ const char * nl80211_iftype_str(enum nl8 static int nl80211_create_iface_once(struct wpa_driver_nl80211_data *drv, const char *ifname, enum nl80211_iftype iftype, @@ -76,7 +76,7 @@ int (*handler)(struct nl_msg *, void *), void *arg) { -@@ -6551,6 +6571,10 @@ static int nl80211_create_iface_once(str +@@ -6817,6 +6837,10 @@ static int nl80211_create_iface_once(str if (wds && nla_put_u8(msg, NL80211_ATTR_4ADDR, wds)) goto fail; @@ -87,7 +87,7 @@ /* * Tell cfg80211 that the interface belongs to the socket that created * it, and the interface should be deleted when the socket is closed. -@@ -6643,14 +6667,14 @@ static int nl80211_create_iface_once(str +@@ -6910,14 +6934,14 @@ static int nl80211_create_iface_once(str int nl80211_create_iface(struct wpa_driver_nl80211_data *drv, const char *ifname, enum nl80211_iftype iftype, @@ -105,7 +105,7 @@ /* if error occurred and interface exists already */ if (ret < 0 && if_nametoindex(ifname)) { -@@ -6676,7 +6700,7 @@ int nl80211_create_iface(struct wpa_driv +@@ -6943,7 +6967,7 @@ int nl80211_create_iface(struct wpa_driv /* Try to create the interface again */ ret = nl80211_create_iface_once(drv, ifname, iftype, addr, @@ -114,7 +114,7 @@ } if (ret >= 0 && is_p2p_net_interface(iftype)) { -@@ -9012,8 +9036,8 @@ static int i802_set_wds_sta(void *priv, +@@ -9308,8 +9332,8 @@ static int i802_set_wds_sta(void *priv, if (!if_nametoindex(name)) { if (nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN, @@ -125,7 +125,7 @@ return -1; if (bridge_ifname) -@@ -9386,7 +9410,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9686,7 +9710,8 @@ static int wpa_driver_nl80211_if_add(voi os_memset(&nonnetdev_info, 0, sizeof(nonnetdev_info)); ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, @@ -135,7 +135,7 @@ &nonnetdev_info, use_existing); if (!nonnetdev_info.wdev_id_set || ifidx != 0) { wpa_printf(MSG_ERROR, -@@ -9405,7 +9430,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9705,7 +9730,8 @@ static int wpa_driver_nl80211_if_add(voi (long long unsigned int) nonnetdev_info.wdev_id); } else { ifidx = nl80211_create_iface(drv, ifname, nlmode, addr, @@ -145,7 +145,7 @@ if (use_existing && ifidx == -ENFILE) { added = 0; ifidx = if_nametoindex(ifname); -@@ -9475,6 +9501,8 @@ static int wpa_driver_nl80211_if_add(voi +@@ -9775,6 +9801,8 @@ static int wpa_driver_nl80211_if_add(voi new_bss->ctx = bss_ctx; new_bss->added_if = added; diff --git a/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch b/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch index 29026ac9d1c..dcbdd230bcb 100644 --- a/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch +++ b/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch @@ -11,7 +11,7 @@ if CONFIG_CTRL_IFACE_MIB is not defined. --- a/hostapd/hostapd_cli.c +++ b/hostapd/hostapd_cli.c -@@ -761,7 +761,7 @@ static int wpa_ctrl_command_sta(struct w +@@ -763,7 +763,7 @@ static int wpa_ctrl_command_sta(struct w } buf[len] = '\0'; diff --git a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch index 949b0ef4b56..144fd54ccdb 100644 --- a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch +++ b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch @@ -14,7 +14,7 @@ Signed-hostap: Antonio Quartulli --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -1023,6 +1023,9 @@ struct wpa_driver_associate_params { +@@ -1024,6 +1024,9 @@ struct wpa_driver_associate_params { * responsible for selecting with which BSS to associate. */ const u8 *bssid; @@ -34,8 +34,8 @@ Signed-hostap: Antonio Quartulli #include "config.h" -@@ -2561,6 +2562,97 @@ static char * wpa_config_write_mac_value - #endif /* NO_CONFIG_WRITE */ +@@ -2593,6 +2594,97 @@ static char * wpa_config_write_pasn_grou + #endif /* CONFIG_PASN */ +static int wpa_config_parse_mcast_rate(const struct parse_data *data, @@ -132,7 +132,7 @@ Signed-hostap: Antonio Quartulli /* Helper macros for network block parser */ #ifdef OFFSET -@@ -2871,6 +2963,8 @@ static const struct parse_data ssid_fiel +@@ -2903,6 +2995,8 @@ static const struct parse_data ssid_fiel { INT(ap_max_inactivity) }, { INT(dtim_period) }, { INT(beacon_int) }, @@ -155,7 +155,7 @@ Signed-hostap: Antonio Quartulli * macsec_policy - Determines the policy for MACsec secure session --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -4759,6 +4759,12 @@ static void wpas_start_assoc_cb(struct w +@@ -4784,6 +4784,12 @@ static void wpas_start_assoc_cb(struct w params.beacon_int = ssid->beacon_int; else params.beacon_int = wpa_s->conf->beacon_int; diff --git a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch index 69ceec1c0da..ea506f509af 100644 --- a/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch +++ b/package/network/services/hostapd/patches/463-add-mcast_rate-to-11s.patch @@ -19,7 +19,7 @@ Tested-by: Simon Wunderlich --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -1969,6 +1969,7 @@ struct wpa_driver_mesh_join_params { +@@ -1975,6 +1975,7 @@ struct wpa_driver_mesh_join_params { #define WPA_DRIVER_MESH_FLAG_AMPE 0x00000008 unsigned int flags; bool handle_dfs; @@ -29,7 +29,7 @@ Tested-by: Simon Wunderlich struct wpa_driver_set_key_params { --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -12718,6 +12718,18 @@ static int nl80211_put_mesh_id(struct nl +@@ -13055,6 +13055,18 @@ static int nl80211_put_mesh_id(struct nl } @@ -48,7 +48,7 @@ Tested-by: Simon Wunderlich static int nl80211_put_mesh_config(struct nl_msg *msg, struct wpa_driver_mesh_bss_params *params) { -@@ -12779,6 +12791,7 @@ static int nl80211_join_mesh(struct i802 +@@ -13116,6 +13128,7 @@ static int nl80211_join_mesh(struct i802 nl80211_put_basic_rates(msg, params->basic_rates) || nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) || nl80211_put_beacon_int(msg, params->beacon_int) || diff --git a/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch b/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch index 7f9c6fdeb8a..bb75ca2ea13 100644 --- a/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch +++ b/package/network/services/hostapd/patches/464-fix-mesh-obss-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix issues with disabling obss scan when using fixed_freq on --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -3554,6 +3554,10 @@ void ibss_mesh_setup_freq(struct wpa_sup +@@ -3568,6 +3568,10 @@ void ibss_mesh_setup_freq(struct wpa_sup freq->freq = ssid->frequency; diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch index 7dfdc5b8f15..38151ea422f 100644 --- a/package/network/services/hostapd/patches/600-ubus_support.patch +++ b/package/network/services/hostapd/patches/600-ubus_support.patch @@ -39,7 +39,7 @@ probe/assoc/auth requests via object subscribe. } -@@ -244,7 +250,10 @@ int airtime_policy_new_sta(struct hostap +@@ -249,7 +255,10 @@ int airtime_policy_new_sta(struct hostap unsigned int weight; if (hapd->iconf->airtime_mode == AIRTIME_MODE_STATIC) { @@ -53,7 +53,7 @@ probe/assoc/auth requests via object subscribe. } --- a/src/ap/beacon.c +++ b/src/ap/beacon.c -@@ -1467,6 +1467,12 @@ void handle_probe_req(struct hostapd_dat +@@ -1471,6 +1471,12 @@ void handle_probe_req(struct hostapd_dat int mld_id; u16 links; #endif /* CONFIG_IEEE80211BE */ @@ -66,7 +66,7 @@ probe/assoc/auth requests via object subscribe. if (hapd->iconf->rssi_ignore_probe_request && ssi_signal && ssi_signal < hapd->iconf->rssi_ignore_probe_request) -@@ -1674,6 +1680,12 @@ void handle_probe_req(struct hostapd_dat +@@ -1678,6 +1684,12 @@ void handle_probe_req(struct hostapd_dat } #endif /* CONFIG_P2P */ @@ -92,7 +92,7 @@ probe/assoc/auth requests via object subscribe. /* Proceed only if DFS is not offloaded to the driver */ --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c -@@ -333,6 +333,10 @@ int hostapd_notif_assoc(struct hostapd_d +@@ -335,6 +335,10 @@ int hostapd_notif_assoc(struct hostapd_d #endif /* CONFIG_OWE */ bool updated = false; bool driver_acl; @@ -103,7 +103,7 @@ probe/assoc/auth requests via object subscribe. #ifdef CONFIG_P2P if (hapd->p2p_group && (!hapd->started || hapd->disabled)) { -@@ -528,6 +532,12 @@ int hostapd_notif_assoc(struct hostapd_d +@@ -530,6 +534,12 @@ int hostapd_notif_assoc(struct hostapd_d } #endif /* CONFIG_IEEE80211BE */ @@ -116,7 +116,7 @@ probe/assoc/auth requests via object subscribe. #ifdef CONFIG_P2P if (elems.p2p) { wpabuf_free(sta->p2p_ie); -@@ -1425,6 +1435,7 @@ void hostapd_event_ch_switch(struct host +@@ -1428,6 +1438,7 @@ void hostapd_event_ch_switch(struct host wpa_msg(hapd->msg_ctx, MSG_INFO, AP_CSA_FINISHED "freq=%d dfs=%d", freq, is_dfs); @@ -203,7 +203,7 @@ probe/assoc/auth requests via object subscribe. if (sae_password_track_fail(hapd, sta)) { wpa_printf(MSG_DEBUG, "SAE: Reject mismatching Confirm so that another password can be attempted by " -@@ -4077,7 +4078,7 @@ static void handle_auth(struct hostapd_d +@@ -4218,7 +4219,7 @@ static void handle_auth(struct hostapd_d u16 auth_alg, auth_transaction, status_code; u16 resp = WLAN_STATUS_SUCCESS; struct sta_info *sta = NULL; @@ -212,7 +212,7 @@ probe/assoc/auth requests via object subscribe. u16 fc; const u8 *challenge = NULL; u8 resp_ies[2 + WLAN_AUTH_CHALLENGE_LEN]; -@@ -4116,6 +4117,11 @@ static void handle_auth(struct hostapd_d +@@ -4257,6 +4258,11 @@ static void handle_auth(struct hostapd_d else sa = mgmt->sa; #endif /* CONFIG_IEEE80211BE */ @@ -224,7 +224,7 @@ probe/assoc/auth requests via object subscribe. auth_alg = le_to_host16(mgmt->u.auth.auth_alg); auth_transaction = le_to_host16(mgmt->u.auth.auth_transaction); -@@ -4306,6 +4312,13 @@ static void handle_auth(struct hostapd_d +@@ -4447,6 +4453,13 @@ static void handle_auth(struct hostapd_d resp = WLAN_STATUS_UNSPECIFIED_FAILURE; goto fail; } @@ -238,7 +238,7 @@ probe/assoc/auth requests via object subscribe. if (res == HOSTAPD_ACL_PENDING) return; -@@ -6999,7 +7012,7 @@ static void handle_assoc(struct hostapd_ +@@ -7190,7 +7203,7 @@ static void handle_assoc(struct hostapd_ int resp = WLAN_STATUS_SUCCESS; u16 reply_res = WLAN_STATUS_UNSPECIFIED_FAILURE; const u8 *pos; @@ -247,7 +247,7 @@ probe/assoc/auth requests via object subscribe. struct sta_info *sta; u8 *tmp = NULL; #ifdef CONFIG_FILS -@@ -7255,6 +7268,11 @@ static void handle_assoc(struct hostapd_ +@@ -7446,6 +7459,11 @@ static void handle_assoc(struct hostapd_ left = res; } #endif /* CONFIG_FILS */ @@ -259,7 +259,7 @@ probe/assoc/auth requests via object subscribe. /* followed by SSID and Supported rates; and HT capabilities if 802.11n * is used */ -@@ -7347,6 +7365,7 @@ static void handle_assoc(struct hostapd_ +@@ -7538,6 +7556,7 @@ static void handle_assoc(struct hostapd_ #ifdef CONFIG_TAXONOMY taxonomy_sta_info_assoc_req(hapd, sta, pos, left); @@ -267,7 +267,7 @@ probe/assoc/auth requests via object subscribe. #endif /* CONFIG_TAXONOMY */ sta->pending_wds_enable = 0; -@@ -7360,6 +7379,13 @@ static void handle_assoc(struct hostapd_ +@@ -7551,6 +7570,13 @@ static void handle_assoc(struct hostapd_ } #endif /* CONFIG_FILS */ @@ -281,7 +281,7 @@ probe/assoc/auth requests via object subscribe. fail: /* -@@ -7598,6 +7624,7 @@ static void handle_disassoc(struct hosta +@@ -7798,6 +7824,7 @@ static void handle_disassoc(struct hosta (unsigned long) len); return; } @@ -289,7 +289,7 @@ probe/assoc/auth requests via object subscribe. sta = ap_get_sta(hapd, mgmt->sa); if (!sta) { -@@ -7629,6 +7656,8 @@ static void handle_deauth(struct hostapd +@@ -7829,6 +7856,8 @@ static void handle_deauth(struct hostapd /* Clear the PTKSA cache entries for PASN */ ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE); @@ -504,7 +504,7 @@ probe/assoc/auth requests via object subscribe. } --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c -@@ -412,6 +412,7 @@ static void hostapd_wpa_auth_psk_failure +@@ -415,6 +415,7 @@ static void hostapd_wpa_auth_psk_failure struct hostapd_data *hapd = ctx; wpa_msg(hapd->msg_ctx, MSG_INFO, AP_STA_POSSIBLE_PSK_MISMATCH MACSTR, MAC2STR(addr)); @@ -671,8 +671,8 @@ probe/assoc/auth requests via object subscribe. if (c < 0) break; switch (c) { -@@ -279,6 +279,9 @@ int main(int argc, char *argv[]) - params.conf_p2p_dev = optarg; +@@ -280,6 +280,9 @@ int main(int argc, char *argv[]) + params.conf_p2p_dev = os_rel2abs_path(optarg); break; #endif /* CONFIG_P2P */ + case 'n': diff --git a/package/network/services/hostapd/patches/601-ucode_support.patch b/package/network/services/hostapd/patches/601-ucode_support.patch index 948481cc1c9..0d40eda49de 100644 --- a/package/network/services/hostapd/patches/601-ucode_support.patch +++ b/package/network/services/hostapd/patches/601-ucode_support.patch @@ -8,7 +8,7 @@ as adding/removing interfaces. --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -1267,6 +1267,7 @@ void wpa_supplicant_set_state(struct wpa +@@ -1276,6 +1276,7 @@ void wpa_supplicant_set_state(struct wpa sme_sched_obss_scan(wpa_s, 0); } wpa_s->wpa_state = state; @@ -16,7 +16,7 @@ as adding/removing interfaces. #ifndef CONFIG_NO_ROBUST_AV if (state == WPA_COMPLETED && dl_list_len(&wpa_s->active_scs_ids) && -@@ -8392,6 +8393,8 @@ struct wpa_supplicant * wpa_supplicant_a +@@ -8436,6 +8437,8 @@ struct wpa_supplicant * wpa_supplicant_a } #endif /* CONFIG_P2P */ @@ -25,7 +25,7 @@ as adding/removing interfaces. return wpa_s; } -@@ -8418,6 +8421,8 @@ int wpa_supplicant_remove_iface(struct w +@@ -8462,6 +8465,8 @@ int wpa_supplicant_remove_iface(struct w struct wpa_supplicant *parent = wpa_s->parent; #endif /* CONFIG_MESH */ @@ -34,7 +34,7 @@ as adding/removing interfaces. /* Remove interface from the global list of interfaces */ prev = global->ifaces; if (prev == wpa_s) { -@@ -8737,6 +8742,7 @@ struct wpa_global * wpa_supplicant_init( +@@ -8781,6 +8786,7 @@ struct wpa_global * wpa_supplicant_init( eloop_register_timeout(WPA_SUPPLICANT_CLEANUP_INTERVAL, 0, wpas_periodic, global, NULL); @@ -42,7 +42,7 @@ as adding/removing interfaces. return global; } -@@ -8809,6 +8815,8 @@ void wpa_supplicant_deinit(struct wpa_gl +@@ -8853,6 +8859,8 @@ void wpa_supplicant_deinit(struct wpa_gl wpas_notify_supplicant_deinitialized(global); @@ -53,7 +53,7 @@ as adding/removing interfaces. eap_server_unregister_methods(); --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h -@@ -15,12 +15,14 @@ +@@ -15,6 +15,7 @@ #include "common/sae.h" #include "common/wpa_ctrl.h" #include "common/dpp.h" @@ -61,14 +61,15 @@ as adding/removing interfaces. #include "crypto/sha384.h" #include "eapol_supp/eapol_supp_sm.h" #include "wps/wps_defs.h" - #include "config_ssid.h" +@@ -22,6 +23,7 @@ #include "wmm_ac.h" #include "pasn/pasn_common.h" + #include "nan/nan.h" +#include "ucode.h" extern const char *const wpa_supplicant_version; extern const char *const wpa_supplicant_license; -@@ -756,6 +758,7 @@ struct wpa_supplicant { +@@ -762,6 +764,7 @@ struct wpa_supplicant { unsigned char own_addr[ETH_ALEN]; unsigned char perm_addr[ETH_ALEN]; char ifname[100]; @@ -76,7 +77,7 @@ as adding/removing interfaces. u8 hw_dfs_domain; #ifdef CONFIG_MATCH_IFACE int matched; -@@ -1633,6 +1636,8 @@ struct wpa_supplicant { +@@ -1647,6 +1650,8 @@ struct wpa_supplicant { unsigned int enabled_4addr_mode:1; unsigned int multi_bss_support:1; unsigned int drv_authorized_port:1; @@ -164,7 +165,7 @@ as adding/removing interfaces. ifdef CONFIG_CODE_COVERAGE --- a/hostapd/ctrl_iface.c +++ b/hostapd/ctrl_iface.c -@@ -5951,6 +5951,7 @@ try_again: +@@ -5960,6 +5960,7 @@ try_again: return -1; } @@ -172,7 +173,7 @@ as adding/removing interfaces. wpa_msg_register_cb(hostapd_ctrl_iface_msg_cb); return 0; -@@ -6052,6 +6053,7 @@ fail: +@@ -6061,6 +6062,7 @@ fail: os_free(fname); interface->global_ctrl_sock = s; @@ -182,7 +183,7 @@ as adding/removing interfaces. --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -1097,6 +1097,7 @@ int main(int argc, char *argv[]) +@@ -1102,6 +1102,7 @@ int main(int argc, char *argv[]) } hostapd_global_ctrl_iface_init(&interfaces); @@ -190,7 +191,7 @@ as adding/removing interfaces. if (hostapd_global_run(&interfaces, daemonize, pid_file)) { wpa_printf(MSG_ERROR, "Failed to start eloop"); -@@ -1106,6 +1107,7 @@ int main(int argc, char *argv[]) +@@ -1111,6 +1112,7 @@ int main(int argc, char *argv[]) ret = 0; out: @@ -268,21 +269,20 @@ as adding/removing interfaces. return 0; } -@@ -1415,8 +1420,7 @@ static int hostapd_bss_radius_init(struc +@@ -1415,7 +1420,7 @@ static int hostapd_bss_radius_init(struc * initialized. Most of the modules that are initialized here will be * deinitialized in hostapd_cleanup(). */ --static int hostapd_setup_bss(struct hostapd_data *hapd, int first, -- bool start_beacon) -+int hostapd_setup_bss(struct hostapd_data *hapd, int first, bool start_beacon) +-static int hostapd_setup_bss(struct hostapd_data *hapd, bool first, ++int hostapd_setup_bss(struct hostapd_data *hapd, bool first, + bool start_beacon) { struct hostapd_bss_config *conf = hapd->conf; - u8 ssid[SSID_MAX_LEN + 1]; -@@ -1458,12 +1462,17 @@ static int hostapd_setup_bss(struct host +@@ -1458,12 +1463,17 @@ static int hostapd_setup_bss(struct host - if (!first || first == -1) { + if (!first) { u8 *addr = hapd->own_addr; -+ bool use_existing = first == -1; ++ bool use_existing = !first; +#ifdef CONFIG_IEEE80211BE + if (hapd->conf->mld_ap) @@ -297,7 +297,7 @@ as adding/removing interfaces. hapd->iface->bss[0]->own_addr) == 0) { wpa_printf(MSG_ERROR, "BSS '%s' may not have " -@@ -1493,6 +1502,7 @@ static int hostapd_setup_bss(struct host +@@ -1493,6 +1503,7 @@ static int hostapd_setup_bss(struct host hapd->mld_link_id, hapd->conf->iface); goto setup_mld; } @@ -305,25 +305,16 @@ as adding/removing interfaces. } #endif /* CONFIG_IEEE80211BE */ -@@ -1501,7 +1511,7 @@ static int hostapd_setup_bss(struct host +@@ -1501,7 +1512,7 @@ static int hostapd_setup_bss(struct host conf->iface, addr, hapd, &hapd->drv_priv, force_ifname, if_addr, conf->bridge[0] ? conf->bridge : NULL, -- first == -1)) { +- 1)) { + use_existing)) { wpa_printf(MSG_ERROR, "Failed to add BSS (BSSID=" MACSTR ")", MAC2STR(hapd->own_addr)); hapd->interface_added = 0; -@@ -1524,7 +1534,7 @@ static int hostapd_setup_bss(struct host - - #ifdef CONFIG_IEEE80211BE - setup_mld: -- if (hapd->conf->mld_ap && !first) { -+ if (hapd->conf->mld_ap && first != 1) { - wpa_printf(MSG_DEBUG, - "MLD: Set link_id=%u, mld_addr=" MACSTR - ", own_addr=" MACSTR, -@@ -1542,6 +1552,8 @@ setup_mld: +@@ -1542,6 +1553,8 @@ setup_mld: } #endif /* CONFIG_IEEE80211BE */ @@ -332,7 +323,7 @@ as adding/removing interfaces. if (conf->wmm_enabled < 0) conf->wmm_enabled = hapd->iconf->ieee80211n | hapd->iconf->ieee80211ax; -@@ -1870,7 +1882,7 @@ int hostapd_set_acl(struct hostapd_data +@@ -1870,7 +1883,7 @@ int hostapd_set_acl(struct hostapd_data } @@ -341,7 +332,7 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE int ret; -@@ -2543,7 +2555,7 @@ static int hostapd_owe_iface_iter2(struc +@@ -2543,7 +2556,7 @@ static int hostapd_owe_iface_iter2(struc #endif /* CONFIG_OWE */ @@ -350,7 +341,7 @@ as adding/removing interfaces. { #ifdef CONFIG_OWE /* Check whether the enabled BSS can complete OWE transition mode -@@ -3000,7 +3012,7 @@ hostapd_alloc_bss_data(struct hostapd_if +@@ -3000,7 +3013,7 @@ hostapd_alloc_bss_data(struct hostapd_if } @@ -359,7 +350,7 @@ as adding/removing interfaces. { if (!hapd) return; -@@ -3208,7 +3220,7 @@ fail: +@@ -3208,7 +3221,7 @@ fail: } @@ -368,7 +359,7 @@ as adding/removing interfaces. { #ifdef CONFIG_IEEE80211BE struct hostapd_mld *mld, **all_mld; -@@ -4089,7 +4101,8 @@ int hostapd_remove_iface(struct hapd_int +@@ -4089,7 +4102,8 @@ int hostapd_remove_iface(struct hapd_int hapd_iface = interfaces->iface[i]; if (hapd_iface == NULL) return -1; @@ -420,7 +411,7 @@ as adding/removing interfaces. hostapd_interface_init_bss(struct hapd_interfaces *interfaces, const char *phy, const char *config_fname, int debug); +int hostapd_set_ctrl_sock_iface(struct hostapd_data *hapd); -+int hostapd_setup_bss(struct hostapd_data *hapd, int first, bool start_beacon); ++int hostapd_setup_bss(struct hostapd_data *hapd, bool first, bool start_beacon); +void hostapd_bss_link_deinit(struct hostapd_data *hapd); +void hostapd_bss_deinit(struct hostapd_data *hapd); void hostapd_bss_setup_multi_link(struct hostapd_data *hapd, @@ -494,7 +485,7 @@ as adding/removing interfaces. } } -@@ -4467,6 +4490,12 @@ static void handle_auth(struct hostapd_d +@@ -4608,6 +4631,12 @@ static void handle_auth(struct hostapd_d goto fail; } @@ -544,7 +535,7 @@ as adding/removing interfaces. char *radius_cui; /* Chargeable-User-Identity from RADIUS */ --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c -@@ -484,6 +484,7 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -487,6 +487,7 @@ static const u8 * hostapd_wpa_auth_get_p struct sta_info *sta = ap_get_sta(hapd, addr); const u8 *psk; @@ -552,7 +543,7 @@ as adding/removing interfaces. if (vlan_id) *vlan_id = 0; if (psk_len) -@@ -534,13 +535,18 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -537,13 +538,18 @@ static const u8 * hostapd_wpa_auth_get_p * returned psk which should not be returned again. * logic list (all hostapd_get_psk; all sta->psk) */ @@ -572,7 +563,7 @@ as adding/removing interfaces. if (pos->is_passphrase) { if (pbkdf2_sha1(pos->passphrase, hapd->conf->ssid.ssid, -@@ -554,9 +560,13 @@ static const u8 * hostapd_wpa_auth_get_p +@@ -557,9 +563,13 @@ static const u8 * hostapd_wpa_auth_get_p } if (pos->psk == prev_psk) { psk = pos->next ? pos->next->psk : NULL; @@ -588,7 +579,7 @@ as adding/removing interfaces. } --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4176,6 +4176,25 @@ struct wpa_driver_ops { +@@ -4429,6 +4429,25 @@ struct wpa_driver_ops { const char *ifname); /** @@ -614,7 +605,7 @@ as adding/removing interfaces. * set_sta_vlan - Bind a station into a specific interface (AP only) * @priv: Private driver interface data * @ifname: Interface (main or virtual BSS or VLAN) -@@ -7027,6 +7046,7 @@ union wpa_event_data { +@@ -7424,6 +7443,7 @@ union wpa_event_data { /** * struct ch_switch @@ -622,7 +613,7 @@ as adding/removing interfaces. * @freq: Frequency of new channel in MHz * @ht_enabled: Whether this is an HT channel * @ch_offset: Secondary channel offset -@@ -7037,6 +7057,7 @@ union wpa_event_data { +@@ -7434,6 +7454,7 @@ union wpa_event_data { * @punct_bitmap: Puncturing bitmap */ struct ch_switch { @@ -632,7 +623,7 @@ as adding/removing interfaces. int ch_offset; --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -77,6 +77,16 @@ enum nlmsgerr_attrs { +@@ -78,6 +78,16 @@ enum nlmsgerr_attrs { #endif /* ANDROID */ @@ -649,7 +640,7 @@ as adding/removing interfaces. static struct nl_sock * nl_create_handle(struct nl_cb *cb, const char *dbg) { -@@ -449,6 +459,11 @@ static int no_seq_check(struct nl_msg *m +@@ -454,6 +464,11 @@ static int no_seq_check(struct nl_msg *m return NL_OK; } @@ -661,7 +652,7 @@ as adding/removing interfaces. static void nl80211_nlmsg_clear(struct nl_msg *msg) { -@@ -633,6 +648,8 @@ int send_and_recv_glb(struct nl80211_glo +@@ -638,6 +653,8 @@ int send_and_recv_glb(struct nl80211_glo if (!msg) return -ENOMEM; @@ -670,7 +661,7 @@ as adding/removing interfaces. err.err = -ENOMEM; s_nl_cb = nl_socket_get_cb(nl_handle); -@@ -677,6 +694,7 @@ int send_and_recv_glb(struct nl80211_glo +@@ -682,6 +699,7 @@ int send_and_recv_glb(struct nl80211_glo err.err_info = err_info; err.drv = drv; @@ -678,7 +669,7 @@ as adding/removing interfaces. nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err); nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err.err); if (ack_handler_custom) { -@@ -1105,6 +1123,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs +@@ -1117,6 +1135,7 @@ nl80211_get_wiphy_data_ap(struct i802_bs os_free(w); return NULL; } @@ -686,7 +677,7 @@ as adding/removing interfaces. nl_cb_set(w->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); nl_cb_set(w->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, -@@ -2212,6 +2231,7 @@ static int wpa_driver_nl80211_init_nl_gl +@@ -2224,6 +2243,7 @@ static int wpa_driver_nl80211_init_nl_gl /* Needs to be registered early so that process_global_event() calls * the sync reply handler hook. */ @@ -694,7 +685,7 @@ as adding/removing interfaces. nl_cb_set(global->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); nl_cb_set(global->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, -@@ -2445,6 +2465,7 @@ static int nl80211_init_bss(struct i802_ +@@ -2469,6 +2489,7 @@ static int nl80211_init_bss(struct i802_ if (!bss->nl_cb) return -1; @@ -702,7 +693,7 @@ as adding/removing interfaces. nl_cb_set(bss->nl_cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL); nl_cb_set(bss->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, -@@ -9180,6 +9201,7 @@ static void *i802_init(struct hostapd_da +@@ -9476,6 +9497,7 @@ static void *i802_init(struct hostapd_da char master_ifname[IFNAMSIZ]; int ifindex, br_ifindex = 0; int br_added = 0; @@ -710,7 +701,7 @@ as adding/removing interfaces. bss = wpa_driver_nl80211_drv_init(hapd, params->ifname, params->global_priv, 1, -@@ -9240,21 +9262,17 @@ static void *i802_init(struct hostapd_da +@@ -9536,21 +9558,17 @@ static void *i802_init(struct hostapd_da (params->num_bridge == 0 || !params->bridge[0])) add_ifidx(drv, br_ifindex, drv->ifindex); @@ -742,7 +733,7 @@ as adding/removing interfaces. } if (drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) { -@@ -9641,6 +9659,50 @@ static int wpa_driver_nl80211_if_remove( +@@ -9941,6 +9959,50 @@ static int wpa_driver_nl80211_if_remove( return 0; } @@ -793,7 +784,7 @@ as adding/removing interfaces. static int cookie_handler(struct nl_msg *msg, void *arg) { -@@ -11540,6 +11602,37 @@ static bool nl80211_is_drv_shared(void * +@@ -11877,6 +11939,37 @@ static bool nl80211_is_drv_shared(void * #endif /* CONFIG_IEEE80211BE */ @@ -831,7 +822,7 @@ as adding/removing interfaces. static int driver_nl80211_send_mlme(void *priv, const u8 *data, size_t data_len, int noack, unsigned int freq, -@@ -15546,6 +15639,8 @@ const struct wpa_driver_ops wpa_driver_n +@@ -16705,6 +16798,8 @@ const struct wpa_driver_ops wpa_driver_n .set_acl = wpa_driver_nl80211_set_acl, .if_add = wpa_driver_nl80211_if_add, .if_remove = driver_nl80211_if_remove, @@ -842,7 +833,7 @@ as adding/removing interfaces. .sta_add = wpa_driver_nl80211_sta_add, --- a/src/drivers/driver_nl80211_event.c +++ b/src/drivers/driver_nl80211_event.c -@@ -1263,6 +1263,7 @@ static void mlme_event_ch_switch(struct +@@ -1276,6 +1276,7 @@ static void mlme_event_ch_switch(struct struct nlattr *bw, struct nlattr *cf1, struct nlattr *cf2, struct nlattr *punct_bitmap, @@ -850,7 +841,7 @@ as adding/removing interfaces. int finished) { struct i802_bss *bss; -@@ -1328,6 +1329,8 @@ static void mlme_event_ch_switch(struct +@@ -1341,6 +1342,8 @@ static void mlme_event_ch_switch(struct data.ch_switch.cf1 = nla_get_u32(cf1); if (cf2) data.ch_switch.cf2 = nla_get_u32(cf2); @@ -859,7 +850,7 @@ as adding/removing interfaces. if (link) { data.ch_switch.link_id = nla_get_u8(link); -@@ -4423,6 +4426,7 @@ static void do_process_drv_event(struct +@@ -4970,6 +4973,7 @@ static void do_process_drv_event(struct tb[NL80211_ATTR_CENTER_FREQ1], tb[NL80211_ATTR_CENTER_FREQ2], tb[NL80211_ATTR_PUNCT_BITMAP], @@ -867,7 +858,7 @@ as adding/removing interfaces. 0); break; case NL80211_CMD_CH_SWITCH_NOTIFY: -@@ -4435,6 +4439,7 @@ static void do_process_drv_event(struct +@@ -4982,6 +4986,7 @@ static void do_process_drv_event(struct tb[NL80211_ATTR_CENTER_FREQ1], tb[NL80211_ATTR_CENTER_FREQ2], tb[NL80211_ATTR_PUNCT_BITMAP], @@ -941,7 +932,7 @@ as adding/removing interfaces. ifdef CONFIG_CODE_COVERAGE CFLAGS += -O0 -fprofile-arcs -ftest-coverage -U_FORTIFY_SOURCE LIBS += -lgcov -@@ -1082,6 +1090,9 @@ ifdef CONFIG_CTRL_IFACE_MIB +@@ -1087,6 +1095,9 @@ ifdef CONFIG_CTRL_IFACE_MIB CFLAGS += -DCONFIG_CTRL_IFACE_MIB endif OBJS += ../src/ap/ctrl_iface_ap.o @@ -1001,7 +992,7 @@ as adding/removing interfaces. MULTI_AP_FRONTHAUL_BSS); wpa_s->multi_ap_ie = 1; } -@@ -5873,6 +5880,13 @@ static void wpas_event_rx_mgmt_action(st +@@ -5916,6 +5923,13 @@ static void wpas_event_rx_mgmt_action(st } #endif /* CONFIG_WNM */ @@ -1015,7 +1006,7 @@ as adding/removing interfaces. #ifdef CONFIG_GAS if ((mgmt->u.action.category == WLAN_ACTION_PUBLIC || mgmt->u.action.category == WLAN_ACTION_PROTECTED_DUAL) && -@@ -6679,6 +6693,7 @@ void supplicant_event(void *ctx, enum wp +@@ -6739,6 +6753,7 @@ void supplicant_event(void *ctx, enum wp event_to_string(event), event); #endif /* CONFIG_NO_STDOUT_DEBUG */ @@ -1051,7 +1042,7 @@ as adding/removing interfaces. static void hostapd_dpp_reply_wait_timeout(void *eloop_ctx, void *timeout_ctx); -@@ -3017,6 +3018,9 @@ void hostapd_dpp_rx_action(struct hostap +@@ -3018,6 +3019,9 @@ void hostapd_dpp_rx_action(struct hostap wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_RX "src=" MACSTR " freq=%u type=%d", MAC2STR(src), freq, type); @@ -1061,7 +1052,7 @@ as adding/removing interfaces. #ifdef CONFIG_DPP2 if (dpp_relay_rx_action(hapd->iface->interfaces->dpp, src, hdr, buf, len, freq, NULL, NULL, -@@ -3116,13 +3120,19 @@ void hostapd_dpp_rx_action(struct hostap +@@ -3117,13 +3121,19 @@ void hostapd_dpp_rx_action(struct hostap struct wpabuf * hostapd_dpp_gas_req_handler(struct hostapd_data *hapd, const u8 *sa, @@ -1116,7 +1107,7 @@ as adding/removing interfaces. static int wpas_dpp_listen_start(struct wpa_supplicant *wpa_s, -@@ -4119,6 +4120,9 @@ void wpas_dpp_rx_action(struct wpa_suppl +@@ -4122,6 +4123,9 @@ void wpas_dpp_rx_action(struct wpa_suppl return; } wpa_hexdump(MSG_MSGDUMP, "DPP: Received message attributes", buf, len); diff --git a/package/network/services/hostapd/patches/701-reload_config_inline.patch b/package/network/services/hostapd/patches/701-reload_config_inline.patch index 86ee0e49527..006b9a333ed 100644 --- a/package/network/services/hostapd/patches/701-reload_config_inline.patch +++ b/package/network/services/hostapd/patches/701-reload_config_inline.patch @@ -8,7 +8,7 @@ as adding/removing interfaces. --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -5012,7 +5012,14 @@ struct hostapd_config * hostapd_config_r +@@ -5027,7 +5027,14 @@ struct hostapd_config * hostapd_config_r int errors = 0; size_t i; @@ -43,7 +43,7 @@ as adding/removing interfaces. wpa_printf(MSG_ERROR, --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -407,7 +407,11 @@ hostapd_interface_init(struct hapd_inter +@@ -412,7 +412,11 @@ hostapd_interface_init(struct hapd_inter struct hostapd_iface *iface; int k; @@ -58,7 +58,7 @@ as adding/removing interfaces. return NULL; --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -3413,8 +3413,13 @@ hostapd_interface_init_bss(struct hapd_i +@@ -3414,8 +3414,13 @@ hostapd_interface_init_bss(struct hapd_i } } diff --git a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch index f2d380ba447..8719afe9508 100644 --- a/package/network/services/hostapd/patches/720-iface_max_num_sta.patch +++ b/package/network/services/hostapd/patches/720-iface_max_num_sta.patch @@ -25,7 +25,7 @@ full device, e.g. in order to deal with hardware/driver limitations } else if (os_strcmp(buf, "extended_key_id") == 0) { --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -1083,6 +1083,8 @@ struct hostapd_config { +@@ -1095,6 +1095,8 @@ struct hostapd_config { unsigned int track_sta_max_num; unsigned int track_sta_max_age; @@ -36,7 +36,7 @@ full device, e.g. in order to deal with hardware/driver limitations * ' ' (ascii 32): all environments --- a/src/ap/beacon.c +++ b/src/ap/beacon.c -@@ -1704,7 +1704,7 @@ void handle_probe_req(struct hostapd_dat +@@ -1708,7 +1708,7 @@ void handle_probe_req(struct hostapd_dat if (hapd->conf->no_probe_resp_if_max_sta && is_multicast_ether_addr(mgmt->da) && is_multicast_ether_addr(mgmt->bssid) && diff --git a/package/network/services/hostapd/patches/730-ft_iface.patch b/package/network/services/hostapd/patches/730-ft_iface.patch index f6a6493f753..e1ce995119b 100644 --- a/package/network/services/hostapd/patches/730-ft_iface.patch +++ b/package/network/services/hostapd/patches/730-ft_iface.patch @@ -29,7 +29,7 @@ a VLAN interface on top of the bridge, instead of using the bridge directly int bridge_hairpin; /* hairpin_mode on bridge members */ --- a/src/ap/wpa_auth_glue.c +++ b/src/ap/wpa_auth_glue.c -@@ -1925,8 +1925,12 @@ int hostapd_setup_wpa(struct hostapd_dat +@@ -1928,8 +1928,12 @@ int hostapd_setup_wpa(struct hostapd_dat wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt)) { const char *ft_iface; diff --git a/package/network/services/hostapd/patches/740-snoop_iface.patch b/package/network/services/hostapd/patches/740-snoop_iface.patch index 3a372e63d7b..a8f07d6c228 100644 --- a/package/network/services/hostapd/patches/740-snoop_iface.patch +++ b/package/network/services/hostapd/patches/740-snoop_iface.patch @@ -112,7 +112,7 @@ untagged DHCP packets hapd->x_snoop_initialized = false; --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4590,7 +4590,7 @@ struct wpa_driver_ops { +@@ -4849,7 +4849,7 @@ struct wpa_driver_ops { * Returns: 0 on success, negative (<0) on failure */ int (*br_set_net_param)(void *priv, enum drv_br_net_param param, @@ -123,7 +123,7 @@ untagged DHCP packets * get_wowlan - Get wake-on-wireless status --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -13238,7 +13238,7 @@ static const char * drv_br_net_param_str +@@ -13575,7 +13575,7 @@ static const char * drv_br_net_param_str static int wpa_driver_br_set_net_param(void *priv, enum drv_br_net_param param, @@ -132,7 +132,7 @@ untagged DHCP packets { struct i802_bss *bss = priv; char path[128]; -@@ -13264,8 +13264,11 @@ static int wpa_driver_br_set_net_param(v +@@ -13601,8 +13601,11 @@ static int wpa_driver_br_set_net_param(v return -EINVAL; } diff --git a/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch b/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch index c28d7f56b72..a605ab308e0 100644 --- a/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch +++ b/package/network/services/hostapd/patches/762-AP-don-t-ignore-probe-requests-with-invalid-DSSS-par.patch @@ -28,7 +28,7 @@ Signed-off-by: David Bauer --- a/src/ap/beacon.c +++ b/src/ap/beacon.c -@@ -1526,7 +1526,7 @@ void handle_probe_req(struct hostapd_dat +@@ -1530,7 +1530,7 @@ void handle_probe_req(struct hostapd_dat * is less likely to see them (Probe Request frame sent on a * neighboring, but partially overlapping, channel). */ diff --git a/package/network/services/hostapd/patches/770-radius_server.patch b/package/network/services/hostapd/patches/770-radius_server.patch index ba1db508b47..4e6a6f3ab20 100644 --- a/package/network/services/hostapd/patches/770-radius_server.patch +++ b/package/network/services/hostapd/patches/770-radius_server.patch @@ -29,7 +29,7 @@ handle reload. #ifndef CONFIG_NO_HOSTAPD_LOGGER static void hostapd_logger_cb(void *ctx, const u8 *addr, unsigned int module, -@@ -848,6 +849,11 @@ int main(int argc, char *argv[]) +@@ -853,6 +854,11 @@ int main(int argc, char *argv[]) if (os_program_init()) return -1; diff --git a/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch b/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch index d0f4d8ffaf0..7d051d9eb0b 100644 --- a/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch +++ b/package/network/services/hostapd/patches/780-Implement-APuP-Access-Point-Micro-Peering.patch @@ -53,10 +53,10 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -5003,6 +5003,15 @@ static int hostapd_config_fill(struct ho - conf->disable_mcs15_rx = atoi(pos); - #endif /* CONFIG_TESTING_OPTIONS */ +@@ -5020,6 +5020,15 @@ static int hostapd_config_fill(struct ho #endif /* CONFIG_IEEE80211BE */ + } else if (os_strcmp(buf, "i2r_lmr_policy") == 0) { + conf->i2r_lmr_policy = atoi(pos); +#ifdef CONFIG_APUP + } else if (os_strcmp(buf, "apup") == 0) { + bss->apup = !!atoi(pos); @@ -66,15 +66,16 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 + os_strlcpy(bss->apup_peer_ifname_prefix, + pos, sizeof(bss->apup_peer_ifname_prefix)); +#endif // def CONFIG_APUP - } else if (os_strcmp(buf, "i2r_lmr_policy") == 0) { - conf->i2r_lmr_policy = atoi(pos); } else { + wpa_printf(MSG_ERROR, + "Line %d: unknown configuration item '%s'", --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -1001,6 +1001,34 @@ struct hostapd_bss_config { +@@ -1013,6 +1013,35 @@ struct hostapd_bss_config { unsigned int pmksa_caching_privacy:1; unsigned int eap_using_authentication_frames:1; #endif /* CONFIG_ENC_ASSOC */ ++ +#ifdef CONFIG_APUP + /** + * Access Point Micro Peering @@ -163,7 +164,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 int hostapd_sta_add(struct hostapd_data *hapd, --- /dev/null +++ b/src/ap/apup.c -@@ -0,0 +1,170 @@ +@@ -0,0 +1,169 @@ +/* + * hostapd / APuP Access Point Micro Peering + * @@ -225,9 +226,8 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 + * understand what could be a proper implementation in this context too + */ + const u8 *mld_link_addr = NULL; -+ bool mld_link_sta = false; ++ bool mld_link_sta = false, epp_sta = false; + u16 eml_cap = 0; -+ bool epp_sta = false; + + /* First add the station without more information */ + int aRet = hostapd_sta_add( @@ -373,7 +373,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 #ifdef CONFIG_FILS static struct wpabuf * -@@ -4869,8 +4872,8 @@ static u16 check_multi_ap(struct hostapd +@@ -5010,8 +5013,8 @@ static u16 check_multi_ap(struct hostapd } @@ -384,7 +384,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 { /* Supported rates not used in IEEE 802.11ad/DMG */ if (hapd->iface->current_mode && -@@ -5338,7 +5341,7 @@ static int __check_assoc_ies(struct host +@@ -5479,7 +5482,7 @@ static int __check_assoc_ies(struct host elems->ext_capab_len); if (resp != WLAN_STATUS_SUCCESS) goto out; @@ -393,7 +393,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 if (resp != WLAN_STATUS_SUCCESS) goto out; -@@ -7720,6 +7723,11 @@ static void handle_beacon(struct hostapd +@@ -7920,6 +7923,11 @@ static void handle_beacon(struct hostapd 0); ap_list_process_beacon(hapd->iface, mgmt, &elems, fi); @@ -418,7 +418,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 u16 copy_sta_vendor_vht(struct hostapd_data *hapd, struct sta_info *sta, --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -4284,7 +4284,7 @@ struct wpa_driver_ops { +@@ -4537,7 +4537,7 @@ struct wpa_driver_ops { * Returns: 0 on success, -1 on failure */ int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val, @@ -429,7 +429,7 @@ Hotfix-by: Sebastian Gottschall https://github.com/mirror/dd-wrt/commit/0c3001a6 * send_action - Transmit an Action frame --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -9032,25 +9032,15 @@ int nl80211_has_ifidx(struct wpa_driver_ +@@ -9328,25 +9328,15 @@ int nl80211_has_ifidx(struct wpa_driver_ static int i802_set_wds_sta(void *priv, const u8 *addr, int aid, int val, -- 2.47.3