1 // SPDX-License-Identifier: GPL-2.0
3 #include "../kselftest_harness.h"
8 #include <sys/syscall.h>
11 #include "linux/ptrace.h"
13 static int sys_ptrace(int request
, pid_t pid
, void *addr
, void *data
)
15 return syscall(SYS_ptrace
, request
, pid
, addr
, data
);
20 struct ptrace_sud_config config
;
28 ASSERT_EQ(0, sys_ptrace(PTRACE_TRACEME
, 0, 0, 0)) {
29 TH_LOG("PTRACE_TRACEME: %m");
31 kill(getpid(), SIGSTOP
);
35 waitpid(child
, &status
, 0);
37 memset(&config
, 0xff, sizeof(config
));
38 config
.mode
= PR_SYS_DISPATCH_ON
;
40 ret
= sys_ptrace(PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG
, child
,
41 (void *)sizeof(config
), &config
);
44 ASSERT_EQ(config
.mode
, PR_SYS_DISPATCH_OFF
);
45 ASSERT_EQ(config
.selector
, 0);
46 ASSERT_EQ(config
.offset
, 0);
47 ASSERT_EQ(config
.len
, 0);
49 config
.mode
= PR_SYS_DISPATCH_ON
;
51 config
.offset
= 0x400000;
54 ret
= sys_ptrace(PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG
, child
,
55 (void *)sizeof(config
), &config
);
59 memset(&config
, 1, sizeof(config
));
60 ret
= sys_ptrace(PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG
, child
,
61 (void *)sizeof(config
), &config
);
64 ASSERT_EQ(config
.mode
, PR_SYS_DISPATCH_ON
);
65 ASSERT_EQ(config
.selector
, 0);
66 ASSERT_EQ(config
.offset
, 0x400000);
67 ASSERT_EQ(config
.len
, 0x1000);