summaryrefslogtreecommitdiffstats
path: root/kernel/drivers/net/wireless/brcm80211
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/drivers/net/wireless/brcm80211')
-rw-r--r--kernel/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c4
-rw-r--r--kernel/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c7
-rw-r--r--kernel/drivers/net/wireless/brcm80211/brcmsmac/dma.c4
-rw-r--r--kernel/drivers/net/wireless/brcm80211/brcmsmac/stf.c2
4 files changed, 12 insertions, 5 deletions
diff --git a/kernel/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c b/kernel/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
index 410a6645d..59cef6c69 100644
--- a/kernel/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
+++ b/kernel/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
@@ -726,8 +726,10 @@ int brcmf_sdiod_recv_chain(struct brcmf_sdio_dev *sdiodev,
return -ENOMEM;
err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr,
glom_skb);
- if (err)
+ if (err) {
+ brcmu_pkt_buf_free_skb(glom_skb);
goto done;
+ }
skb_queue_walk(pktq, skb) {
memcpy(skb->data, glom_skb->data, skb->len);
diff --git a/kernel/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c b/kernel/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
index deb5f78dc..70a698533 100644
--- a/kernel/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
+++ b/kernel/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
@@ -2408,7 +2408,7 @@ static void brcmf_fill_bss_param(struct brcmf_if *ifp, struct station_info *si)
WL_BSS_INFO_MAX);
if (err) {
brcmf_err("Failed to get bss info (%d)\n", err);
- return;
+ goto out_kfree;
}
si->filled |= BIT(NL80211_STA_INFO_BSS_PARAM);
si->bss_param.beacon_interval = le16_to_cpu(buf->bss_le.beacon_period);
@@ -2420,6 +2420,9 @@ static void brcmf_fill_bss_param(struct brcmf_if *ifp, struct station_info *si)
si->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_PREAMBLE;
if (capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)
si->bss_param.flags |= BSS_PARAM_FLAGS_SHORT_SLOT_TIME;
+
+out_kfree:
+ kfree(buf);
}
static s32
@@ -4099,7 +4102,7 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
(u8 *)&settings->beacon.head[ie_offset],
settings->beacon.head_len - ie_offset,
WLAN_EID_SSID);
- if (!ssid_ie)
+ if (!ssid_ie || ssid_ie->len > IEEE80211_MAX_SSID_LEN)
return -EINVAL;
memcpy(ssid_le.SSID, ssid_ie->data, ssid_ie->len);
diff --git a/kernel/drivers/net/wireless/brcm80211/brcmsmac/dma.c b/kernel/drivers/net/wireless/brcm80211/brcmsmac/dma.c
index 796f5f9d5..b7df576bb 100644
--- a/kernel/drivers/net/wireless/brcm80211/brcmsmac/dma.c
+++ b/kernel/drivers/net/wireless/brcm80211/brcmsmac/dma.c
@@ -1079,8 +1079,10 @@ bool dma_rxfill(struct dma_pub *pub)
pa = dma_map_single(di->dmadev, p->data, di->rxbufsize,
DMA_FROM_DEVICE);
- if (dma_mapping_error(di->dmadev, pa))
+ if (dma_mapping_error(di->dmadev, pa)) {
+ brcmu_pkt_buf_free_skb(p);
return false;
+ }
/* save the free packet pointer */
di->rxp[rxout] = p;
diff --git a/kernel/drivers/net/wireless/brcm80211/brcmsmac/stf.c b/kernel/drivers/net/wireless/brcm80211/brcmsmac/stf.c
index dd9162722..0ab865de1 100644
--- a/kernel/drivers/net/wireless/brcm80211/brcmsmac/stf.c
+++ b/kernel/drivers/net/wireless/brcm80211/brcmsmac/stf.c
@@ -87,7 +87,7 @@ void
brcms_c_stf_ss_algo_channel_get(struct brcms_c_info *wlc, u16 *ss_algo_channel,
u16 chanspec)
{
- struct tx_power power;
+ struct tx_power power = { };
u8 siso_mcs_id, cdd_mcs_id, stbc_mcs_id;
/* Clear previous settings */