commit 6ecf276e72441150a084b7ba26c90b0a8c943826
Author: Nicolas Viéville <nicolas.vieville(a)univ-valenciennes.fr>
Date: Wed Feb 8 22:13:37 2017 +0100
Add patch to fix kernel warnings - thanks to Adrien Bustany rfbz#4427
Updated URLs to new Broadcom WEB site
wl-kmod-008_fix_kernel_warnings.patch | 165 ++++++++++++++++++++++++++++++++++
wl-kmod.spec | 14 ++-
2 files changed, 175 insertions(+), 4 deletions(-)
---
diff --git a/wl-kmod-008_fix_kernel_warnings.patch
b/wl-kmod-008_fix_kernel_warnings.patch
new file mode 100644
index 0000000..86b4af2
--- /dev/null
+++ b/wl-kmod-008_fix_kernel_warnings.patch
@@ -0,0 +1,165 @@
+diff -Naur hybrid-v35_64-nodebug-pcoem-6_30_223_271.orig/src/wl/sys/wl_cfg80211_hybrid.c
hybrid-v35_64-nodebug-pcoem-6_30_223_271/src/wl/sys/wl_cfg80211_hybrid.c
+---
hybrid-v35_64-nodebug-pcoem-6_30_223_271.orig/src/wl/sys/wl_cfg80211_hybrid.c 2016-09-07
22:54:53.550730661 +0200
++++ hybrid-v35_64-nodebug-pcoem-6_30_223_271/src/wl/sys/wl_cfg80211_hybrid.c 2017-02-08
19:35:44.320100235 +0100
+@@ -2005,7 +2005,7 @@
+
+ if (dtoh32(bi->length) > WL_BSS_INFO_MAX) {
+ WL_DBG(("Beacon is larger than buffer. Discarding\n"));
+- return err;
++ return -E2BIG;
+ }
+ notif_bss_info = kzalloc(sizeof(*notif_bss_info) + sizeof(*mgmt) - sizeof(u8) +
+ WL_BSS_INFO_MAX, GFP_KERNEL);
+@@ -2029,9 +2029,15 @@
+ beacon_proberesp->capab_info = cpu_to_le16(bi->capability);
+ wl_rst_ie(wl);
+
+- wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length);
+- wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX -
+- offsetof(struct wl_cfg80211_bss_info, frame_buf));
++ err = wl_mrg_ie(wl, ((u8 *) bi) + bi->ie_offset, bi->ie_length);
++ if (err)
++ goto inform_single_bss_out;
++
++ err = wl_cp_ie(wl, beacon_proberesp->variable, WL_BSS_INFO_MAX -
++ offsetof(struct wl_cfg80211_bss_info, frame_buf));
++ if (err)
++ goto inform_single_bss_out;
++
+ notif_bss_info->frame_len = offsetof(struct ieee80211_mgmt, u.beacon.variable) +
+ wl_get_ielen(wl);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)
+@@ -2047,14 +2053,14 @@
+ #endif
+ if (freq == 0) {
+ WL_ERR(("Invalid channel, fail to chcnage channel to freq\n"));
+- kfree(notif_bss_info);
+- return -EINVAL;
++ err = -EINVAL;
++ goto inform_single_bss_out;
+ }
+ channel = ieee80211_get_channel(wiphy, freq);
+ if (unlikely(!channel)) {
+ WL_ERR(("ieee80211_get_channel error\n"));
+- kfree(notif_bss_info);
+- return -EINVAL;
++ err = -EINVAL;
++ goto inform_single_bss_out;
+ }
+
+ WL_DBG(("SSID : \"%s\", rssi %d, channel %d, capability : 0x04%x, bssid
%pM\n",
+@@ -2062,28 +2068,35 @@
+ mgmt->u.beacon.capab_info, &bi->BSSID));
+
+ signal = notif_bss_info->rssi * 100;
+- cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt,
+- le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL);
+- if (unlikely(!cbss)) {
+- WL_ERR(("cfg80211_inform_bss_frame error\n"));
+- kfree(notif_bss_info);
+- return -EINVAL;
++ if (!wl->scan_request) {
++ cbss = cfg80211_inform_bss_frame(wiphy, channel, mgmt,
++ le16_to_cpu(notif_bss_info->frame_len), signal, GFP_KERNEL);
++ if (unlikely(!cbss)) {
++ WL_ERR(("cfg80211_inform_bss_frame error\n"));
++ err = -ENOMEM;
++ goto inform_single_bss_out;
++ }
+ }
+-
+- notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
+- notify_ielen = le32_to_cpu(bi->ie_length);
++ else {
++ notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
++ notify_ielen = le32_to_cpu(bi->ie_length);
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0)
+- cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet),
+- 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
+- (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
+-#else
+- cbss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN, (const u8
*)(bi->BSSID.octet),
+- 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
+- (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
+-#endif
+-
+- if (unlikely(!cbss))
+- return -ENOMEM;
++ cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet),
++ 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
++ (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
++#else
++ cbss = cfg80211_inform_bss(wiphy, channel,
++ wl->active_scan ? CFG80211_BSS_FTYPE_PRESP : CFG80211_BSS_FTYPE_BEACON,
++ (const u8 *)(bi->BSSID.octet),
++ 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
++ (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
++#endif
++ if (unlikely(!cbss)) {
++ WL_ERR(("cfg80211_inform_bss error\n"));
++ err = -ENOMEM;
++ goto inform_single_bss_out;
++ }
++ }
+
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
+ cfg80211_put_bss(wiphy, cbss);
+@@ -2091,6 +2104,7 @@
+ cfg80211_put_bss(cbss);
+ #endif
+
++inform_single_bss_out:
+ kfree(notif_bss_info);
+
+ return err;
+@@ -2369,6 +2383,9 @@
+ if (err)
+ goto update_bss_info_out;
+
++ bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid,
++ ssid->SSID, ssid->SSID_len, WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
++
+ ie = ((u8 *)bi) + bi->ie_offset;
+ ie_len = bi->ie_length;
+ } else {
+@@ -2381,12 +2398,20 @@
+ ie_len = bss->len_information_elements;
+ #endif
+ wl->conf->channel = *bss->channel;
++ }
++
++ if (bss) {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
+ cfg80211_put_bss(wiphy, bss);
+ #else
+ cfg80211_put_bss(bss);
+ #endif
+ }
++ else {
++ WL_DBG(("Could not update BSS\n"));
++ err = -EINVAL;
++ goto update_bss_info_out;
++ }
+
+ tim = bcm_parse_tlvs(ie, ie_len, WLAN_EID_TIM);
+ if (tim) {
+@@ -2413,10 +2438,17 @@
+ struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl);
+ s32 err = 0;
+
+- wl_get_assoc_ies(wl);
++ err = wl_get_assoc_ies(wl);
++ if (err)
++ return err;
++
+ memcpy(wl->profile->bssid, &e->addr, ETHER_ADDR_LEN);
+ memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN);
+- wl_update_bss_info(wl);
++
++ err = wl_update_bss_info(wl);
++ if (err)
++ return err;
++
+ cfg80211_roamed(ndev,
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
+ &wl->conf->channel,
diff --git a/wl-kmod.spec b/wl-kmod.spec
index c733a55..f7150a1 100644
--- a/wl-kmod.spec
+++ b/wl-kmod.spec
@@ -8,13 +8,13 @@
Name: wl-kmod
Version: 6.30.223.271
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: Kernel module for Broadcom wireless devices
Group: System Environment/Kernel
License: Redistributable, no modification permitted
-URL:
https://www.broadcom.com/support/?gid=1
-Source0:
https://www.broadcom.com/docs/linux_sta/hybrid-v35-nodebug-pcoem-6_30_223...
-Source1:
https://www.broadcom.com/docs/linux_sta/hybrid-v35_64-nodebug-pcoem-6_30_...
+URL:
https://www.broadcom.com/support/download-search/?pf=Wireless+LAN+Infrast...
+Source0:
https://docs.broadcom.com/docs-and-downloads/docs/linux_sta/hybrid-v35-no...
+Source1:
https://docs.broadcom.com/docs-and-downloads/docs/linux_sta/hybrid-v35_64...
Source11: wl-kmod-kmodtool-excludekernel-filterfile
Patch0: wl-kmod-001_wext_workaround.patch
Patch1: wl-kmod-002_kernel_3.18_null_pointer.patch
@@ -23,6 +23,7 @@ Patch3: wl-kmod-004_kernel_4.3_rdtscl_to_rdtsc.patch
Patch4: wl-kmod-005_kernel_4.7_IEEE80211_BAND_to_NL80211_BAND.patch
Patch5: wl-kmod-006_gcc_6_fix_indentation_warnings.patch
Patch6: wl-kmod-007_kernel_4.8_add_cfg80211_scan_info_struct.patch
+Patch7: wl-kmod-008_fix_kernel_warnings.patch
BuildRequires: %{_bindir}/kmodtool
@@ -68,6 +69,7 @@ pushd %{name}-%{version}-src
%patch4 -p1 -b .kernel_4.7_IEEE80211_BAND_to_NL80211_BAND
%patch5 -p1 -b .gcc_6_fix_indentation_warnings
%patch6 -p1 -b .kernel_4.8_add_cfg80211_scan_info_struct
+%patch7 -p1 -b .fix_kernel_warnings
popd
for kernel_version in %{?kernel_versions} ; do
@@ -97,6 +99,10 @@ chmod 0755
$RPM_BUILD_ROOT%{kmodinstdir_prefix}*%{kmodinstdir_postfix}/* || :
rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Feb 08 2017 Nicolas Viéville <nicolas.vieville(a)univ-valenciennes.fr> -
6.30.223.271-8
+- Add patch to fix kernel warnings - thanks to Adrien Bustany rfbz#4427
+- Updated URLs to new Broadcom WEB site
+
* Wed Sep 07 2016 Nicolas Viéville <nicolas.vieville(a)univ-valenciennes.fr> -
6.30.223.271-7
- Add patch for kernel >= 4.8 - add cfg80211_scan_info struct in cfg80211_scan_done
call