diff options
author | Mickaël Salaün <mic@digikod.net> | 2024-04-08 09:46:22 +0200 |
---|---|---|
committer | Shuah Khan <skhan@linuxfoundation.org> | 2024-05-06 14:22:02 -0600 |
commit | 3a35c13007dea132a65f07de05c26b87837fadc2 (patch) | |
tree | b4b11cedb2ba19351da4ccccd0c71d08bfe30460 /kernel | |
parent | 53026ff63bb07c04a0e962a74723eb10ff6f9dc7 (diff) | |
download | linux-stable-3a35c13007dea132a65f07de05c26b87837fadc2.tar.gz linux-stable-3a35c13007dea132a65f07de05c26b87837fadc2.tar.bz2 linux-stable-3a35c13007dea132a65f07de05c26b87837fadc2.zip |
kunit: Handle test faults
Previously, when a kernel test thread crashed (e.g. NULL pointer
dereference, general protection fault), the KUnit test hanged for 30
seconds and exited with a timeout error.
Fix this issue by waiting on task_struct->vfork_done instead of the
custom kunit_try_catch.try_completion, and track the execution state by
initially setting try_result with -EINTR and only setting it to 0 if
the test passed.
Fix kunit_generic_run_threadfn_adapter() signature by returning 0
instead of calling kthread_complete_and_exit(). Because thread's exit
code is never checked, always set it to 0 to make it clear. To make
this explicit, export kthread_exit() for KUnit tests built as module.
Fix the -EINTR error message, which couldn't be reached until now.
This is tested with a following patch.
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: David Gow <davidgow@google.com>
Tested-by: Rae Moar <rmoar@google.com>
Signed-off-by: Mickaël Salaün <mic@digikod.net>
Link: https://lore.kernel.org/r/20240408074625.65017-5-mic@digikod.net
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/kthread.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c index c5e40830c1f2..f7be976ff88a 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -315,6 +315,7 @@ void __noreturn kthread_exit(long result) kthread->result = result; do_exit(0); } +EXPORT_SYMBOL(kthread_exit); /** * kthread_complete_and_exit - Exit the current kthread. |