diff options
-rw-r--r-- | drivers/net/wireless/ath/wil6210/cfg80211.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c index 9a9d55b36dc3..a1e226652b4a 100644 --- a/drivers/net/wireless/ath/wil6210/cfg80211.c +++ b/drivers/net/wireless/ath/wil6210/cfg80211.c | |||
@@ -1580,6 +1580,12 @@ static int _wil_cfg80211_merge_extra_ies(const u8 *ies1, u16 ies1_len, | |||
1580 | u8 *buf, *dpos; | 1580 | u8 *buf, *dpos; |
1581 | const u8 *spos; | 1581 | const u8 *spos; |
1582 | 1582 | ||
1583 | if (!ies1) | ||
1584 | ies1_len = 0; | ||
1585 | |||
1586 | if (!ies2) | ||
1587 | ies2_len = 0; | ||
1588 | |||
1583 | if (ies1_len == 0 && ies2_len == 0) { | 1589 | if (ies1_len == 0 && ies2_len == 0) { |
1584 | *merged_ies = NULL; | 1590 | *merged_ies = NULL; |
1585 | *merged_len = 0; | 1591 | *merged_len = 0; |
@@ -1589,17 +1595,19 @@ static int _wil_cfg80211_merge_extra_ies(const u8 *ies1, u16 ies1_len, | |||
1589 | buf = kmalloc(ies1_len + ies2_len, GFP_KERNEL); | 1595 | buf = kmalloc(ies1_len + ies2_len, GFP_KERNEL); |
1590 | if (!buf) | 1596 | if (!buf) |
1591 | return -ENOMEM; | 1597 | return -ENOMEM; |
1592 | memcpy(buf, ies1, ies1_len); | 1598 | if (ies1) |
1599 | memcpy(buf, ies1, ies1_len); | ||
1593 | dpos = buf + ies1_len; | 1600 | dpos = buf + ies1_len; |
1594 | spos = ies2; | 1601 | spos = ies2; |
1595 | while (spos + 1 < ies2 + ies2_len) { | 1602 | while (spos && (spos + 1 < ies2 + ies2_len)) { |
1596 | /* IE tag at offset 0, length at offset 1 */ | 1603 | /* IE tag at offset 0, length at offset 1 */ |
1597 | u16 ielen = 2 + spos[1]; | 1604 | u16 ielen = 2 + spos[1]; |
1598 | 1605 | ||
1599 | if (spos + ielen > ies2 + ies2_len) | 1606 | if (spos + ielen > ies2 + ies2_len) |
1600 | break; | 1607 | break; |
1601 | if (spos[0] == WLAN_EID_VENDOR_SPECIFIC && | 1608 | if (spos[0] == WLAN_EID_VENDOR_SPECIFIC && |
1602 | !_wil_cfg80211_find_ie(ies1, ies1_len, spos, ielen)) { | 1609 | (!ies1 || !_wil_cfg80211_find_ie(ies1, ies1_len, |
1610 | spos, ielen))) { | ||
1603 | memcpy(dpos, spos, ielen); | 1611 | memcpy(dpos, spos, ielen); |
1604 | dpos += ielen; | 1612 | dpos += ielen; |
1605 | } | 1613 | } |