mirror of
https://github.com/hanwckf/immortalwrt-mt798x.git
synced 2025-01-09 18:59:13 +08:00
509363ba58
Fixes CVE-2022-47522 Signed-off-by: Felix Fietkau <nbd@nbd.name> (cherry picked from commit d54c91bd9ab3c54ee06923eafbd67047816a37e4) (cherry picked from commit 4ae854d05568bc36a4df2cb6dd8fb023b5ef9944)
315 lines
11 KiB
Diff
315 lines
11 KiB
Diff
--- a/include/net/mac80211.h
|
|
+++ b/include/net/mac80211.h
|
|
@@ -702,6 +702,8 @@ struct ieee80211_bss_conf {
|
|
u32 unsol_bcast_probe_resp_interval;
|
|
bool s1g;
|
|
struct cfg80211_bitrate_mask beacon_tx_rate;
|
|
+
|
|
+ bool csa_active;
|
|
};
|
|
|
|
/**
|
|
@@ -1672,6 +1674,46 @@ enum ieee80211_offload_flags {
|
|
};
|
|
|
|
/**
|
|
+ * struct ieee80211_vif_cfg - interface configuration
|
|
+ * @assoc: association status
|
|
+ * @ibss_joined: indicates whether this station is part of an IBSS or not
|
|
+ * @ibss_creator: indicates if a new IBSS network is being created
|
|
+ * @ps: power-save mode (STA only). This flag is NOT affected by
|
|
+ * offchannel/dynamic_ps operations.
|
|
+ * @aid: association ID number, valid only when @assoc is true
|
|
+ * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The
|
|
+ * may filter ARP queries targeted for other addresses than listed here.
|
|
+ * The driver must allow ARP queries targeted for all address listed here
|
|
+ * to pass through. An empty list implies no ARP queries need to pass.
|
|
+ * @arp_addr_cnt: Number of addresses currently on the list. Note that this
|
|
+ * may be larger than %IEEE80211_BSS_ARP_ADDR_LIST_LEN (the arp_addr_list
|
|
+ * array size), it's up to the driver what to do in that case.
|
|
+ * @ssid: The SSID of the current vif. Valid in AP and IBSS mode.
|
|
+ * @ssid_len: Length of SSID given in @ssid.
|
|
+ * @s1g: BSS is S1G BSS (affects Association Request format).
|
|
+ * @idle: This interface is idle. There's also a global idle flag in the
|
|
+ * hardware config which may be more appropriate depending on what
|
|
+ * your driver/device needs to do.
|
|
+ * @ap_addr: AP MLD address, or BSSID for non-MLO connections
|
|
+ * (station mode only)
|
|
+ */
|
|
+struct ieee80211_vif_cfg {
|
|
+ /* association related data */
|
|
+ bool assoc, ibss_joined;
|
|
+ bool ibss_creator;
|
|
+ bool ps;
|
|
+ u16 aid;
|
|
+
|
|
+ __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN];
|
|
+ int arp_addr_cnt;
|
|
+ u8 ssid[IEEE80211_MAX_SSID_LEN];
|
|
+ size_t ssid_len;
|
|
+ bool s1g;
|
|
+ bool idle;
|
|
+ u8 ap_addr[ETH_ALEN] __aligned(2);
|
|
+};
|
|
+
|
|
+/**
|
|
* struct ieee80211_vif - per-interface data
|
|
*
|
|
* Data in this structure is continually present for driver
|
|
@@ -1725,6 +1767,7 @@ enum ieee80211_offload_flags {
|
|
*/
|
|
struct ieee80211_vif {
|
|
enum nl80211_iftype type;
|
|
+ struct ieee80211_vif_cfg cfg;
|
|
struct ieee80211_bss_conf bss_conf;
|
|
u8 addr[ETH_ALEN] __aligned(2);
|
|
bool p2p;
|
|
@@ -2045,6 +2088,80 @@ struct ieee80211_sta_txpwr {
|
|
};
|
|
|
|
/**
|
|
+ * struct ieee80211_sta_aggregates - info that is aggregated from active links
|
|
+ *
|
|
+ * Used for any per-link data that needs to be aggregated and updated in the
|
|
+ * main &struct ieee80211_sta when updated or the active links change.
|
|
+ *
|
|
+ * @max_amsdu_len: indicates the maximal length of an A-MSDU in bytes.
|
|
+ * This field is always valid for packets with a VHT preamble.
|
|
+ * For packets with a HT preamble, additional limits apply:
|
|
+ *
|
|
+ * * If the skb is transmitted as part of a BA agreement, the
|
|
+ * A-MSDU maximal size is min(max_amsdu_len, 4065) bytes.
|
|
+ * * If the skb is not part of a BA agreement, the A-MSDU maximal
|
|
+ * size is min(max_amsdu_len, 7935) bytes.
|
|
+ *
|
|
+ * Both additional HT limits must be enforced by the low level
|
|
+ * driver. This is defined by the spec (IEEE 802.11-2012 section
|
|
+ * 8.3.2.2 NOTE 2).
|
|
+ * @max_rc_amsdu_len: Maximum A-MSDU size in bytes recommended by rate control.
|
|
+ * @max_tid_amsdu_len: Maximum A-MSDU size in bytes for this TID
|
|
+ */
|
|
+struct ieee80211_sta_aggregates {
|
|
+ u16 max_amsdu_len;
|
|
+
|
|
+ u16 max_rc_amsdu_len;
|
|
+ u16 max_tid_amsdu_len[IEEE80211_NUM_TIDS];
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct ieee80211_link_sta - station Link specific info
|
|
+ * All link specific info for a STA link for a non MLD STA(single)
|
|
+ * or a MLD STA(multiple entries) are stored here.
|
|
+ *
|
|
+ * @sta: reference to owning STA
|
|
+ * @addr: MAC address of the Link STA. For non-MLO STA this is same as the addr
|
|
+ * in ieee80211_sta. For MLO Link STA this addr can be same or different
|
|
+ * from addr in ieee80211_sta (representing MLD STA addr)
|
|
+ * @link_id: the link ID for this link STA (0 for deflink)
|
|
+ * @smps_mode: current SMPS mode (off, static or dynamic)
|
|
+ * @supp_rates: Bitmap of supported rates
|
|
+ * @ht_cap: HT capabilities of this STA; restricted to our own capabilities
|
|
+ * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities
|
|
+ * @he_cap: HE capabilities of this STA
|
|
+ * @he_6ghz_capa: on 6 GHz, holds the HE 6 GHz band capabilities
|
|
+ * @eht_cap: EHT capabilities of this STA
|
|
+ * @bandwidth: current bandwidth the station can receive with
|
|
+ * @rx_nss: in HT/VHT, the maximum number of spatial streams the
|
|
+ * station can receive at the moment, changed by operating mode
|
|
+ * notifications and capabilities. The value is only valid after
|
|
+ * the station moves to associated state.
|
|
+ * @txpwr: the station tx power configuration
|
|
+ *
|
|
+ */
|
|
+struct ieee80211_link_sta {
|
|
+ struct ieee80211_sta *sta;
|
|
+
|
|
+ u8 addr[ETH_ALEN];
|
|
+ u8 link_id;
|
|
+ enum ieee80211_smps_mode smps_mode;
|
|
+
|
|
+ u32 supp_rates[NUM_NL80211_BANDS];
|
|
+ struct ieee80211_sta_ht_cap ht_cap;
|
|
+ struct ieee80211_sta_vht_cap vht_cap;
|
|
+ struct ieee80211_sta_he_cap he_cap;
|
|
+ struct ieee80211_he_6ghz_capa he_6ghz_capa;
|
|
+ struct ieee80211_sta_eht_cap eht_cap;
|
|
+
|
|
+ struct ieee80211_sta_aggregates agg;
|
|
+
|
|
+ u8 rx_nss;
|
|
+ enum ieee80211_sta_rx_bandwidth bandwidth;
|
|
+ struct ieee80211_sta_txpwr txpwr;
|
|
+};
|
|
+
|
|
+/**
|
|
* struct ieee80211_sta - station table entry
|
|
*
|
|
* A station table entry represents a station we are possibly
|
|
@@ -2136,6 +2253,10 @@ struct ieee80211_sta {
|
|
struct ieee80211_sta_txpwr txpwr;
|
|
|
|
struct ieee80211_txq *txq[IEEE80211_NUM_TIDS + 1];
|
|
+
|
|
+ u16 valid_links;
|
|
+ struct ieee80211_link_sta deflink;
|
|
+ struct ieee80211_link_sta __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS];
|
|
|
|
/* must be last */
|
|
u8 drv_priv[] __aligned(sizeof(void *));
|
|
--- a/include/linux/ieee80211.h
|
|
+++ b/include/linux/ieee80211.h
|
|
@@ -1902,6 +1902,73 @@ struct ieee80211_he_mu_edca_param_ac_rec
|
|
} __packed;
|
|
|
|
/**
|
|
+ * struct ieee80211_eht_mcs_nss_supp_20mhz_only - EHT 20MHz only station max
|
|
+ * supported NSS for per MCS.
|
|
+ *
|
|
+ * For each field below, bits 0 - 3 indicate the maximal number of spatial
|
|
+ * streams for Rx, and bits 4 - 7 indicate the maximal number of spatial streams
|
|
+ * for Tx.
|
|
+ *
|
|
+ * @rx_tx_mcs7_max_nss: indicates the maximum number of spatial streams
|
|
+ * supported for reception and the maximum number of spatial streams
|
|
+ * supported for transmission for MCS 0 - 7.
|
|
+ * @rx_tx_mcs9_max_nss: indicates the maximum number of spatial streams
|
|
+ * supported for reception and the maximum number of spatial streams
|
|
+ * supported for transmission for MCS 8 - 9.
|
|
+ * @rx_tx_mcs11_max_nss: indicates the maximum number of spatial streams
|
|
+ * supported for reception and the maximum number of spatial streams
|
|
+ * supported for transmission for MCS 10 - 11.
|
|
+ * @rx_tx_mcs13_max_nss: indicates the maximum number of spatial streams
|
|
+ * supported for reception and the maximum number of spatial streams
|
|
+ * supported for transmission for MCS 12 - 13.
|
|
+ */
|
|
+struct ieee80211_eht_mcs_nss_supp_20mhz_only {
|
|
+ u8 rx_tx_mcs7_max_nss;
|
|
+ u8 rx_tx_mcs9_max_nss;
|
|
+ u8 rx_tx_mcs11_max_nss;
|
|
+ u8 rx_tx_mcs13_max_nss;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct ieee80211_eht_mcs_nss_supp_bw - EHT max supported NSS per MCS (except
|
|
+ * 20MHz only stations).
|
|
+ *
|
|
+ * For each field below, bits 0 - 3 indicate the maximal number of spatial
|
|
+ * streams for Rx, and bits 4 - 7 indicate the maximal number of spatial streams
|
|
+ * for Tx.
|
|
+ *
|
|
+ * @rx_tx_mcs9_max_nss: indicates the maximum number of spatial streams
|
|
+ * supported for reception and the maximum number of spatial streams
|
|
+ * supported for transmission for MCS 0 - 9.
|
|
+ * @rx_tx_mcs11_max_nss: indicates the maximum number of spatial streams
|
|
+ * supported for reception and the maximum number of spatial streams
|
|
+ * supported for transmission for MCS 10 - 11.
|
|
+ * @rx_tx_mcs13_max_nss: indicates the maximum number of spatial streams
|
|
+ * supported for reception and the maximum number of spatial streams
|
|
+ * supported for transmission for MCS 12 - 13.
|
|
+ */
|
|
+struct ieee80211_eht_mcs_nss_supp_bw {
|
|
+ u8 rx_tx_mcs9_max_nss;
|
|
+ u8 rx_tx_mcs11_max_nss;
|
|
+ u8 rx_tx_mcs13_max_nss;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct ieee80211_eht_cap_elem_fixed - EHT capabilities fixed data
|
|
+ *
|
|
+ * This structure is the "EHT Capabilities element" fixed fields as
|
|
+ * described in P802.11be_D2.0 section 9.4.2.313.
|
|
+ *
|
|
+ * @mac_cap_info: MAC capabilities, see IEEE80211_EHT_MAC_CAP*
|
|
+ * @phy_cap_info: PHY capabilities, see IEEE80211_EHT_PHY_CAP*
|
|
+ */
|
|
+struct ieee80211_eht_cap_elem_fixed {
|
|
+ u8 mac_cap_info[2];
|
|
+ u8 phy_cap_info[9];
|
|
+} __packed;
|
|
+
|
|
+
|
|
+/**
|
|
* struct ieee80211_mu_edca_param_set - MU EDCA Parameter Set element
|
|
*
|
|
* This structure is the "MU EDCA Parameter Set element" fields as
|
|
@@ -2214,6 +2281,12 @@ int ieee80211_get_vht_max_nss(struct iee
|
|
#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US 0x80
|
|
#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_RESERVED 0xc0
|
|
#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_MASK 0xc0
|
|
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_0US 0x0
|
|
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_8US 0x1
|
|
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_16US 0x2
|
|
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_RESERVED 0x3
|
|
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_POS 6
|
|
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_MASK 0xc0
|
|
|
|
#define IEEE80211_HE_PHY_CAP10_HE_MU_M1RU_MAX_LTF 0x01
|
|
|
|
@@ -4006,4 +4079,7 @@ enum ieee80211_range_params_max_total_lt
|
|
IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_UNSPECIFIED,
|
|
};
|
|
|
|
+/* multi-link device */
|
|
+#define IEEE80211_MLD_MAX_NUM_LINKS 15
|
|
+
|
|
#endif /* LINUX_IEEE80211_H */
|
|
--- a/include/net/cfg80211.h
|
|
+++ b/include/net/cfg80211.h
|
|
@@ -348,6 +348,31 @@ struct ieee80211_sta_vht_cap {
|
|
#define IEEE80211_HE_PPE_THRES_MAX_LEN 25
|
|
|
|
/**
|
|
+ * struct ieee80211_eht_mcs_nss_supp - EHT max supported NSS per MCS
|
|
+ *
|
|
+ * See P802.11be_D1.3 Table 9-401k - "Subfields of the Supported EHT-MCS
|
|
+ * and NSS Set field"
|
|
+ *
|
|
+ * @only_20mhz: MCS/NSS support for 20 MHz-only STA.
|
|
+ * @bw: MCS/NSS support for 80, 160 and 320 MHz
|
|
+ * @bw._80: MCS/NSS support for BW <= 80 MHz
|
|
+ * @bw._160: MCS/NSS support for BW = 160 MHz
|
|
+ * @bw._320: MCS/NSS support for BW = 320 MHz
|
|
+ */
|
|
+struct ieee80211_eht_mcs_nss_supp {
|
|
+ union {
|
|
+ struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz;
|
|
+ struct {
|
|
+ struct ieee80211_eht_mcs_nss_supp_bw _80;
|
|
+ struct ieee80211_eht_mcs_nss_supp_bw _160;
|
|
+ struct ieee80211_eht_mcs_nss_supp_bw _320;
|
|
+ } __packed bw;
|
|
+ } __packed;
|
|
+} __packed;
|
|
+
|
|
+#define IEEE80211_EHT_PPE_THRES_MAX_LEN 32
|
|
+
|
|
+/**
|
|
* struct ieee80211_sta_he_cap - STA's HE capabilities
|
|
*
|
|
* This structure describes most essential parameters needed
|
|
@@ -366,6 +391,24 @@ struct ieee80211_sta_he_cap {
|
|
};
|
|
|
|
/**
|
|
+ * struct ieee80211_sta_eht_cap - STA's EHT capabilities
|
|
+ *
|
|
+ * This structure describes most essential parameters needed
|
|
+ * to describe 802.11be EHT capabilities for a STA.
|
|
+ *
|
|
+ * @has_eht: true iff EHT data is valid.
|
|
+ * @eht_cap_elem: Fixed portion of the eht capabilities element.
|
|
+ * @eht_mcs_nss_supp: The supported NSS/MCS combinations.
|
|
+ * @eht_ppe_thres: Holds the PPE Thresholds data.
|
|
+ */
|
|
+struct ieee80211_sta_eht_cap {
|
|
+ bool has_eht;
|
|
+ struct ieee80211_eht_cap_elem_fixed eht_cap_elem;
|
|
+ struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp;
|
|
+ u8 eht_ppe_thres[IEEE80211_EHT_PPE_THRES_MAX_LEN];
|
|
+};
|
|
+
|
|
+/**
|
|
* struct ieee80211_sband_iftype_data - sband data per interface type
|
|
*
|
|
* This structure encapsulates sband data that is relevant for the
|