summaryrefslogtreecommitdiff
path: root/lib/kunit
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kunit')
-rw-r--r--lib/kunit/executor.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c
index 5b5bed1efb93..481901d245d0 100644
--- a/lib/kunit/executor.c
+++ b/lib/kunit/executor.c
@@ -151,7 +151,7 @@ static struct suite_set kunit_filter_suites(const struct suite_set *suite_set,
for (j = 0; j < filter_count; j++)
parsed_filters[j] = kunit_next_attr_filter(&filters, err);
if (*err)
- return filtered;
+ goto err;
}
for (i = 0; &suite_set->start[i] != suite_set->end; i++) {
@@ -163,7 +163,7 @@ static struct suite_set kunit_filter_suites(const struct suite_set *suite_set,
parsed_glob.test_glob);
if (IS_ERR(filtered_suite)) {
*err = PTR_ERR(filtered_suite);
- return filtered;
+ goto err;
}
}
if (filter_count) {
@@ -172,15 +172,18 @@ static struct suite_set kunit_filter_suites(const struct suite_set *suite_set,
parsed_filters[k], filter_action, err);
/* Free previous copy of suite */
- if (k > 0 || filter_glob)
+ if (k > 0 || filter_glob) {
+ kfree(filtered_suite->test_cases);
kfree(filtered_suite);
+ }
+
filtered_suite = new_filtered_suite;
if (*err)
- return filtered;
+ goto err;
if (IS_ERR(filtered_suite)) {
*err = PTR_ERR(filtered_suite);
- return filtered;
+ goto err;
}
if (!filtered_suite)
break;
@@ -194,6 +197,10 @@ static struct suite_set kunit_filter_suites(const struct suite_set *suite_set,
}
filtered.end = copy;
+err:
+ if (*err)
+ kfree(copy);
+
if (filter_glob) {
kfree(parsed_glob.suite_glob);
kfree(parsed_glob.test_glob);