diff options
author | David Gow <davidgow@google.com> | 2022-04-02 06:35:29 +0200 |
---|---|---|
committer | Shuah Khan <skhan@linuxfoundation.org> | 2022-04-05 21:32:50 +0200 |
commit | 59729170afcd4900e08997a482467ffda8d88c7f (patch) | |
tree | beff30b890129fc822ada22e2480f42c69cf84bf /include/kunit | |
parent | list: test: Test the hlist structure (diff) | |
download | linux-59729170afcd4900e08997a482467ffda8d88c7f.tar.xz linux-59729170afcd4900e08997a482467ffda8d88c7f.zip |
kunit: Make kunit_remove_resource() idempotent
The kunit_remove_resource() function is used to unlink a resource from
the list of resources in the test, making it no longer show up in
kunit_find_resource().
However, this could lead to a race condition if two threads called
kunit_remove_resource() on the same resource at the same time: the
resource would be removed from the list twice (causing a crash at the
second list_del()), and the refcount for the resource would be
decremented twice (instead of once, for the reference held by the
resource list).
Fix both problems, the first by using list_del_init(), and the second by
checking if the resource has already been removed using list_empty(),
and only decrementing its refcount if it has not.
Also add a KUnit test for the kunit_remove_resource() function which
tests this behaviour.
Reported-by: Daniel Latypov <dlatypov@google.com>
Signed-off-by: David Gow <davidgow@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Diffstat (limited to 'include/kunit')
0 files changed, 0 insertions, 0 deletions