wok-current annotate broadcom-wl/stuff/005-debian-fix-kernel-warnings.patch @ rev 25725

Patch openssh CVE-2024-6387
author Stanislas Leduc <shann@slitaz.org>
date Mon Jul 01 15:09:44 2024 +0000 (4 weeks ago)
parents
children
rev   line source
shann@25643 1 --- a/src/wl/sys/wl_cfg80211_hybrid.c
shann@25643 2 +++ b/src/wl/sys/wl_cfg80211_hybrid.c
shann@25643 3 @@ -1968,7 +1968,7 @@
shann@25643 4
shann@25643 5 if (dtoh32(bi->length) > WL_BSS_INFO_MAX) {
shann@25643 6 WL_DBG(("Beacon is larger than buffer. Discarding\n"));
shann@25643 7 - return err;
shann@25643 8 + return -E2BIG;
shann@25643 9 }
shann@25643 10 notif_bss_info = kzalloc(sizeof(*notif_bss_info) + sizeof(*mgmt) - sizeof(u8) +
shann@25643 11 WL_BSS_INFO_MAX, GFP_KERNEL);
shann@25643 12 @@ -1992,9 +1992,15 @@
shann@25643 13 beacon_proberesp->capab_info = cpu_to_le16(bi->capability);
shann@25643 14 wl_rst_ie(wl);
shann@25643 15
shann@25643 16 - wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length);
shann@25643 17 - wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX -
shann@25643 18 + err = wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length);
shann@25643 19 + if (err)
shann@25643 20 + goto inform_single_bss_out;
shann@25643 21 +
shann@25643 22 + err = wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX -
shann@25643 23 offsetof(struct wl_cfg80211_bss_info, frame_buf));
shann@25643 24 + if (err)
shann@25643 25 + goto inform_single_bss_out;
shann@25643 26 +
shann@25643 27 notif_bss_info->frame_len = offsetof(struct ieee80211_mgmt, u.beacon.variable) +
shann@25643 28 wl_get_ielen(wl);
shann@25643 29 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)
shann@25643 30 @@ -2006,14 +2012,14 @@
shann@25643 31 #endif
shann@25643 32 if (freq == 0) {
shann@25643 33 WL_ERR(("Invalid channel, fail to chcnage channel to freq\n"));
shann@25643 34 - kfree(notif_bss_info);
shann@25643 35 - return -EINVAL;
shann@25643 36 + err = -EINVAL;
shann@25643 37 + goto inform_single_bss_out;
shann@25643 38 }
shann@25643 39 channel = ieee80211_get_channel(wiphy, freq);
shann@25643 40 if (unlikely(!channel)) {
shann@25643 41 WL_ERR(("ieee80211_get_channel error\n"));
shann@25643 42 - kfree(notif_bss_info);
shann@25643 43 - return -EINVAL;
shann@25643 44 + err = -EINVAL;
shann@25643 45 + goto inform_single_bss_out;
shann@25643 46 }
shann@25643 47
shann@25643 48 WL_DBG(("SSID : \"%s\", rssi %d, channel %d, capability : 0x04%x, bssid %pM\n",
shann@25643 49 @@ -2021,28 +2027,37 @@
shann@25643 50 mgmt->u.beacon.capab_info, &bi->BSSID));
shann@25643 51
shann@25643 52 signal = notif_bss_info->rssi * 100;
shann@25643 53 - cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt,
shann@25643 54 - le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL);
shann@25643 55 - if (unlikely(!cbss)) {
shann@25643 56 - WL_ERR(("cfg80211_inform_bss_frame error\n"));
shann@25643 57 - kfree(notif_bss_info);
shann@25643 58 - return -EINVAL;
shann@25643 59 - }
shann@25643 60
shann@25643 61 - notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
shann@25643 62 - notify_ielen = le32_to_cpu(bi->ie_length);
shann@25643 63 + if (!wl->scan_request) {
shann@25643 64 + cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt,
shann@25643 65 + le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL);
shann@25643 66 + if (unlikely(!cbss)) {
shann@25643 67 + WL_ERR(("cfg80211_inform_bss_frame error\n"));
shann@25643 68 + err = -ENOMEM;
shann@25643 69 + goto inform_single_bss_out;
shann@25643 70 + }
shann@25643 71 + } else {
shann@25643 72 + notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
shann@25643 73 + notify_ielen = le32_to_cpu(bi->ie_length);
shann@25643 74 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0)
shann@25643 75 - cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet),
shann@25643 76 - 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
shann@25643 77 - (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
shann@25643 78 + cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet),
shann@25643 79 + 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
shann@25643 80 + (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
shann@25643 81 #else
shann@25643 82 - cbss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN, (const u8 *)(bi->BSSID.octet),
shann@25643 83 - 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
shann@25643 84 - (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
shann@25643 85 + cbss = cfg80211_inform_bss(wiphy, channel,
shann@25643 86 + wl->active_scan ?
shann@25643 87 + CFG80211_BSS_FTYPE_PRESP : CFG80211_BSS_FTYPE_BEACON,
shann@25643 88 + (const u8 *)(bi->BSSID.octet), 0,
shann@25643 89 + beacon_proberesp->capab_info,
shann@25643 90 + beacon_proberesp->beacon_int,
shann@25643 91 + (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
shann@25643 92 #endif
shann@25643 93 -
shann@25643 94 - if (unlikely(!cbss))
shann@25643 95 - return -ENOMEM;
shann@25643 96 + if (unlikely(!cbss)) {
shann@25643 97 + WL_ERR(("cfg80211_inform_bss error\n"));
shann@25643 98 + err = -ENOMEM;
shann@25643 99 + goto inform_single_bss_out;
shann@25643 100 + }
shann@25643 101 + }
shann@25643 102
shann@25643 103 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
shann@25643 104 cfg80211_put_bss(wiphy, cbss);
shann@25643 105 @@ -2050,6 +2065,7 @@
shann@25643 106 cfg80211_put_bss(cbss);
shann@25643 107 #endif
shann@25643 108
shann@25643 109 +inform_single_bss_out:
shann@25643 110 kfree(notif_bss_info);
shann@25643 111
shann@25643 112 return err;
shann@25643 113 @@ -2316,6 +2332,9 @@
shann@25643 114 if (err)
shann@25643 115 goto update_bss_info_out;
shann@25643 116
shann@25643 117 + bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid,
shann@25643 118 + ssid->SSID, ssid->SSID_len, WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
shann@25643 119 +
shann@25643 120 ie = ((u8 *)bi) + bi->ie_offset;
shann@25643 121 ie_len = bi->ie_length;
shann@25643 122 } else {
shann@25643 123 @@ -2328,11 +2347,18 @@
shann@25643 124 ie_len = bss->len_information_elements;
shann@25643 125 #endif
shann@25643 126 wl->conf->channel = *bss->channel;
shann@25643 127 + }
shann@25643 128 +
shann@25643 129 + if (bss) {
shann@25643 130 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
shann@25643 131 cfg80211_put_bss(wiphy, bss);
shann@25643 132 #else
shann@25643 133 cfg80211_put_bss(bss);
shann@25643 134 #endif
shann@25643 135 + } else {
shann@25643 136 + WL_DBG(("Could not update BSS\n"));
shann@25643 137 + err = -EINVAL;
shann@25643 138 + goto update_bss_info_out;
shann@25643 139 }
shann@25643 140
shann@25643 141 tim = bcm_parse_tlvs(ie, ie_len, WLAN_EID_TIM);
shann@25643 142 @@ -2360,10 +2386,17 @@
shann@25643 143 struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl);
shann@25643 144 s32 err = 0;
shann@25643 145
shann@25643 146 - wl_get_assoc_ies(wl);
shann@25643 147 + err = wl_get_assoc_ies(wl);
shann@25643 148 + if (err)
shann@25643 149 + return err;
shann@25643 150 +
shann@25643 151 memcpy(wl->profile->bssid, &e->addr, ETHER_ADDR_LEN);
shann@25643 152 memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN);
shann@25643 153 - wl_update_bss_info(wl);
shann@25643 154 +
shann@25643 155 + err = wl_update_bss_info(wl);
shann@25643 156 + if (err)
shann@25643 157 + return err;
shann@25643 158 +
shann@25643 159 cfg80211_roamed(ndev,
shann@25643 160 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
shann@25643 161 &wl->conf->channel,