]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mwifiex: Initialize the chan_stats array to zero
authorQianfeng Rong <rongqianfeng@vivo.com>
Fri, 15 Aug 2025 02:30:50 +0000 (10:30 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 9 Sep 2025 17:02:31 +0000 (19:02 +0200)
commit 0e20450829ca3c1dbc2db536391537c57a40fe0b upstream.

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: bf35443314ac ("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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/wireless/marvell/mwifiex/cfg80211.c
drivers/net/wireless/marvell/mwifiex/main.c

index 60c12328c2f315ae9b413ca03cebf791d9c536dd..8085a1ae4bdbb3b63e870a31a806054a2d81bba0 100644 (file)
@@ -4668,8 +4668,9 @@ int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter)
         * additional active scan request for hidden SSIDs on passive channels.
         */
        adapter->num_in_chan_stats = 2 * (n_channels_bg + n_channels_a);
-       adapter->chan_stats = vmalloc(array_size(sizeof(*adapter->chan_stats),
-                                                adapter->num_in_chan_stats));
+       adapter->chan_stats = kcalloc(adapter->num_in_chan_stats,
+                                     sizeof(*adapter->chan_stats),
+                                     GFP_KERNEL);
 
        if (!adapter->chan_stats)
                return -ENOMEM;
index 7b50a88a18e57328a714cb3d31f6a71b7b9ec322..1ec069bc8ea1e3d3401e9f38d1318e4458974561 100644 (file)
@@ -642,7 +642,7 @@ static int _mwifiex_fw_dpc(const struct firmware *firmware, void *context)
        goto done;
 
 err_add_intf:
-       vfree(adapter->chan_stats);
+       kfree(adapter->chan_stats);
 err_init_chan_scan:
        wiphy_unregister(adapter->wiphy);
        wiphy_free(adapter->wiphy);
@@ -1485,7 +1485,7 @@ static void mwifiex_uninit_sw(struct mwifiex_adapter *adapter)
        wiphy_free(adapter->wiphy);
        adapter->wiphy = NULL;
 
-       vfree(adapter->chan_stats);
+       kfree(adapter->chan_stats);
        mwifiex_free_cmd_buffers(adapter);
 }