ptrace support has been tested on Debian/s390x.

It should also work on s390 but this has not been tested.
I have not added a compat mode to trace 31-bit binaries on s390x
due to the lack of a test system.
This commit is contained in:
Todd C. Miller
2022-05-16 13:22:31 -06:00
parent 2eb8ff17be
commit 7329a4a864
2 changed files with 11 additions and 19 deletions

View File

@@ -196,29 +196,21 @@
# define reg_arg2(x) (x).a1 # define reg_arg2(x) (x).a1
# define reg_arg3(x) (x).a2 # define reg_arg3(x) (x).a2
# define reg_arg4(x) (x).a3 # define reg_arg4(x) (x).a3
#elif defined(__s390x__)
/* Untested/incomplete.
* s390x may not support setting the system call return via ptrace.
*/
# define SECCOMP_AUDIT_ARCH AUDIT_ARCH_S390X
# define sudo_pt_regs s390_regs
# define reg_syscall(x) (x).gprs[1] /* r1 */
# define reg_retval(x) (x).gprs[2] /* r2 */
# define reg_sp(x) (x).gprs[15] /* r15 */
# define reg_arg1(x) (x).gprs[2] /* r2 */
# define reg_arg2(x) (x).gprs[3] /* r3 */
# define reg_arg3(x) (x).gprs[4] /* r4 */
# define reg_arg4(x) (x).gprs[5] /* r6 */
#elif defined(__s390__) #elif defined(__s390__)
/* Untested/incomplete. /*
* s390 may not support setting the system call return via ptrace. * Both the syscall number and return value are stored in r2 for
* the s390 ptrace API. The first argument is stored in orig_gpr2.
*/ */
# define SECCOMP_AUDIT_ARCH AUDIT_ARCH_S390 # if defined(__s390x__)
# define SECCOMP_AUDIT_ARCH AUDIT_ARCH_S390X
# else
# define SECCOMP_AUDIT_ARCH AUDIT_ARCH_S390
# endif
# define sudo_pt_regs s390_regs # define sudo_pt_regs s390_regs
# define reg_syscall(x) (x).gprs[1] /* r1 */ # define reg_syscall(x) (x).gprs[2] /* r2 */
# define reg_retval(x) (x).gprs[2] /* r2 */ # define reg_retval(x) (x).gprs[2] /* r2 */
# define reg_sp(x) (x).gprs[15] /* r15 */ # define reg_sp(x) (x).gprs[15] /* r15 */
# define reg_arg1(x) (x).gprs[2] /* r2 */ # define reg_arg1(x) (x).orig_gpr2 /* r2 */
# define reg_arg2(x) (x).gprs[3] /* r3 */ # define reg_arg2(x) (x).gprs[3] /* r3 */
# define reg_arg3(x) (x).gprs[4] /* r4 */ # define reg_arg3(x) (x).gprs[4] /* r4 */
# define reg_arg4(x) (x).gprs[5] /* r6 */ # define reg_arg4(x) (x).gprs[5] /* r6 */

View File

@@ -96,7 +96,7 @@ union sudo_token_un {
*/ */
#if defined(_PATH_SUDO_INTERCEPT) && defined(__linux__) #if defined(_PATH_SUDO_INTERCEPT) && defined(__linux__)
# if defined(HAVE_DECL_SECCOMP_SET_MODE_FILTER) && HAVE_DECL_SECCOMP_SET_MODE_FILTER # if defined(HAVE_DECL_SECCOMP_SET_MODE_FILTER) && HAVE_DECL_SECCOMP_SET_MODE_FILTER
# if defined(__amd64__) || defined(__i386__) || defined(__aarch64__) || defined(__arm__) || defined(__powerpc__) || (defined(__riscv) && __riscv_xlen == 64) # if defined(__amd64__) || defined(__i386__) || defined(__aarch64__) || defined(__arm__) || defined(__powerpc__) || (defined(__riscv) && __riscv_xlen == 64) || defined(__s390__)
# ifndef HAVE_PTRACE_INTERCEPT # ifndef HAVE_PTRACE_INTERCEPT
# define HAVE_PTRACE_INTERCEPT 1 # define HAVE_PTRACE_INTERCEPT 1
# endif /* HAVE_PTRACE_INTERCEPT */ # endif /* HAVE_PTRACE_INTERCEPT */