diff options
author | Mike Pagano <mpagano@gentoo.org> | 2022-10-17 12:48:18 -0400 |
---|---|---|
committer | Mike Pagano <mpagano@gentoo.org> | 2022-10-17 12:48:18 -0400 |
commit | 423805ef719f9363c11076626ebda4227aafa855 (patch) | |
tree | 79512ad7ad2986a62b415d272b4ded0858fb4725 /1218_linux-5.4.219.patch | |
parent | Linux patch 5.4.218 (diff) | |
download | linux-patches-423805ef719f9363c11076626ebda4227aafa855.tar.gz linux-patches-423805ef719f9363c11076626ebda4227aafa855.tar.bz2 linux-patches-423805ef719f9363c11076626ebda4227aafa855.zip |
Linux patch 5.4.2195.4-224
Signed-off-by: Mike Pagano <mpagano@gentoo.org>
Diffstat (limited to '1218_linux-5.4.219.patch')
-rw-r--r-- | 1218_linux-5.4.219.patch | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/1218_linux-5.4.219.patch b/1218_linux-5.4.219.patch new file mode 100644 index 00000000..d52cca82 --- /dev/null +++ b/1218_linux-5.4.219.patch @@ -0,0 +1,202 @@ +diff --git a/Makefile b/Makefile +index c26d5ce1d6768..58325c33ef0cf 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + VERSION = 5 + PATCHLEVEL = 4 +-SUBLEVEL = 218 ++SUBLEVEL = 219 + EXTRAVERSION = + NAME = Kleptomaniac Octopus + +diff --git a/fs/splice.c b/fs/splice.c +index ae5623244d5e3..e509239d7e06a 100644 +--- a/fs/splice.c ++++ b/fs/splice.c +@@ -895,15 +895,17 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, + { + struct pipe_inode_info *pipe; + long ret, bytes; ++ umode_t i_mode; + size_t len; + int i, flags, more; + + /* +- * We require the input to be seekable, as we don't want to randomly +- * drop data for eg socket -> socket splicing. Use the piped splicing +- * for that! ++ * We require the input being a regular file, as we don't want to ++ * randomly drop data for eg socket -> socket splicing. Use the ++ * piped splicing for that! + */ +- if (unlikely(!(in->f_mode & FMODE_LSEEK))) ++ i_mode = file_inode(in)->i_mode; ++ if (unlikely(!S_ISREG(i_mode) && !S_ISBLK(i_mode))) + return -EINVAL; + + /* +diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h +index 7747a6f46d299..f30a205323de5 100644 +--- a/net/mac80211/ieee80211_i.h ++++ b/net/mac80211/ieee80211_i.h +@@ -1460,7 +1460,6 @@ struct ieee802_11_elems { + const u8 *supp_rates; + const u8 *ds_params; + const struct ieee80211_tim_ie *tim; +- const u8 *challenge; + const u8 *rsn; + const u8 *erp_info; + const u8 *ext_supp_rates; +@@ -1507,7 +1506,6 @@ struct ieee802_11_elems { + u8 ssid_len; + u8 supp_rates_len; + u8 tim_len; +- u8 challenge_len; + u8 rsn_len; + u8 ext_supp_rates_len; + u8 wmm_info_len; +@@ -1521,6 +1519,8 @@ struct ieee802_11_elems { + u8 country_elem_len; + u8 bssid_index_len; + ++ void *nontx_profile; ++ + /* whether a parse error occurred while retrieving these elements */ + bool parse_error; + }; +diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c +index 5415e566e09d8..b48a09043663a 100644 +--- a/net/mac80211/mlme.c ++++ b/net/mac80211/mlme.c +@@ -2829,14 +2829,14 @@ static void ieee80211_auth_challenge(struct ieee80211_sub_if_data *sdata, + { + struct ieee80211_local *local = sdata->local; + struct ieee80211_mgd_auth_data *auth_data = sdata->u.mgd.auth_data; ++ const struct element *challenge; + u8 *pos; +- struct ieee802_11_elems elems; + u32 tx_flags = 0; + + pos = mgmt->u.auth.variable; +- ieee802_11_parse_elems(pos, len - (pos - (u8 *)mgmt), false, &elems, +- mgmt->bssid, auth_data->bss->bssid); +- if (!elems.challenge) ++ challenge = cfg80211_find_elem(WLAN_EID_CHALLENGE, pos, ++ len - (pos - (u8 *)mgmt)); ++ if (!challenge) + return; + auth_data->expected_transaction = 4; + drv_mgd_prepare_tx(sdata->local, sdata, 0); +@@ -2844,7 +2844,8 @@ static void ieee80211_auth_challenge(struct ieee80211_sub_if_data *sdata, + tx_flags = IEEE80211_TX_CTL_REQ_TX_STATUS | + IEEE80211_TX_INTFL_MLME_CONN_TX; + ieee80211_send_auth(sdata, 3, auth_data->algorithm, 0, +- elems.challenge - 2, elems.challenge_len + 2, ++ (void *)challenge, ++ challenge->datalen + sizeof(*challenge), + auth_data->bss->bssid, auth_data->bss->bssid, + auth_data->key, auth_data->key_len, + auth_data->key_idx, tx_flags); +@@ -3223,7 +3224,7 @@ static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata, + + pos = mgmt->u.assoc_resp.variable; + ieee802_11_parse_elems(pos, len - (pos - (u8 *)mgmt), false, &elems, +- mgmt->bssid, assoc_data->bss->bssid); ++ mgmt->bssid, NULL); + + if (!elems.supp_rates) { + sdata_info(sdata, "no SuppRates element in AssocResp\n"); +@@ -3298,6 +3299,7 @@ static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata, + sdata_info(sdata, + "AP bug: VHT operation missing from AssocResp\n"); + } ++ kfree(bss_elems.nontx_profile); + } + + /* +@@ -3575,7 +3577,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata, + + pos = mgmt->u.assoc_resp.variable; + ieee802_11_parse_elems(pos, len - (pos - (u8 *)mgmt), false, &elems, +- mgmt->bssid, assoc_data->bss->bssid); ++ mgmt->bssid, NULL); + + if (status_code == WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY && + elems.timeout_int && +@@ -3882,6 +3884,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, + ifmgd->assoc_data->timeout = jiffies; + ifmgd->assoc_data->timeout_started = true; + run_again(sdata, ifmgd->assoc_data->timeout); ++ kfree(elems.nontx_profile); + return; + } + +@@ -4049,7 +4052,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, + ieee80211_report_disconnect(sdata, deauth_buf, + sizeof(deauth_buf), true, + WLAN_REASON_DEAUTH_LEAVING); +- return; ++ goto free; + } + + if (sta && elems.opmode_notif) +@@ -4064,6 +4067,8 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata, + elems.cisco_dtpc_elem); + + ieee80211_bss_info_change_notify(sdata, changed); ++free: ++ kfree(elems.nontx_profile); + } + + void ieee80211_sta_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, +diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c +index c353162e81aea..ee65f1f50a0ab 100644 +--- a/net/mac80211/scan.c ++++ b/net/mac80211/scan.c +@@ -216,6 +216,8 @@ ieee80211_bss_info_update(struct ieee80211_local *local, + rx_status, beacon); + } + ++ kfree(elems.nontx_profile); ++ + return bss; + } + +diff --git a/net/mac80211/util.c b/net/mac80211/util.c +index a529861256e62..6223af1c3457a 100644 +--- a/net/mac80211/util.c ++++ b/net/mac80211/util.c +@@ -1006,10 +1006,6 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action, + } else + elem_parse_failed = true; + break; +- case WLAN_EID_CHALLENGE: +- elems->challenge = pos; +- elems->challenge_len = elen; +- break; + case WLAN_EID_VENDOR_SPECIFIC: + if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 && + pos[2] == 0xf2) { +@@ -1367,6 +1363,11 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action, + cfg80211_find_ext_elem(WLAN_EID_EXT_NON_INHERITANCE, + nontransmitted_profile, + nontransmitted_profile_len); ++ if (!nontransmitted_profile_len) { ++ nontransmitted_profile_len = 0; ++ kfree(nontransmitted_profile); ++ nontransmitted_profile = NULL; ++ } + } + + crc = _ieee802_11_parse_elems_crc(start, len, action, elems, filter, +@@ -1396,7 +1397,7 @@ u32 ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action, + offsetofend(struct ieee80211_bssid_index, dtim_count)) + elems->dtim_count = elems->bssid_index->dtim_count; + +- kfree(nontransmitted_profile); ++ elems->nontx_profile = nontransmitted_profile; + + return crc; + } |