mwifiex: Fix possible buffer overflows at parsing bss descriptor (CVE-2019-3846)

This commit is contained in:
Ben Hutchings 2019-06-17 19:24:10 +01:00
parent ff251104cb
commit 54fa813858
3 changed files with 47 additions and 0 deletions

2
debian/changelog vendored
View File

@ -8,6 +8,8 @@ linux (4.19.37-4) UNRELEASED; urgency=medium
- libbpf: Build out-of-tree
* README.source: Document the various makefiles and use of out-of-tree builds
* [x86] lockdown,sysrq: Enable ALLOW_LOCKDOWN_LIFT_BY_SYSRQ (Closes: #929583)
* mwifiex: Fix possible buffer overflows at parsing bss descriptor
(CVE-2019-3846)
[ Romain Perier ]
* [rt] Update to 4.19.37-rt20

View File

@ -0,0 +1,44 @@
From: Takashi Iwai <tiwai@suse.de>
Date: Wed, 29 May 2019 14:52:19 +0200
Subject: mwifiex: Fix possible buffer overflows at parsing bss descriptor
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers.git/commit?id=13ec7f10b87f5fc04c4ccbd491c94c7980236a74
Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2019-3846
mwifiex_update_bss_desc_with_ie() calls memcpy() unconditionally in
a couple places without checking the destination size. Since the
source is given from user-space, this may trigger a heap buffer
overflow.
Fix it by putting the length check before performing memcpy().
This fix addresses CVE-2019-3846.
Reported-by: huangwen <huangwen@venustech.com.cn>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
---
drivers/net/wireless/marvell/mwifiex/scan.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
index 935778ec9a1b..64ab6fe78c0d 100644
--- a/drivers/net/wireless/marvell/mwifiex/scan.c
+++ b/drivers/net/wireless/marvell/mwifiex/scan.c
@@ -1247,6 +1247,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
}
switch (element_id) {
case WLAN_EID_SSID:
+ if (element_len > IEEE80211_MAX_SSID_LEN)
+ return -EINVAL;
bss_entry->ssid.ssid_len = element_len;
memcpy(bss_entry->ssid.ssid, (current_ptr + 2),
element_len);
@@ -1256,6 +1258,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
break;
case WLAN_EID_SUPP_RATES:
+ if (element_len > MWIFIEX_SUPPORTED_RATES)
+ return -EINVAL;
memcpy(bss_entry->data_rates, current_ptr + 2,
element_len);
memcpy(bss_entry->supported_rates, current_ptr + 2,

View File

@ -217,6 +217,7 @@ bugfix/all/brcmfmac-assure-SSID-length-from-firmware-is-limited.patch
bugfix/all/brcmfmac-add-subtype-check-for-event-handling-in-dat.patch
bugfix/all/ext4-zero-out-the-unused-memory-region-in-the-extent.patch
bugfix/all/Bluetooth-hidp-fix-buffer-overflow.patch
bugfix/all/mwifiex-fix-possible-buffer-overflows-at-parsing-bss.patch
# Fix exported symbol versions
bugfix/all/module-disable-matching-missing-version-crc.patch