mmc: mmc_test: Fix NULL dereference on allocation failure
authorDan Carpenter <dan.carpenter@linaro.org>
Tue, 20 Aug 2024 08:44:08 +0000 (11:44 +0300)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 20 Aug 2024 11:47:36 +0000 (13:47 +0200)
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: 2661081f5ab9 ("mmc_test: highmem tests")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Link: https://lore.kernel.org/r/8c90be28-67b4-4b0d-a105-034dc72a0b31@stanley.mountain
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/mmc_test.c

index 8f7f587a0025b36142bcaa1a3b9f5bf4eba4fd2b..b7f627a9fdeab91b5d69b16e77352ca331394e6d 100644 (file)
@@ -3125,13 +3125,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);
@@ -3139,6 +3139,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);