mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable.git
synced 2025-09-14 11:19:08 +10:00
wifi: mwifiex: Initialize the chan_stats array to zero
The adapter->chan_stats[] array is initialized in
mwifiex_init_channel_scan_gap() with vmalloc(), which doesn't zero out
memory. The array is filled in mwifiex_update_chan_statistics()
and then the user can query the data in mwifiex_cfg80211_dump_survey().
There are two potential issues here. What if the user calls
mwifiex_cfg80211_dump_survey() before the data has been filled in.
Also the mwifiex_update_chan_statistics() function doesn't necessarily
initialize the whole array. Since the array was not initialized at
the start that could result in an information leak.
Also this array is pretty small. It's a maximum of 900 bytes so it's
more appropriate to use kcalloc() instead vmalloc().
Cc: stable@vger.kernel.org
Fixes: bf35443314
("mwifiex: channel statistics support for mwifiex")
Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Qianfeng Rong <rongqianfeng@vivo.com>
Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
Link: https://patch.msgid.link/20250815023055.477719-1-rongqianfeng@vivo.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
75575e2d25
commit
0e20450829
@ -4673,8 +4673,9 @@ int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter)
|
|||||||
* additional active scan request for hidden SSIDs on passive channels.
|
* additional active scan request for hidden SSIDs on passive channels.
|
||||||
*/
|
*/
|
||||||
adapter->num_in_chan_stats = 2 * (n_channels_bg + n_channels_a);
|
adapter->num_in_chan_stats = 2 * (n_channels_bg + n_channels_a);
|
||||||
adapter->chan_stats = vmalloc(array_size(sizeof(*adapter->chan_stats),
|
adapter->chan_stats = kcalloc(adapter->num_in_chan_stats,
|
||||||
adapter->num_in_chan_stats));
|
sizeof(*adapter->chan_stats),
|
||||||
|
GFP_KERNEL);
|
||||||
|
|
||||||
if (!adapter->chan_stats)
|
if (!adapter->chan_stats)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -642,7 +642,7 @@ static int _mwifiex_fw_dpc(const struct firmware *firmware, void *context)
|
|||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
err_add_intf:
|
err_add_intf:
|
||||||
vfree(adapter->chan_stats);
|
kfree(adapter->chan_stats);
|
||||||
err_init_chan_scan:
|
err_init_chan_scan:
|
||||||
wiphy_unregister(adapter->wiphy);
|
wiphy_unregister(adapter->wiphy);
|
||||||
wiphy_free(adapter->wiphy);
|
wiphy_free(adapter->wiphy);
|
||||||
@ -1485,7 +1485,7 @@ static void mwifiex_uninit_sw(struct mwifiex_adapter *adapter)
|
|||||||
wiphy_free(adapter->wiphy);
|
wiphy_free(adapter->wiphy);
|
||||||
adapter->wiphy = NULL;
|
adapter->wiphy = NULL;
|
||||||
|
|
||||||
vfree(adapter->chan_stats);
|
kfree(adapter->chan_stats);
|
||||||
mwifiex_free_cmd_buffers(adapter);
|
mwifiex_free_cmd_buffers(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user