kunit: Fix possible memory leak in kunit_filter_suites()
authorJinjie Ruan <ruanjinjie@huawei.com>
Sun, 3 Sep 2023 07:10:28 +0000 (15:10 +0800)
committerShuah Khan <skhan@linuxfoundation.org>
Tue, 5 Sep 2023 18:30:06 +0000 (12:30 -0600)
If both filter_glob and filters are not NULL, and kunit_parse_glob_filter()
succeed, but kcalloc parsed_filters fails, the suite_glob and test_glob of
parsed kzalloc in kunit_parse_glob_filter() will be leaked.

As Rae suggested, assign -ENOMEM to *err to correctly free copy and goto
free_parsed_glob to free the suite/test_glob of parsed.

Fixes: 1c9fd080dffe ("kunit: fix uninitialized variables bug in attributes filtering")
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Suggested-by: Rae Moar <rmoar@google.com>
Reviewed-by: David Gow <davidgow@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
lib/kunit/executor.c

index 28f144de748b5dc9c89aca68f0f1cdc7c88b757c..a6348489d45fe8f9f6937069c56ce7978d971486 100644 (file)
@@ -175,8 +175,8 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,
                filter_count = kunit_get_filter_count(filters);
                parsed_filters = kcalloc(filter_count, sizeof(*parsed_filters), GFP_KERNEL);
                if (!parsed_filters) {
-                       kfree(copy);
-                       return filtered;
+                       *err = -ENOMEM;
+                       goto free_parsed_glob;
                }
                for (j = 0; j < filter_count; j++)
                        parsed_filters[j] = kunit_next_attr_filter(&filters, err);