]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: wilc1000: fix u8 overflow in SSID scan buffer size calculation
authorYasuaki Torimaru <yasuakitorimaru@gmail.com>
Tue, 24 Mar 2026 10:06:24 +0000 (19:06 +0900)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 24 Mar 2026 14:32:14 +0000 (15:32 +0100)
The variable valuesize is declared as u8 but accumulates the total
length of all SSIDs to scan. Each SSID contributes up to 33 bytes
(IEEE80211_MAX_SSID_LEN + 1), and with WILC_MAX_NUM_PROBED_SSID (10)
SSIDs the total can reach 330, which wraps around to 74 when stored
in a u8.

This causes kmalloc to allocate only 75 bytes while the subsequent
memcpy writes up to 331 bytes into the buffer, resulting in a 256-byte
heap buffer overflow.

Widen valuesize from u8 to u32 to accommodate the full range.

Fixes: c5c77ba18ea6 ("staging: wilc1000: Add SDIO/SPI 802.11 driver")
Cc: stable@vger.kernel.org
Signed-off-by: Yasuaki Torimaru <yasuakitorimaru@gmail.com>
Link: https://patch.msgid.link/20260324100624.983458-1-yasuakitorimaru@gmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/microchip/wilc1000/hif.c

index f354b11cb91978f2118801998c83bb62be6eea4f..944b2a812b63e528fd0312cbecb108ebecb3f310 100644 (file)
@@ -163,7 +163,7 @@ int wilc_scan(struct wilc_vif *vif, u8 scan_source,
        u32 index = 0;
        u32 i, scan_timeout;
        u8 *buffer;
-       u8 valuesize = 0;
+       u32 valuesize = 0;
        u8 *search_ssid_vals = NULL;
        const u8 ch_list_len = request->n_channels;
        struct host_if_drv *hif_drv = vif->hif_drv;