lkml.org 
[lkml]   [2023]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v7 31/39] kselftest/arm64: Allow signals tests to specify an expected si_code
    Currently we ignore si_code unless the expected signal is a SIGSEGV, in
    which case we enforce it being SEGV_ACCERR. Allow test cases to specify
    exactly which si_code should be generated so we can validate this, and
    test for other segfault codes.

    Signed-off-by: Mark Brown <broonie@kernel.org>
    ---
    .../testing/selftests/arm64/signal/test_signals.h | 4 +++
    .../selftests/arm64/signal/test_signals_utils.c | 29 ++++++++++++++--------
    2 files changed, 23 insertions(+), 10 deletions(-)

    diff --git a/tools/testing/selftests/arm64/signal/test_signals.h b/tools/testing/selftests/arm64/signal/test_signals.h
    index 7ada43688c02..ee75a2c25ce7 100644
    --- a/tools/testing/selftests/arm64/signal/test_signals.h
    +++ b/tools/testing/selftests/arm64/signal/test_signals.h
    @@ -71,6 +71,10 @@ struct tdescr {
    * Zero when no signal is expected on success
    */
    int sig_ok;
    + /*
    + * expected si_code for sig_ok, or 0 to not check
    + */
    + int sig_ok_code;
    /* signum expected on unsupported CPU features. */
    int sig_unsupp;
    /* a timeout in second for test completion */
    diff --git a/tools/testing/selftests/arm64/signal/test_signals_utils.c b/tools/testing/selftests/arm64/signal/test_signals_utils.c
    index 89ef95c1af0e..63deca32b0df 100644
    --- a/tools/testing/selftests/arm64/signal/test_signals_utils.c
    +++ b/tools/testing/selftests/arm64/signal/test_signals_utils.c
    @@ -143,16 +143,25 @@ static bool handle_signal_ok(struct tdescr *td,
    "current->token ZEROED...test is probably broken!\n");
    abort();
    }
    - /*
    - * Trying to narrow down the SEGV to the ones generated by Kernel itself
    - * via arm64_notify_segfault(). This is a best-effort check anyway, and
    - * the si_code check may need to change if this aspect of the kernel
    - * ABI changes.
    - */
    - if (td->sig_ok == SIGSEGV && si->si_code != SEGV_ACCERR) {
    - fprintf(stdout,
    - "si_code != SEGV_ACCERR...test is probably broken!\n");
    - abort();
    + if (td->sig_ok_code) {
    + if (si->si_code != td->sig_ok_code) {
    + fprintf(stdout, "si_code is %d not %d\n",
    + si->si_code, td->sig_ok_code);
    + abort();
    + }
    + } else {
    + /*
    + * Trying to narrow down the SEGV to the ones
    + * generated by Kernel itself via
    + * arm64_notify_segfault(). This is a best-effort
    + * check anyway, and the si_code check may need to
    + * change if this aspect of the kernel ABI changes.
    + */
    + if (td->sig_ok == SIGSEGV && si->si_code != SEGV_ACCERR) {
    + fprintf(stdout,
    + "si_code != SEGV_ACCERR...test is probably broken!\n");
    + abort();
    + }
    }
    td->pass = 1;
    /*
    --
    2.39.2

    \
     
     \ /
      Last update: 2023-11-22 10:57    [W:4.059 / U:0.568 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site