Skip to content

Commit 4b00920

Browse files
Jinjie Ruanshuahkh
Jinjie Ruan
authored andcommitted
kunit: Fix the wrong err path and add goto labels in kunit_filter_suites()
Take the last kfree(parsed_filters) and add it to be the first. Take the first kfree(copy) and add it to be the last. The Best practice is to return these errors reversely. And as David suggested, add several labels which target only the things which actually have been allocated so far. Fixes: 529534e ("kunit: Add ability to filter attributes") Fixes: abbf738 ("kunit: fix possible memory leak in kunit_filter_suites()") Signed-off-by: Jinjie Ruan <[email protected]> Reviewed-by: Rae Moar <[email protected]> Suggested-by: David Gow <[email protected]> Reviewed-by: David Gow <[email protected]> Signed-off-by: Shuah Khan <[email protected]>
1 parent 2810c1e commit 4b00920

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

lib/kunit/executor.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,
166166
for (j = 0; j < filter_count; j++)
167167
parsed_filters[j] = kunit_next_attr_filter(&filters, err);
168168
if (*err)
169-
goto err;
169+
goto free_parsed_filters;
170170
}
171171

172172
for (i = 0; &suite_set->start[i] != suite_set->end; i++) {
@@ -178,7 +178,7 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,
178178
parsed_glob.test_glob);
179179
if (IS_ERR(filtered_suite)) {
180180
*err = PTR_ERR(filtered_suite);
181-
goto err;
181+
goto free_parsed_filters;
182182
}
183183
}
184184
if (filter_count > 0 && parsed_filters != NULL) {
@@ -195,10 +195,11 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,
195195
filtered_suite = new_filtered_suite;
196196

197197
if (*err)
198-
goto err;
198+
goto free_parsed_filters;
199+
199200
if (IS_ERR(filtered_suite)) {
200201
*err = PTR_ERR(filtered_suite);
201-
goto err;
202+
goto free_parsed_filters;
202203
}
203204
if (!filtered_suite)
204205
break;
@@ -213,17 +214,19 @@ kunit_filter_suites(const struct kunit_suite_set *suite_set,
213214
filtered.start = copy_start;
214215
filtered.end = copy;
215216

216-
err:
217-
if (*err)
218-
kfree(copy);
217+
free_parsed_filters:
218+
if (filter_count)
219+
kfree(parsed_filters);
219220

221+
free_parsed_glob:
220222
if (filter_glob) {
221223
kfree(parsed_glob.suite_glob);
222224
kfree(parsed_glob.test_glob);
223225
}
224226

225-
if (filter_count)
226-
kfree(parsed_filters);
227+
free_copy:
228+
if (*err)
229+
kfree(copy);
227230

228231
return filtered;
229232
}

0 commit comments

Comments
 (0)