@@ -151,7 +151,7 @@ static struct suite_set kunit_filter_suites(const struct suite_set *suite_set,
151
151
for (j = 0 ; j < filter_count ; j ++ )
152
152
parsed_filters [j ] = kunit_next_attr_filter (& filters , err );
153
153
if (* err )
154
- return filtered ;
154
+ goto err ;
155
155
}
156
156
157
157
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,
163
163
parsed_glob .test_glob );
164
164
if (IS_ERR (filtered_suite )) {
165
165
* err = PTR_ERR (filtered_suite );
166
- return filtered ;
166
+ goto err ;
167
167
}
168
168
}
169
169
if (filter_count ) {
@@ -172,15 +172,18 @@ static struct suite_set kunit_filter_suites(const struct suite_set *suite_set,
172
172
parsed_filters [k ], filter_action , err );
173
173
174
174
/* Free previous copy of suite */
175
- if (k > 0 || filter_glob )
175
+ if (k > 0 || filter_glob ) {
176
+ kfree (filtered_suite -> test_cases );
176
177
kfree (filtered_suite );
178
+ }
179
+
177
180
filtered_suite = new_filtered_suite ;
178
181
179
182
if (* err )
180
- return filtered ;
183
+ goto err ;
181
184
if (IS_ERR (filtered_suite )) {
182
185
* err = PTR_ERR (filtered_suite );
183
- return filtered ;
186
+ goto err ;
184
187
}
185
188
if (!filtered_suite )
186
189
break ;
@@ -194,6 +197,10 @@ static struct suite_set kunit_filter_suites(const struct suite_set *suite_set,
194
197
}
195
198
filtered .end = copy ;
196
199
200
+ err :
201
+ if (* err )
202
+ kfree (copy );
203
+
197
204
if (filter_glob ) {
198
205
kfree (parsed_glob .suite_glob );
199
206
kfree (parsed_glob .test_glob );
0 commit comments