Commit 51d56341 authored by Johannes Berg's avatar Johannes Berg Committed by dinglongwei
Browse files

wifi: virt_wifi: don't use strlen() in const context

stable inclusion
from stable-v5.10.224
commit be53b70fc08198fa090a4d26e8a7c7c641de8aea
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAKQ2K
CVE: CVE-2024-43841

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=be53b70fc08198fa090a4d26e8a7c7c641de8aea



--------------------------------

[ Upstream commit 6e909f489191b365364e9d636dec33b5dfd4e5eb ]

Looks like not all compilers allow strlen(constant) as
a constant, so don't do that. Instead, revert back to
defining the length as the first submission had it.

Fixes: b5d14b0c6716 ("wifi: virt_wifi: avoid reporting connection success with wrong SSID")
Reported-by: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202407090934.NnR1TUbW-lkp@intel.com/
Closes: https://lore.kernel.org/oe-kbuild-all/202407090944.mpwLHGt9-lkp@intel.com/


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatardinglongwei <dinglongwei1@huawei.com>
parent 6c87720d
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -137,6 +137,7 @@ static struct ieee80211_supported_band band_5ghz = {
static u8 fake_router_bssid[ETH_ALEN] __ro_after_init = {};

#define VIRT_WIFI_SSID "VirtWifi"
#define VIRT_WIFI_SSID_LEN 8

static void virt_wifi_inform_bss(struct wiphy *wiphy)
{
@@ -148,7 +149,7 @@ static void virt_wifi_inform_bss(struct wiphy *wiphy)
		u8 ssid[8];
	} __packed ssid = {
		.tag = WLAN_EID_SSID,
		.len = strlen(VIRT_WIFI_SSID),
		.len = VIRT_WIFI_SSID_LEN,
		.ssid = VIRT_WIFI_SSID,
	};

@@ -262,7 +263,7 @@ static void virt_wifi_connect_complete(struct work_struct *work)
		container_of(work, struct virt_wifi_netdev_priv, connect.work);
	u8 *requested_bss = priv->connect_requested_bss;
	bool right_addr = ether_addr_equal(requested_bss, fake_router_bssid);
	bool right_ssid = priv->connect_requested_ssid_len == strlen(VIRT_WIFI_SSID) &&
	bool right_ssid = priv->connect_requested_ssid_len == VIRT_WIFI_SSID_LEN &&
			  !memcmp(priv->connect_requested_ssid, VIRT_WIFI_SSID,
				  priv->connect_requested_ssid_len);
	u16 status = WLAN_STATUS_SUCCESS;