The removed patches are all integrated in the upstream version now.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
PKG_NAME:=mac80211
-PKG_VERSION:=4.19.98-1
+PKG_VERSION:=4.19.112-1
PKG_RELEASE:=1
-PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.98/
-PKG_HASH:=256d77e9cd3918d6a361e029850aba4568e8a00167ab3ed55495a359511c5bd2
+PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.112/
+PKG_HASH:=e60a7aec902638c538b150d0d6165d866eb804845b97d7770acd653fd6a6b718
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
-@@ -3027,6 +3027,8 @@ void regulatory_hint_country_ie(struct w
+@@ -3034,6 +3034,8 @@ void regulatory_hint_country_ie(struct w
enum environment_cap env = ENVIRON_ANY;
struct regulatory_request *request = NULL, *lr;
/* IE len must be evenly divisible by 2 */
if (country_ie_len & 0x01)
return;
-@@ -3252,6 +3254,7 @@ static bool is_wiphy_all_set_reg_flag(en
+@@ -3259,6 +3261,7 @@ static bool is_wiphy_all_set_reg_flag(en
void regulatory_hint_disconnect(void)
{
- an->ackto = ackto;
+ an->ackto = da->ackto;
- spin_lock(&da->qlock);
+ spin_lock_bh(&da->qlock);
list_add_tail(&an->list, &da->nodes);
@@ -356,20 +354,26 @@ EXPORT_SYMBOL(ath_dynack_node_deinit);
*/
num = 0;
/* Validate all the subframe headers */
-@@ -3422,7 +3421,6 @@ static int brcmf_sdio_bus_preinit(struct
+@@ -3426,7 +3425,6 @@ static int brcmf_sdio_bus_preinit(struct
struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
struct brcmf_sdio *bus = sdiodev->bus;
struct brcmf_core *core = bus->sdio_core;
u32 value;
int err;
-@@ -3465,7 +3463,6 @@ static int brcmf_sdio_bus_preinit(struct
+@@ -3467,7 +3465,6 @@ static int brcmf_sdio_bus_preinit(struct
if (sdiodev->sg_support) {
bus->txglom = false;
value = 1;
fwreq->bus_nr = devinfo->pdev->bus->number;
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4210,6 +4210,7 @@ brcmf_sdio_prepare_fw_request(struct brc
+@@ -4213,6 +4213,7 @@ brcmf_sdio_prepare_fw_request(struct brc
fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -972,6 +972,7 @@ static const struct sdio_device_id brcmf
+@@ -970,6 +970,7 @@ static const struct sdio_device_id brcmf
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4354),
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_4356),
BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_4373),
if (on) {
/* device WAKEUP through KSO:
* write bit 0 & read back until
-@@ -2413,6 +2423,14 @@ static int brcmf_sdio_tx_ctrlframe(struc
+@@ -2414,6 +2424,14 @@ static int brcmf_sdio_tx_ctrlframe(struc
return ret;
}
static void brcmf_sdio_bus_stop(struct device *dev)
{
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
-@@ -2420,7 +2438,7 @@ static void brcmf_sdio_bus_stop(struct d
+@@ -2421,7 +2439,7 @@ static void brcmf_sdio_bus_stop(struct d
struct brcmf_sdio *bus = sdiodev->bus;
struct brcmf_core *core = bus->sdio_core;
u32 local_hostintmask;
int err;
brcmf_dbg(TRACE, "Enter\n");
-@@ -2447,9 +2465,14 @@ static void brcmf_sdio_bus_stop(struct d
+@@ -2448,9 +2466,14 @@ static void brcmf_sdio_bus_stop(struct d
/* Force backplane clocks to assure F2 interrupt propagates */
saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
&err);
if (err)
brcmf_err("Failed to force clock for F2: err %d\n",
err);
-@@ -3339,20 +3362,45 @@ err:
+@@ -3343,20 +3366,45 @@ err:
return bcmerror;
}
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
if (err) {
brcmf_err("error writing SBSDIO_FUNC1_WAKEUPCTRL\n");
-@@ -3361,8 +3409,7 @@ static void brcmf_sdio_sr_init(struct br
+@@ -3365,8 +3413,7 @@ static void brcmf_sdio_sr_init(struct br
/* Add CMD14 Support */
brcmf_sdiod_func0_wb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
&err);
if (err) {
brcmf_err("error writing SDIO_CCCR_BRCM_CARDCAP\n");
-@@ -3370,7 +3417,7 @@ static void brcmf_sdio_sr_init(struct br
+@@ -3374,7 +3421,7 @@ static void brcmf_sdio_sr_init(struct br
}
brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
if (err) {
brcmf_err("error writing SBSDIO_FUNC1_CHIPCLKCSR\n");
return;
-@@ -4062,7 +4109,7 @@ static void brcmf_sdio_firmware_callback
+@@ -4065,7 +4112,7 @@ static void brcmf_sdio_firmware_callback
const struct firmware *code;
void *nvram;
u32 nvram_len;
u8 devctl;
brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
-@@ -4096,8 +4143,11 @@ static void brcmf_sdio_firmware_callback
+@@ -4099,8 +4146,11 @@ static void brcmf_sdio_firmware_callback
/* Force clocks on backplane to be sure F2 interrupt propagates */
saveclk = brcmf_sdiod_readb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR, &err);
if (!err) {
#ifdef DEBUG
-@@ -4184,6 +4185,17 @@ static void brcmf_sdio_firmware_callback
+@@ -4187,6 +4188,17 @@ static void brcmf_sdio_firmware_callback
CY_4373_F2_WATERMARK |
SBSDIO_MESBUSYCTRL_ENAB, &err);
break;
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3365,7 +3365,11 @@ err:
+@@ -3369,7 +3369,11 @@ err:
static bool brcmf_sdio_aos_no_decode(struct brcmf_sdio *bus)
{
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1557,6 +1557,10 @@ void brcmf_usb_exit(void)
+@@ -1558,6 +1558,10 @@ void brcmf_usb_exit(void)
void brcmf_usb_register(void)
{
* @ifidx: interface index.
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -508,7 +508,7 @@ static void brcmf_usb_rx_complete(struct
+@@ -509,7 +509,7 @@ static void brcmf_usb_rx_complete(struct
skb = req->skb;
req->skb = NULL;
+++ /dev/null
-From aaf6a5e86e36766abbeedf220462bde8031f9a72 Mon Sep 17 00:00:00 2001
-From: Arend van Spriel <arend.vanspriel@broadcom.com>
-Date: Thu, 14 Feb 2019 13:43:49 +0100
-Subject: [PATCH] brcmfmac: create debugfs files for bus-specific layer
-
-Since we moved the drivers debugfs directory under ieee80211 debugfs the
-debugfs entries need to be added after wiphy_register() has been called.
-For most part that has been done accordingly, but for the debugfs entries
-added by SDIO it was not and failed silently. This patch fixes that by
-adding a bus-layer callback for it.
-
-Fixes: 856d5a011c86 ("brcmfmac: allocate struct brcmf_pub instance using wiphy_new()")
-Reported-by: Russel King <linux@armlinux.org.uk>
-Reviewed-by: Franky Lin <franky.lin@broadcom.com>
-Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 10 ++++++++++
- .../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 1 +
- .../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 12 +++++++-----
- 3 files changed, 18 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-@@ -90,6 +90,7 @@ struct brcmf_bus_ops {
- int (*get_memdump)(struct device *dev, void *data, size_t len);
- int (*get_fwname)(struct device *dev, const char *ext,
- unsigned char *fw_name);
-+ void (*debugfs_create)(struct device *dev);
- };
-
-
-@@ -235,6 +236,15 @@ int brcmf_bus_get_fwname(struct brcmf_bu
- return bus->ops->get_fwname(bus->dev, ext, fw_name);
- }
-
-+static inline
-+void brcmf_bus_debugfs_create(struct brcmf_bus *bus)
-+{
-+ if (!bus->ops->debugfs_create)
-+ return;
-+
-+ return bus->ops->debugfs_create(bus->dev);
-+}
-+
- /*
- * interface functions from common layer
- */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1181,6 +1181,7 @@ static int brcmf_bus_started(struct brcm
- brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
- brcmf_feat_debugfs_create(drvr);
- brcmf_proto_debugfs_create(drvr);
-+ brcmf_bus_debugfs_create(bus_if);
-
- return 0;
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3154,9 +3154,12 @@ static int brcmf_debugfs_sdio_count_read
- return 0;
- }
-
--static void brcmf_sdio_debugfs_create(struct brcmf_sdio *bus)
-+static void brcmf_sdio_debugfs_create(struct device *dev)
- {
-- struct brcmf_pub *drvr = bus->sdiodev->bus_if->drvr;
-+ struct brcmf_bus *bus_if = dev_get_drvdata(dev);
-+ struct brcmf_pub *drvr = bus_if->drvr;
-+ struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
-+ struct brcmf_sdio *bus = sdiodev->bus;
- struct dentry *dentry = brcmf_debugfs_get_devdir(drvr);
-
- if (IS_ERR_OR_NULL(dentry))
-@@ -3176,7 +3179,7 @@ static int brcmf_sdio_checkdied(struct b
- return 0;
- }
-
--static void brcmf_sdio_debugfs_create(struct brcmf_sdio *bus)
-+static void brcmf_sdio_debugfs_create(struct device *dev)
- {
- }
- #endif /* DEBUG */
-@@ -3488,8 +3491,6 @@ static int brcmf_sdio_bus_preinit(struct
- if (bus->rxbuf)
- bus->rxblen = value;
-
-- brcmf_sdio_debugfs_create(bus);
--
- /* the commands below use the terms tx and rx from
- * a device perspective, ie. bus:txglom affects the
- * bus transfers from device to host.
-@@ -4099,6 +4100,7 @@ static const struct brcmf_bus_ops brcmf_
- .get_ramsize = brcmf_sdio_bus_get_ramsize,
- .get_memdump = brcmf_sdio_bus_get_memdump,
- .get_fwname = brcmf_sdio_get_fwname,
-+ .debugfs_create = brcmf_sdio_debugfs_create
- };
-
- #define BRCMF_SDIO_FW_CODE 0
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3010,21 +3010,35 @@ static int brcmf_sdio_trap_info(struct s
+@@ -3011,21 +3011,35 @@ static int brcmf_sdio_trap_info(struct s
if (error < 0)
return error;
return 0;
}
-@@ -3078,8 +3092,10 @@ static int brcmf_sdio_checkdied(struct b
+@@ -3079,8 +3093,10 @@ static int brcmf_sdio_checkdied(struct b
else if (sh.flags & SDPCM_SHARED_ASSERT)
brcmf_err("assertion in dongle\n");
return 0;
}
-@@ -4210,7 +4226,7 @@ static void brcmf_sdio_firmware_callback
+@@ -4211,7 +4227,7 @@ static void brcmf_sdio_firmware_callback
} else {
/* Disable F2 again */
sdio_disable_func(sdiod->func2);
}
if (brcmf_chip_sr_capable(bus->ci)) {
-@@ -4231,8 +4247,10 @@ static void brcmf_sdio_firmware_callback
+@@ -4232,8 +4248,10 @@ static void brcmf_sdio_firmware_callback
}
/* If we didn't come up, turn off backplane clock */
sdio_release_host(sdiod->func1);
-@@ -4246,12 +4264,15 @@ static void brcmf_sdio_firmware_callback
+@@ -4247,12 +4265,15 @@ static void brcmf_sdio_firmware_callback
err = brcmf_attach(sdiod->dev, sdiod->settings);
if (err != 0) {
brcmf_err("brcmf_attach failed\n");
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -575,7 +575,6 @@ static void
+@@ -576,7 +576,6 @@ static void
brcmf_usb_state_change(struct brcmf_usbdev_info *devinfo, int state)
{
struct brcmf_bus *bcmf_bus = devinfo->bus_pub.bus;
brcmf_dbg(USB, "Enter, current state=%d, new state=%d\n",
devinfo->bus_pub.state, state);
-@@ -583,7 +582,6 @@ brcmf_usb_state_change(struct brcmf_usbd
+@@ -584,7 +583,6 @@ brcmf_usb_state_change(struct brcmf_usbd
if (devinfo->bus_pub.state == state)
return;
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -445,9 +445,10 @@ fail:
+@@ -446,9 +446,10 @@ fail:
}
int i = 0;
list_for_each_entry_safe(req, next, q, list) {
if (!req->urb) {
-@@ -455,12 +456,8 @@ static void brcmf_usb_free_q(struct list
+@@ -456,12 +457,8 @@ static void brcmf_usb_free_q(struct list
break;
}
i++;
}
}
-@@ -1029,8 +1026,8 @@ static void brcmf_usb_detach(struct brcm
+@@ -1030,8 +1027,8 @@ static void brcmf_usb_detach(struct brcm
brcmf_dbg(USB, "Enter, devinfo %p\n", devinfo);
/* free the URBS */
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -449,13 +449,11 @@ static void brcmf_usb_free_q(struct list
+@@ -450,13 +450,11 @@ static void brcmf_usb_free_q(struct list
{
struct brcmf_usbreq *req, *next;
+++ /dev/null
-From a927e8d8ab57e696800e20cf09a72b7dfe3bbebb Mon Sep 17 00:00:00 2001
-From: Colin Ian King <colin.king@canonical.com>
-Date: Tue, 9 Apr 2019 12:43:33 +0100
-Subject: [PATCH] brcmfmac: fix leak of mypkt on error return path
-
-Currently if the call to brcmf_sdiod_set_backplane_window fails then
-error return path leaks mypkt. Fix this by returning by a new
-error path labelled 'out' that calls brcmu_pkt_buf_free_skb to free
-mypkt. Also remove redundant check on err before calling
-brcmf_sdiod_skbuff_write.
-
-Addresses-Coverity: ("Resource Leak")
-Fixes: a7c3aa1509e2 ("brcmfmac: Remove brcmf_sdiod_addrprep()")
-Signed-off-by: Colin Ian King <colin.king@canonical.com>
-Reviewed-by: Mukesh Ojha <mojha@codeaurora.org>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 8 +++-----
- 1 file changed, 3 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -617,15 +617,13 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
-
- err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
- if (err)
-- return err;
-+ goto out;
-
- addr &= SBSDIO_SB_OFT_ADDR_MASK;
- addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
-
-- if (!err)
-- err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2, addr,
-- mypkt);
--
-+ err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2, addr, mypkt);
-+out:
- brcmu_pkt_buf_free_skb(mypkt);
-
- return err;
kfree(bus->msgbuf->flowrings);
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4251,17 +4251,26 @@ static void brcmf_sdio_firmware_callback
+@@ -4252,17 +4252,26 @@ static void brcmf_sdio_firmware_callback
sdiod->bus_if->chip = bus->ci->chip;
sdiod->bus_if->chiprev = bus->ci->chiprev;
release:
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1178,8 +1178,12 @@ static void brcmf_usb_probe_phase2(struc
+@@ -1179,8 +1179,12 @@ static void brcmf_usb_probe_phase2(struc
if (ret)
goto error;
if (ret)
goto error;
-@@ -1251,7 +1255,10 @@ static int brcmf_usb_probe_cb(struct brc
+@@ -1252,7 +1256,10 @@ static int brcmf_usb_probe_cb(struct brc
}
if (!brcmf_usb_dlneeded(devinfo)) {
if (ret)
goto fail;
/* we are done */
-@@ -1279,6 +1286,7 @@ static int brcmf_usb_probe_cb(struct brc
+@@ -1280,6 +1287,7 @@ static int brcmf_usb_probe_cb(struct brc
fail:
/* Release resources in reverse order */
kfree(bus);
brcmf_usb_detach(devinfo);
return ret;
-@@ -1292,6 +1300,7 @@ brcmf_usb_disconnect_cb(struct brcmf_usb
+@@ -1293,6 +1301,7 @@ brcmf_usb_disconnect_cb(struct brcmf_usb
brcmf_dbg(USB, "Enter, bus_pub %p\n", devinfo);
brcmf_detach(devinfo->dev);
kfree(devinfo->bus_pub.bus);
brcmf_usb_detach(devinfo);
}
-@@ -1435,10 +1444,12 @@ static int brcmf_usb_suspend(struct usb_
+@@ -1436,10 +1445,12 @@ static int brcmf_usb_suspend(struct usb_
brcmf_dbg(USB, "Enter\n");
devinfo->bus_pub.state = BRCMFMAC_USB_STATE_SLEEP;
return 0;
}
-@@ -1451,8 +1462,19 @@ static int brcmf_usb_resume(struct usb_i
+@@ -1452,8 +1463,19 @@ static int brcmf_usb_resume(struct usb_i
struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
brcmf_dbg(USB, "Enter\n");
+++ /dev/null
-From 216b44000ada87a63891a8214c347e05a4aea8fe Mon Sep 17 00:00:00 2001
-From: Dan Carpenter <dan.carpenter@oracle.com>
-Date: Tue, 3 Dec 2019 12:58:55 +0300
-Subject: [PATCH] brcmfmac: Fix use after free in brcmf_sdio_readframes()
-
-The brcmu_pkt_buf_free_skb() function frees "pkt" so it leads to a
-static checker warning:
-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:1974 brcmf_sdio_readframes()
- error: dereferencing freed memory 'pkt'
-
-It looks like there was supposed to be a continue after we free "pkt".
-
-Fixes: 4754fceeb9a6 ("brcmfmac: streamline SDIO read frame routine")
-Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
-Acked-by: Franky Lin <franky.lin@broadcom.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -1935,6 +1935,7 @@ static uint brcmf_sdio_readframes(struct
- BRCMF_SDIO_FT_NORMAL)) {
- rd->len = 0;
- brcmu_pkt_buf_free_skb(pkt);
-+ continue;
- }
- bus->sdcnt.rx_readahead_cnt++;
- if (rd->len != roundup(rd_new.len, 16)) {
+++ /dev/null
-From 3428fbcd6e6c0850b1a8b2a12082b7b2aabb3da3 Mon Sep 17 00:00:00 2001
-From: Johan Hovold <johan@kernel.org>
-Date: Tue, 10 Dec 2019 12:44:22 +0100
-Subject: [PATCH] brcmfmac: fix interface sanity check
-
-Make sure to use the current alternate setting when verifying the
-interface descriptors to avoid binding to an invalid interface.
-
-Failing to do so could cause the driver to misbehave or trigger a WARN()
-in usb_submit_urb() that kernels with panic_on_warn set would choke on.
-
-Fixes: 71bb244ba2fd ("brcm80211: fmac: add USB support for bcm43235/6/8 chipsets")
-Cc: stable <stable@vger.kernel.org> # 3.4
-Cc: Arend van Spriel <arend@broadcom.com>
-Signed-off-by: Johan Hovold <johan@kernel.org>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1348,7 +1348,7 @@ brcmf_usb_probe(struct usb_interface *in
- goto fail;
- }
-
-- desc = &intf->altsetting[0].desc;
-+ desc = &intf->cur_altsetting->desc;
- if ((desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
- (desc->bInterfaceSubClass != 2) ||
- (desc->bInterfaceProtocol != 0xff)) {
-@@ -1361,7 +1361,7 @@ brcmf_usb_probe(struct usb_interface *in
-
- num_of_eps = desc->bNumEndpoints;
- for (ep = 0; ep < num_of_eps; ep++) {
-- endpoint = &intf->altsetting[0].endpoint[ep].desc;
-+ endpoint = &intf->cur_altsetting->endpoint[ep].desc;
- endpoint_num = usb_endpoint_num(endpoint);
- if (!usb_endpoint_xfer_bulk(endpoint))
- continue;
+++ /dev/null
-From 4282dc057d750c6a7dd92953564b15c26b54c22c Mon Sep 17 00:00:00 2001
-From: Navid Emamdoost <navid.emamdoost@gmail.com>
-Date: Sat, 14 Dec 2019 19:51:14 -0600
-Subject: [PATCH] brcmfmac: Fix memory leak in brcmf_usbdev_qinit
-
-In the implementation of brcmf_usbdev_qinit() the allocated memory for
-reqs is leaking if usb_alloc_urb() fails. Release reqs in the error
-handling path.
-
-Fixes: 71bb244ba2fd ("brcm80211: fmac: add USB support for bcm43235/6/8 chipsets")
-Signed-off-by: Navid Emamdoost <navid.emamdoost@gmail.com>
-Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -430,6 +430,7 @@ fail:
- usb_free_urb(req->urb);
- list_del(q->next);
- }
-+ kfree(reqs);
- return NULL;
-
- }
--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-@@ -11498,6 +11498,15 @@ static const struct attribute_group ipw_
+@@ -11499,6 +11499,15 @@ static const struct attribute_group ipw_
.attrs = ipw_sysfs_entries,
};
#ifdef CPTCFG_IPW2200_PROMISCUOUS
static int ipw_prom_open(struct net_device *dev)
{
-@@ -11546,15 +11555,6 @@ static netdev_tx_t ipw_prom_hard_start_x
+@@ -11547,15 +11556,6 @@ static netdev_tx_t ipw_prom_hard_start_x
return NETDEV_TX_OK;
}
# LED support
--- a/drivers/net/wireless/broadcom/b43legacy/main.c
+++ b/drivers/net/wireless/broadcom/b43legacy/main.c
-@@ -1937,7 +1937,7 @@ static int b43legacy_gpio_init(struct b4
+@@ -1938,7 +1938,7 @@ static int b43legacy_gpio_init(struct b4
if (dev->dev->id.revision >= 2)
mask |= 0x0010; /* FIXME: This is redundant. */
pcidev = bus->pcicore.dev;
#endif
gpiodev = bus->chipco.dev ? : pcidev;
-@@ -1956,7 +1956,7 @@ static void b43legacy_gpio_cleanup(struc
+@@ -1957,7 +1957,7 @@ static void b43legacy_gpio_cleanup(struc
struct ssb_bus *bus = dev->dev->bus;
struct ssb_device *gpiodev, *pcidev = NULL;
--- a/drivers/net/wireless/marvell/libertas/cfg.c
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
-@@ -2041,6 +2041,8 @@ struct wireless_dev *lbs_cfg_alloc(struc
+@@ -2053,6 +2053,8 @@ struct wireless_dev *lbs_cfg_alloc(struc
goto err_wiphy_new;
}
--- a/drivers/net/wireless/marvell/libertas/cfg.c
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
-@@ -2117,6 +2117,8 @@ int lbs_cfg_register(struct lbs_private
+@@ -2129,6 +2129,8 @@ int lbs_cfg_register(struct lbs_private
wdev->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
wdev->wiphy->reg_notifier = lbs_reg_notifier;
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
-@@ -6627,6 +6627,11 @@ bool cfg80211_iftype_allowed(struct wiph
+@@ -6632,6 +6632,11 @@ bool cfg80211_iftype_allowed(struct wiph
#define wiphy_info(wiphy, format, args...) \
dev_info(&(wiphy)->dev, format, ##args)
+++ /dev/null
-From: Felix Fietkau <nbd@nbd.name>
-Date: Fri, 14 Jun 2019 21:12:04 +0200
-Subject: [PATCH] mac80211: minstrel_ht: fix per-group max throughput rate
- initialization
-
-The group number needs to be multiplied by the number of rates per group
-to get the full rate index
-
-Signed-off-by: Felix Fietkau <nbd@nbd.name>
----
-
---- a/net/mac80211/rc80211_minstrel_ht.c
-+++ b/net/mac80211/rc80211_minstrel_ht.c
-@@ -542,7 +542,7 @@ minstrel_ht_update_stats(struct minstrel
-
- /* (re)Initialize group rate indexes */
- for(j = 0; j < MAX_THR_RATES; j++)
-- tmp_group_tp_rate[j] = group;
-+ tmp_group_tp_rate[j] = MCS_GROUP_RATES * group;
-
- for (i = 0; i < MCS_GROUP_RATES; i++) {
- if (!(mi->supported[group] & BIT(i)))
MAX_NL80211_EXT_FEATURES = NUM_NL80211_EXT_FEATURES - 1
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -463,6 +463,7 @@ static const struct nla_policy nl80211_p
+@@ -469,6 +469,7 @@ static const struct nla_policy nl80211_p
[NL80211_ATTR_TXQ_QUANTUM] = { .type = NLA_U32 },
[NL80211_ATTR_HE_CAPABILITY] = { .type = NLA_BINARY,
.len = NL80211_HE_MAX_CAPABILITY_LEN },
};
/* policy for the key attributes */
-@@ -4703,6 +4704,11 @@ static int nl80211_send_station(struct s
+@@ -4709,6 +4710,11 @@ static int nl80211_send_station(struct s
PUT_SINFO(PLID, plid, u16);
PUT_SINFO(PLINK_STATE, plink_state, u8);
PUT_SINFO_U64(RX_DURATION, rx_duration);
switch (rdev->wiphy.signal_type) {
case CFG80211_SIGNAL_TYPE_MBM:
-@@ -5339,6 +5345,15 @@ static int nl80211_set_station(struct sk
+@@ -5345,6 +5351,15 @@ static int nl80211_set_station(struct sk
nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
}
/* Include parameters for TDLS peer (will check later) */
err = nl80211_set_station_tdls(info, ¶ms);
if (err)
-@@ -5477,6 +5492,15 @@ static int nl80211_new_station(struct sk
+@@ -5483,6 +5498,15 @@ static int nl80211_new_station(struct sk
return -EINVAL;
}
rcu_read_unlock();
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
-@@ -1390,6 +1390,7 @@ void ieee80211_send_auth(struct ieee8021
+@@ -1396,6 +1396,7 @@ void ieee80211_send_auth(struct ieee8021
struct ieee80211_local *local = sdata->local;
struct sk_buff *skb;
struct ieee80211_mgmt *mgmt;
int err;
/* 24 + 6 = header + auth_algo + auth_transaction + status_code */
-@@ -1413,8 +1414,10 @@ void ieee80211_send_auth(struct ieee8021
+@@ -1419,8 +1420,10 @@ void ieee80211_send_auth(struct ieee8021
skb_put_data(skb, extra, extra_len);
if (auth_alg == WLAN_AUTH_SHARED_KEY && transaction == 3) {
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
-@@ -1112,16 +1112,13 @@ int mesh_nexthop_resolve(struct ieee8021
+@@ -1115,16 +1115,13 @@ int mesh_nexthop_resolve(struct ieee8021
struct mesh_path *mpath;
struct sk_buff *skb_to_free = NULL;
u8 *target_addr = hdr->addr3;
/* no nexthop found, start resolving */
mpath = mesh_path_lookup(sdata, target_addr);
-@@ -1129,8 +1126,7 @@ int mesh_nexthop_resolve(struct ieee8021
+@@ -1132,8 +1129,7 @@ int mesh_nexthop_resolve(struct ieee8021
mpath = mesh_path_add(sdata, target_addr);
if (IS_ERR(mpath)) {
mesh_path_discard_frame(sdata, skb);
}
}
-@@ -1143,13 +1139,10 @@ int mesh_nexthop_resolve(struct ieee8021
+@@ -1146,13 +1142,10 @@ int mesh_nexthop_resolve(struct ieee8021
info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
ieee80211_set_qos_hdr(sdata, skb);
skb_queue_tail(&mpath->frame_queue, skb);
}
/**
-@@ -1169,13 +1162,10 @@ int mesh_nexthop_lookup(struct ieee80211
+@@ -1172,13 +1165,10 @@ int mesh_nexthop_lookup(struct ieee80211
struct sta_info *next_hop;
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
u8 *target_addr = hdr->addr3;
if (time_after(jiffies,
mpath->exp_time -
-@@ -1190,12 +1180,10 @@ int mesh_nexthop_lookup(struct ieee80211
+@@ -1193,12 +1183,10 @@ int mesh_nexthop_lookup(struct ieee80211
memcpy(hdr->addr1, next_hop->sta.addr, ETH_ALEN);
memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN);
ieee80211_mps_set_frame_flags(sdata, next_hop, hdr);
frame_buf);
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
-@@ -1427,7 +1427,8 @@ void ieee80211_send_auth(struct ieee8021
+@@ -1433,7 +1433,8 @@ void ieee80211_send_auth(struct ieee8021
}
void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
bool send_frame, u8 *frame_buf)
{
struct ieee80211_local *local = sdata->local;
-@@ -1438,7 +1439,7 @@ void ieee80211_send_deauth_disassoc(stru
+@@ -1444,7 +1445,7 @@ void ieee80211_send_deauth_disassoc(stru
mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | stype);
mgmt->duration = 0; /* initialize only */
mgmt->seq_ctrl = 0; /* initialize only */
+++ /dev/null
-From 95697f9907bfe3eab0ef20265a766b22e27dde64 Mon Sep 17 00:00:00 2001
-From: Johannes Berg <johannes.berg@intel.com>
-Date: Fri, 4 Oct 2019 15:37:05 +0300
-Subject: [PATCH] mac80211: accept deauth frames in IBSS mode
-
-We can process deauth frames and all, but we drop them very
-early in the RX path today - this could never have worked.
-
-Fixes: 2cc59e784b54 ("mac80211: reply to AUTH with DEAUTH if sta allocation fails in IBSS")
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
-Link: https://lore.kernel.org/r/20191004123706.15768-2-luca@coelho.fi
-Signed-off-by: Johannes Berg <johannes.berg@intel.com>
----
- net/mac80211/rx.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -3407,9 +3407,18 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
- case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP):
- /* process for all: mesh, mlme, ibss */
- break;
-+ case cpu_to_le16(IEEE80211_STYPE_DEAUTH):
-+ if (is_multicast_ether_addr(mgmt->da) &&
-+ !is_broadcast_ether_addr(mgmt->da))
-+ return RX_DROP_MONITOR;
-+
-+ /* process only for station/IBSS */
-+ if (sdata->vif.type != NL80211_IFTYPE_STATION &&
-+ sdata->vif.type != NL80211_IFTYPE_ADHOC)
-+ return RX_DROP_MONITOR;
-+ break;
- case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):
- case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP):
-- case cpu_to_le16(IEEE80211_STYPE_DEAUTH):
- case cpu_to_le16(IEEE80211_STYPE_DISASSOC):
- if (is_multicast_ether_addr(mgmt->da) &&
- !is_broadcast_ether_addr(mgmt->da))
__NL80211_SURVEY_INFO_AFTER_LAST,
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -8367,6 +8367,10 @@ static int nl80211_send_survey(struct sk
+@@ -8373,6 +8373,10 @@ static int nl80211_send_survey(struct sk
nla_put_u64_64bit(msg, NL80211_SURVEY_INFO_TIME_SCAN,
survey->time_scan, NL80211_SURVEY_INFO_PAD))
goto nla_put_failure;
*
* @set_wds_peer: set the WDS peer for a WDS interface
*
-@@ -3272,6 +3273,7 @@ struct cfg80211_ops {
+@@ -3275,6 +3276,7 @@ struct cfg80211_ops {
enum nl80211_tx_power_setting type, int mbm);
int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev,
int *dbm);
static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev,
const u8 *addr)
{
-@@ -3823,6 +3836,7 @@ const struct cfg80211_ops mac80211_confi
+@@ -3845,6 +3858,7 @@ const struct cfg80211_ops mac80211_confi
.set_wiphy_params = ieee80211_set_wiphy_params,
.set_tx_power = ieee80211_set_tx_power,
.get_tx_power = ieee80211_get_tx_power,
local->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -464,6 +464,7 @@ static const struct nla_policy nl80211_p
+@@ -470,6 +470,7 @@ static const struct nla_policy nl80211_p
[NL80211_ATTR_HE_CAPABILITY] = { .type = NLA_BINARY,
.len = NL80211_HE_MAX_CAPABILITY_LEN },
[NL80211_ATTR_AIRTIME_WEIGHT] = NLA_POLICY_MIN(NLA_U16, 1),
};
/* policy for the key attributes */
-@@ -2623,6 +2624,20 @@ static int nl80211_set_wiphy(struct sk_b
+@@ -2629,6 +2630,20 @@ static int nl80211_set_wiphy(struct sk_b
if (result)
return result;
}