lkml.org 
[lkml]   [2023]   [Mar]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v14 4/4] selftest,ptrace: Add selftest for syscall user dispatch config api
    Date
    Validate that the following new ptrace requests work as expected

    * PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG
    - returns the contents of task->syscall_dispatch if enabled

    * PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG
    - sets the contents of task->syscall_dispatch

    Signed-off-by: Gregory Price <gregory.price@memverge.com>
    ---
    tools/testing/selftests/ptrace/.gitignore | 1 +
    tools/testing/selftests/ptrace/Makefile | 2 +-
    tools/testing/selftests/ptrace/get_set_sud.c | 72 ++++++++++++++++++++
    3 files changed, 74 insertions(+), 1 deletion(-)
    create mode 100644 tools/testing/selftests/ptrace/get_set_sud.c

    diff --git a/tools/testing/selftests/ptrace/.gitignore b/tools/testing/selftests/ptrace/.gitignore
    index 792318aaa30c..b7dde152e75a 100644
    --- a/tools/testing/selftests/ptrace/.gitignore
    +++ b/tools/testing/selftests/ptrace/.gitignore
    @@ -1,4 +1,5 @@
    # SPDX-License-Identifier: GPL-2.0-only
    get_syscall_info
    +get_set_sud
    peeksiginfo
    vmaccess
    diff --git a/tools/testing/selftests/ptrace/Makefile b/tools/testing/selftests/ptrace/Makefile
    index 2f1f532c39db..33a36b73bcb9 100644
    --- a/tools/testing/selftests/ptrace/Makefile
    +++ b/tools/testing/selftests/ptrace/Makefile
    @@ -1,6 +1,6 @@
    # SPDX-License-Identifier: GPL-2.0-only
    CFLAGS += -std=c99 -pthread -iquote../../../../include/uapi -Wall

    -TEST_GEN_PROGS := get_syscall_info peeksiginfo vmaccess
    +TEST_GEN_PROGS := get_syscall_info peeksiginfo vmaccess get_set_sud

    include ../lib.mk
    diff --git a/tools/testing/selftests/ptrace/get_set_sud.c b/tools/testing/selftests/ptrace/get_set_sud.c
    new file mode 100644
    index 000000000000..5297b10d25c3
    --- /dev/null
    +++ b/tools/testing/selftests/ptrace/get_set_sud.c
    @@ -0,0 +1,72 @@
    +// SPDX-License-Identifier: GPL-2.0
    +#define _GNU_SOURCE
    +#include "../kselftest_harness.h"
    +#include <stdio.h>
    +#include <string.h>
    +#include <errno.h>
    +#include <sys/wait.h>
    +#include <sys/syscall.h>
    +#include <sys/prctl.h>
    +
    +#include "linux/ptrace.h"
    +
    +static int sys_ptrace(int request, pid_t pid, void *addr, void *data)
    +{
    + return syscall(SYS_ptrace, request, pid, addr, data);
    +}
    +
    +TEST(get_set_sud)
    +{
    + struct ptrace_sud_config config;
    + pid_t child;
    + int ret = 0;
    + int status;
    +
    + child = fork();
    + ASSERT_GE(child, 0);
    + if (child == 0) {
    + ASSERT_EQ(0, sys_ptrace(PTRACE_TRACEME, 0, 0, 0)) {
    + TH_LOG("PTRACE_TRACEME: %m");
    + }
    + kill(getpid(), SIGSTOP);
    + _exit(1);
    + }
    +
    + waitpid(child, &status, 0);
    +
    + memset(&config, 0xff, sizeof(config));
    + config.mode = PR_SYS_DISPATCH_ON;
    +
    + ret = sys_ptrace(PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG, child,
    + (void *)sizeof(config), &config);
    +
    + ASSERT_EQ(ret, 0);
    + ASSERT_EQ(config.mode, PR_SYS_DISPATCH_OFF);
    + ASSERT_EQ(config.selector, 0);
    + ASSERT_EQ(config.offset, 0);
    + ASSERT_EQ(config.len, 0);
    +
    + config.mode = PR_SYS_DISPATCH_ON;
    + config.selector = 0;
    + config.offset = 0x400000;
    + config.len = 0x1000;
    +
    + ret = sys_ptrace(PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG, child,
    + (void *)sizeof(config), &config);
    +
    + ASSERT_EQ(ret, 0);
    +
    + memset(&config, 1, sizeof(config));
    + ret = sys_ptrace(PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG, child,
    + (void *)sizeof(config), &config);
    +
    + ASSERT_EQ(ret, 0);
    + ASSERT_EQ(config.mode, PR_SYS_DISPATCH_ON);
    + ASSERT_EQ(config.selector, 0);
    + ASSERT_EQ(config.offset, 0x400000);
    + ASSERT_EQ(config.len, 0x1000);
    +
    + kill(child, SIGKILL);
    +}
    +
    +TEST_HARNESS_MAIN
    --
    2.39.1
    \
     
     \ /
      Last update: 2023-03-28 18:50    [W:2.469 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site