• Mickaël Salaün's avatar
    kunit: Handle test faults · 3a35c130
    Mickaël Salaün authored
    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: default avatarKees Cook <keescook@chromium.org>
    Reviewed-by: default avatarDavid Gow <davidgow@google.com>
    Tested-by: default avatarRae Moar <rmoar@google.com>
    Signed-off-by: default avatarMickaël Salaün <mic@digikod.net>
    Link: https://lore.kernel.org/r/20240408074625.65017-5-mic@digikod.netSigned-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
    3a35c130
kthread.c 42.3 KB