Commit 699231ae authored by Yu Liao's avatar Yu Liao
Browse files

ssb: Fix potential NULL pointer dereference in ssb_device_uevent()

mainline inclusion
from mainline-v6.10-rc1
commit 789c17185fb0f39560496c2beab9b57ce1d0cbe7
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAD028
CVE: CVE-2024-40982

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=789c17185fb0f39560496c2beab9b57ce1d0cbe7



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

The ssb_device_uevent() function first attempts to convert the 'dev' pointer
to 'struct ssb_device *'. However, it mistakenly dereferences 'dev' before
performing the NULL check, potentially leading to a NULL pointer
dereference if 'dev' is NULL.

To fix this issue, move the NULL check before dereferencing the 'dev' pointer,
ensuring that the pointer is valid before attempting to use it.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: default avatarRand Deeb <rand.sec96@gmail.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20240306123028.164155-1-rand.sec96@gmail.com


Signed-off-by: default avatarYu Liao <liaoyu15@huawei.com>
parent ec1052d5
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -340,11 +340,13 @@ static int ssb_bus_match(struct device *dev, struct device_driver *drv)

static int ssb_device_uevent(struct device *dev, struct kobj_uevent_env *env)
{
	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
	struct ssb_device *ssb_dev;

	if (!dev)
		return -ENODEV;

	ssb_dev = dev_to_ssb_dev(dev);

	return add_uevent_var(env,
			     "MODALIAS=ssb:v%04Xid%04Xrev%02X",
			     ssb_dev->id.vendor, ssb_dev->id.coreid,