lkml.org 
[lkml]   [2024]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH RFT v5 6/7] selftests/clone3: Allow tests to flag if -E2BIG is a valid error code
    The clone_args structure is extensible, with the syscall passing in the
    length of the structure. Inside the kernel we use copy_struct_from_user()
    to read the struct but this has the unfortunate side effect of silently
    accepting some overrun in the structure size providing the extra data is
    all zeros. This means that we can't discover the clone3() features that
    the running kernel supports by simply probing with various struct sizes.
    We need to check this for the benefit of test systems which run newer
    kselftests on old kernels.

    Add a flag which can be set on a test to indicate that clone3() may return
    -E2BIG due to the use of newer struct versions. Currently no tests need
    this but it will become an issue for testing clone3() support for shadow
    stacks, the support for shadow stacks is already present on x86.

    Signed-off-by: Mark Brown <broonie@kernel.org>
    ---
    tools/testing/selftests/clone3/clone3.c | 6 ++++++
    1 file changed, 6 insertions(+)

    diff --git a/tools/testing/selftests/clone3/clone3.c b/tools/testing/selftests/clone3/clone3.c
    index 1108bd8e36d6..6adbfd14c841 100644
    --- a/tools/testing/selftests/clone3/clone3.c
    +++ b/tools/testing/selftests/clone3/clone3.c
    @@ -39,6 +39,7 @@ struct test {
    size_t size;
    size_function size_function;
    int expected;
    + bool e2big_valid;
    enum test_mode test_mode;
    filter_function filter;
    };
    @@ -141,6 +142,11 @@ static void test_clone3(const struct test *test)
    ksft_print_msg("[%d] clone3() with flags says: %d expected %d\n",
    getpid(), ret, test->expected);
    if (ret != test->expected) {
    + if (test->e2big_valid && ret == -E2BIG) {
    + ksft_print_msg("Test reported -E2BIG\n");
    + ksft_test_result_skip("%s\n", test->name);
    + return;
    + }
    ksft_print_msg(
    "[%d] Result (%d) is different than expected (%d)\n",
    getpid(), ret, test->expected);
    --
    2.30.2


    \
     
     \ /
      Last update: 2024-05-27 14:46    [W:2.532 / U:0.480 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site