From: Joseph Myers Date: Mon, 14 Oct 2019 23:43:52 +0000 (+0000) Subject: Add PTRACE_GET_SYSCALL_INFO from Linux 5.3 to sys/ptrace.h. X-Git-Tag: glibc-2.31~355 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fglibc.git;a=commitdiff_plain;h=d1e411e5c786ce3028d98b4e6fc02c2fcf66ae37 Add PTRACE_GET_SYSCALL_INFO from Linux 5.3 to sys/ptrace.h. Linux 5.3 adds a PTRACE_GET_SYSCALL_INFO constant, with an associated structure and PTRACE_SYSCALL_INFO_* constants. This patch adds these to sys/ptrace.h in glibc (PTRACE_GET_SYSCALL_INFO in each architecture version, the rest in bits/ptrace-shared.h). As with previous such constants and associated structures, the glibc version of the structure is named struct __ptrace_syscall_info. Tested for x86_64, and with build-many-glibcs.py. --- diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h index cf9f29f8854..5f724aeffe4 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h @@ -136,8 +136,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/arm/sys/ptrace.h b/sysdeps/unix/sysv/linux/arm/sys/ptrace.h index 2965248da4d..c586fe4db1d 100644 --- a/sysdeps/unix/sysv/linux/arm/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/arm/sys/ptrace.h @@ -196,8 +196,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/bits/ptrace-shared.h b/sysdeps/unix/sysv/linux/bits/ptrace-shared.h index 1dc1ec79b10..f351d2f45b4 100644 --- a/sysdeps/unix/sysv/linux/bits/ptrace-shared.h +++ b/sysdeps/unix/sysv/linux/bits/ptrace-shared.h @@ -52,6 +52,15 @@ enum __ptrace_eventcodes PTRACE_EVENT_STOP = 128 }; +/* Type of stop for PTRACE_GET_SYSCALL_INFO. */ +enum __ptrace_get_syscall_info_op +{ + PTRACE_SYSCALL_INFO_NONE = 0, + PTRACE_SYSCALL_INFO_ENTRY = 1, + PTRACE_SYSCALL_INFO_EXIT = 2, + PTRACE_SYSCALL_INFO_SECCOMP = 3 +}; + /* Arguments for PTRACE_PEEKSIGINFO. */ struct __ptrace_peeksiginfo_args { @@ -73,6 +82,44 @@ struct __ptrace_seccomp_metadata __uint64_t flags; /* Output: filter's flags. */ }; +/* Results of PTRACE_GET_SYSCALL_INFO. */ +struct __ptrace_syscall_info +{ + __uint8_t op; /* One of the enum + __ptrace_get_syscall_info_op + values. */ + __uint32_t arch __attribute__ ((__aligned__ (4))); /* AUDIT_ARCH_* + value. */ + __uint64_t instruction_pointer; /* Instruction pointer. */ + __uint64_t stack_pointer; /* Stack pointer. */ + union + { + /* System call number and arguments, for + PTRACE_SYSCALL_INFO_ENTRY. */ + struct + { + __uint64_t nr; + __uint64_t args[6]; + } entry; + /* System call return value and error flag, for + PTRACE_SYSCALL_INFO_EXIT. */ + struct + { + __int64_t rval; + __uint8_t is_error; + } exit; + /* System call number, arguments and SECCOMP_RET_DATA portion of + SECCOMP_RET_TRACE return value, for + PTRACE_SYSCALL_INFO_SECCOMP. */ + struct + { + __uint64_t nr; + __uint64_t args[6]; + __uint32_t ret_data; + } seccomp; + }; +}; + /* Perform process tracing functions. REQUEST is one of the values above, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be diff --git a/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h b/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h index 92e3ae901a5..07da89d2c41 100644 --- a/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h @@ -149,8 +149,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h b/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h index 939e7e66901..d993f833d74 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h @@ -38,6 +38,7 @@ __BEGIN_DECLS # undef PTRACE_GETREGSET # undef PTRACE_GETSIGINFO # undef PTRACE_GETSIGMASK +# undef PTRACE_GET_SYSCALL_INFO # undef PTRACE_GETVRREGS # undef PTRACE_GETVSRREGS # undef PTRACE_INTERRUPT @@ -65,6 +66,10 @@ __BEGIN_DECLS # undef PTRACE_SINGLEBLOCK # undef PTRACE_SINGLESTEP # undef PTRACE_SYSCALL +# undef PTRACE_SYSCALL_INFO_NONE +# undef PTRACE_SYSCALL_INFO_ENTRY +# undef PTRACE_SYSCALL_INFO_EXIT +# undef PTRACE_SYSCALL_INFO_SECCOMP # undef PTRACE_TRACEME #endif @@ -241,8 +246,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h b/sysdeps/unix/sysv/linux/s390/sys/ptrace.h index 70b92d113e4..5b4314d0d82 100644 --- a/sysdeps/unix/sysv/linux/s390/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/s390/sys/ptrace.h @@ -79,6 +79,11 @@ __BEGIN_DECLS # undef PTRACE_EVENT_SECCOMP # undef PTRACE_EVENT_STOP # undef PTRACE_PEEKSIGINFO_SHARED +# undef PTRACE_GET_SYSCALL_INFO +# undef PTRACE_SYSCALL_INFO_NONE +# undef PTRACE_SYSCALL_INFO_ENTRY +# undef PTRACE_SYSCALL_INFO_EXIT +# undef PTRACE_SYSCALL_INFO_SECCOMP #endif /* Type of the REQUEST argument to `ptrace.' */ enum __ptrace_request @@ -198,6 +203,10 @@ enum __ptrace_request PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e, +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO + PTRACE_PEEKUSR_AREA = 0x5000, #define PTRACE_PEEKUSR_AREA PTRACE_PEEKUSR_AREA diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h b/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h index fd0fc37e149..73e54036a8a 100644 --- a/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h @@ -217,8 +217,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/sys/ptrace.h b/sysdeps/unix/sysv/linux/sys/ptrace.h index c99fde3441c..61981e849ce 100644 --- a/sysdeps/unix/sysv/linux/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/sys/ptrace.h @@ -166,8 +166,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO }; diff --git a/sysdeps/unix/sysv/linux/x86/sys/ptrace.h b/sysdeps/unix/sysv/linux/x86/sys/ptrace.h index 7f0c16fd3e1..9f21385fa0b 100644 --- a/sysdeps/unix/sysv/linux/x86/sys/ptrace.h +++ b/sysdeps/unix/sysv/linux/x86/sys/ptrace.h @@ -186,8 +186,12 @@ enum __ptrace_request #define PTRACE_SECCOMP_GET_FILTER PTRACE_SECCOMP_GET_FILTER /* Get seccomp BPF filter metadata. */ - PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SECCOMP_GET_METADATA = 0x420d, #define PTRACE_SECCOMP_GET_METADATA PTRACE_SECCOMP_GET_METADATA + + /* Get information about system call. */ + PTRACE_GET_SYSCALL_INFO = 0x420e +#define PTRACE_GET_SYSCALL_INFO PTRACE_GET_SYSCALL_INFO };