Commit 5c1de9f7 authored by Dan Carpenter's avatar Dan Carpenter Committed by Cai Xinchen
Browse files

mmc: mmc_test: Fix NULL dereference on allocation failure

stable inclusion
from stable-v6.6.48
commit cac2815f49d343b2f0acc4973d2c14918ac3ab0c
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAQOJH
CVE: CVE-2024-45028

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



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

[ Upstream commit a1e627af32ed60713941cbfc8075d44cad07f6dd ]

If the "test->highmem = alloc_pages()" allocation fails then calling
__free_pages(test->highmem) will result in a NULL dereference.  Also
change the error code to -ENOMEM instead of returning success.

Fixes: 2661081f ("mmc_test: highmem tests")
Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Link: https://lore.kernel.org/r/8c90be28-67b4-4b0d-a105-034dc72a0b31@stanley.mountain


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarCai Xinchen <caixinchen1@huawei.com>
parent f8be47d4
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -3104,13 +3104,13 @@ static ssize_t mtf_test_write(struct file *file, const char __user *buf,
	test->buffer = kzalloc(BUFFER_SIZE, GFP_KERNEL);
#ifdef CONFIG_HIGHMEM
	test->highmem = alloc_pages(GFP_KERNEL | __GFP_HIGHMEM, BUFFER_ORDER);
	if (!test->highmem) {
		count = -ENOMEM;
		goto free_test_buffer;
	}
#endif

#ifdef CONFIG_HIGHMEM
	if (test->buffer && test->highmem) {
#else
	if (test->buffer) {
#endif
		mutex_lock(&mmc_test_lock);
		mmc_test_run(test, testcase);
		mutex_unlock(&mmc_test_lock);
@@ -3118,6 +3118,7 @@ static ssize_t mtf_test_write(struct file *file, const char __user *buf,

#ifdef CONFIG_HIGHMEM
	__free_pages(test->highmem, BUFFER_ORDER);
free_test_buffer:
#endif
	kfree(test->buffer);
	kfree(test);