diff --git a/SOURCES/0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch b/SOURCES/0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch new file mode 100644 index 0000000..d38d55a --- /dev/null +++ b/SOURCES/0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch @@ -0,0 +1,102 @@ +From c7e0ea6d712eb214dafe7e9eae57661d9a427ea7 Mon Sep 17 00:00:00 2001 +From: "Dmitry V. Levin" +Date: Mon, 28 Oct 2024 08:00:00 +0000 +Subject: [PATCH 183/185] syscall: do not use uninitialized parts of struct + ptrace_syscall_info + +* src/syscall.c (ptrace_syscall_info_is_entry, +ptrace_syscall_info_is_exit): New functions. +(get_scno): Replace ptrace_syscall_info_is_valid() with +ptrace_syscall_info_is_entry(). +(get_error): Replace ptrace_syscall_info_is_valid() with +ptrace_syscall_info_is_exit(). +(get_syscall_regs): Fall back to get_regs() if strace_get_syscall_info() +succeeded but couldn't obtain the necessary data. + +Resolves: https://github.com/strace/strace/issues/322 +--- + src/syscall.c | 40 +++++++++++++++++++++++++++++++++++----- + 1 file changed, 35 insertions(+), 5 deletions(-) + +diff --git a/src/syscall.c b/src/syscall.c +index a6692721a..1f4d86dc1 100644 +--- a/src/syscall.c ++++ b/src/syscall.c +@@ -1082,6 +1082,21 @@ ptrace_syscall_info_is_valid(void) + ptrace_sci.op <= PTRACE_SYSCALL_INFO_SECCOMP; + } + ++static bool ++ptrace_syscall_info_is_entry(void) ++{ ++ return ptrace_get_syscall_info_supported && ++ (ptrace_sci.op == PTRACE_SYSCALL_INFO_ENTRY || ++ ptrace_sci.op == PTRACE_SYSCALL_INFO_SECCOMP); ++} ++ ++static bool ++ptrace_syscall_info_is_exit(void) ++{ ++ return ptrace_get_syscall_info_supported && ++ ptrace_sci.op == PTRACE_SYSCALL_INFO_EXIT; ++} ++ + #define XLAT_MACROS_ONLY + #include "xlat/nt_descriptor_types.h" + #undef XLAT_MACROS_ONLY +@@ -1376,8 +1391,23 @@ get_syscall_regs(struct tcb *tcp) + if (get_regs_error != -1) + return get_regs_error; + +- if (ptrace_get_syscall_info_supported) +- return strace_get_syscall_info(tcp) ? 0 : get_regs_error; ++ if (ptrace_get_syscall_info_supported) { ++ if (!strace_get_syscall_info(tcp)) ++ return get_regs_error; ++ ++ if ((entering(tcp) && ptrace_syscall_info_is_entry()) || ++ (exiting(tcp) && ptrace_syscall_info_is_exit())) ++ return 0; ++ ++ /* ++ * PTRACE_GET_SYSCALL_INFO succeeded but didn't help, ++ * falling back to get_regs(). ++ * ++ * This can happen when get_syscall_regs() is called ++ * from startup_tcb() via get_scno(). ++ */ ++ debug_func_msg("ptrace_sci.op = %d", ptrace_sci.op); ++ } + + return get_regs(tcp); + } +@@ -1408,7 +1438,7 @@ get_scno(struct tcb *tcp) + if (get_syscall_regs(tcp) < 0) + return -1; + +- if (ptrace_syscall_info_is_valid()) { ++ if (ptrace_syscall_info_is_entry()) { + /* Apply arch-specific workarounds. */ + int rc = arch_check_scno(tcp); + if (rc != 1) +@@ -1456,7 +1486,7 @@ get_scno(struct tcb *tcp) + static int + get_syscall_args(struct tcb *tcp) + { +- if (ptrace_syscall_info_is_valid()) { ++ if (ptrace_syscall_info_is_entry()) { + const unsigned int n = + MIN(ARRAY_SIZE(tcp->u_arg), + ARRAY_SIZE(ptrace_sci.entry.args)); +@@ -1507,7 +1537,7 @@ get_syscall_result(struct tcb *tcp) + static void + get_error(struct tcb *tcp, const bool check_errno) + { +- if (ptrace_syscall_info_is_valid()) { ++ if (ptrace_syscall_info_is_exit()) { + if (ptrace_sci.exit.is_error) { + tcp->u_rval = -1; + tcp->u_error = -ptrace_sci.exit.rval; +-- +2.13.6 + diff --git a/SOURCES/0184-startup_tcb-add-a-comment.patch b/SOURCES/0184-startup_tcb-add-a-comment.patch new file mode 100644 index 0000000..39e7757 --- /dev/null +++ b/SOURCES/0184-startup_tcb-add-a-comment.patch @@ -0,0 +1,37 @@ +From 2048c136ba6edc4282dbc976c499e038d5b60c03 Mon Sep 17 00:00:00 2001 +From: "Dmitry V. Levin" +Date: Mon, 28 Oct 2024 08:00:00 +0000 +Subject: [PATCH 184/185] startup_tcb: add a comment + +* src/strace.c (startup_tcb): Add a comment explaining why it is safe +to call get_scno(). +--- + src/strace.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/src/strace.c b/src/strace.c +index 45ab48c43..1a9d53bc8 100644 +--- a/src/strace.c ++++ b/src/strace.c +@@ -3549,8 +3549,16 @@ startup_tcb(struct tcb *tcp) + } + } + +- if ((tcp->flags & TCB_GRABBED) && (get_scno(tcp) == 1)) +- tcp->s_prev_ent = tcp->s_ent; ++ if (tcp->flags & TCB_GRABBED) { ++ /* ++ * There is no guarantee the state of the tracee is such that ++ * would allow get_scno() to obtain meaningful information. ++ * However, if the tracee is not in a syscall, then the garbage ++ * obtained by get_scno() is not going to be used. ++ */ ++ if (get_scno(tcp) == 1) ++ tcp->s_prev_ent = tcp->s_ent; ++ } + + if (cflag) { + tcp->atime = tcp->stime; +-- +2.13.6 + diff --git a/SOURCES/0185-tests-add-another-test-of-restart_syscall-decoding.patch b/SOURCES/0185-tests-add-another-test-of-restart_syscall-decoding.patch new file mode 100644 index 0000000..0c73f57 --- /dev/null +++ b/SOURCES/0185-tests-add-another-test-of-restart_syscall-decoding.patch @@ -0,0 +1,129 @@ +From 3bf08cbb388a89014252bdfe5143324bdaa4dc46 Mon Sep 17 00:00:00 2001 +From: "Dmitry V. Levin" +Date: Mon, 28 Oct 2024 08:00:00 +0000 +Subject: [PATCH 185/185] tests: add another test of restart_syscall decoding + +* tests/restart_syscall-p.test: New test. +* tests/restart_syscall-p.expected: New file. +* tests/Makefile.am (DECODER_TESTS): Add restart_syscall-p.test. +(check_DATA): Add restart_syscall-p.expected. +--- + tests/Makefile.am | 2 ++ + tests/restart_syscall-p.expected | 2 ++ + tests/restart_syscall-p.test | 20 ++++++++++++++++++++ + 3 files changed, 24 insertions(+) + create mode 100644 tests/restart_syscall-p.expected + create mode 100755 tests/restart_syscall-p.test + +Index: strace-5.18/tests/Makefile.am +=================================================================== +--- strace-5.18.orig/tests/Makefile.am 2022-06-17 13:45:22.000000000 +0200 ++++ strace-5.18/tests/Makefile.am 2024-11-01 14:29:01.292879707 +0100 +@@ -499,6 +499,7 @@ + prctl-seccomp-strict.test \ + qual_fault-exit_group.test \ + readv.test \ ++ restart_syscall-p.test \ + rt_sigaction.test \ + scm_rights-fd.test \ + seccomp-strict.test \ +@@ -675,6 +676,7 @@ + qualify_personality_empty.in \ + quotactl.h \ + regex.in \ ++ restart_syscall-p.expected \ + rt_sigaction.awk \ + run.sh \ + sched.in \ +Index: strace-5.18/tests/restart_syscall-p.expected +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ strace-5.18/tests/restart_syscall-p.expected 2024-11-01 14:29:01.292879707 +0100 +@@ -0,0 +1,2 @@ ++restart_syscall(<... resuming interrupted nanosleep ...>) = 0 ++exit_group(0) = ? +Index: strace-5.18/tests/restart_syscall-p.test +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ strace-5.18/tests/restart_syscall-p.test 2024-11-01 14:29:01.292879707 +0100 +@@ -0,0 +1,20 @@ ++#!/bin/sh ++# ++# Check restart_syscall decoding. ++# ++# Copyright (c) 2015-2024 The strace developers. ++# All rights reserved. ++# ++# SPDX-License-Identifier: GPL-2.0-or-later ++ ++. "${srcdir=.}/init.sh" ++ ++run_prog ../sleep 0 ++ ++../set_ptracer_any ../sleep 2 > /dev/null & ++tracee_pid=$! ++ ++../sleep 1 ++ ++run_strace -qq -a14 -p $tracee_pid ++match_diff +Index: strace-5.18/tests-m32/Makefile.in +=================================================================== +--- strace-5.18.orig/tests-m32/Makefile.in 2022-06-18 20:33:58.000000000 +0200 ++++ strace-5.18/tests-m32/Makefile.in 2024-11-01 14:29:01.295879673 +0100 +@@ -9232,6 +9232,7 @@ + prctl-seccomp-strict.test \ + qual_fault-exit_group.test \ + readv.test \ ++ restart_syscall-p.test \ + rt_sigaction.test \ + scm_rights-fd.test \ + seccomp-strict.test \ +@@ -9403,6 +9404,7 @@ + qualify_personality_empty.in \ + quotactl.h \ + regex.in \ ++ restart_syscall-p.expected \ + rt_sigaction.awk \ + run.sh \ + sched.in \ +Index: strace-5.18/tests-mx32/Makefile.in +=================================================================== +--- strace-5.18.orig/tests-mx32/Makefile.in 2022-06-18 20:33:58.000000000 +0200 ++++ strace-5.18/tests-mx32/Makefile.in 2024-11-01 14:29:01.297879650 +0100 +@@ -9232,6 +9232,7 @@ + prctl-seccomp-strict.test \ + qual_fault-exit_group.test \ + readv.test \ ++ restart_syscall-p.test \ + rt_sigaction.test \ + scm_rights-fd.test \ + seccomp-strict.test \ +@@ -9403,6 +9404,7 @@ + qualify_personality_empty.in \ + quotactl.h \ + regex.in \ ++ restart_syscall-p.expected \ + rt_sigaction.awk \ + run.sh \ + sched.in \ +Index: strace-5.18/tests/Makefile.in +=================================================================== +--- strace-5.18.orig/tests/Makefile.in 2022-06-18 20:33:59.000000000 +0200 ++++ strace-5.18/tests/Makefile.in 2024-11-01 14:29:01.299879628 +0100 +@@ -9231,6 +9231,7 @@ + prctl-seccomp-strict.test \ + qual_fault-exit_group.test \ + readv.test \ ++ restart_syscall-p.test \ + rt_sigaction.test \ + scm_rights-fd.test \ + seccomp-strict.test \ +@@ -9402,6 +9403,7 @@ + qualify_personality_empty.in \ + quotactl.h \ + regex.in \ ++ restart_syscall-p.expected \ + rt_sigaction.awk \ + run.sh \ + sched.in \ diff --git a/SOURCES/0186-tests-workaround-net-yy-inet-for-new-kernels.patch b/SOURCES/0186-tests-workaround-net-yy-inet-for-new-kernels.patch new file mode 100644 index 0000000..e24b974 --- /dev/null +++ b/SOURCES/0186-tests-workaround-net-yy-inet-for-new-kernels.patch @@ -0,0 +1,108 @@ +From e9d784ecd3ef0c5af9f8c74a830e797d773d71cb Mon Sep 17 00:00:00 2001 +From: "Dmitry V. Levin" +Date: Sun, 21 Apr 2024 08:00:00 +0000 +Subject: [PATCH] tests: workaround net-yy-inet* for new kernels + +Starting with Linux kernel commit v6.8-rc1~131^2~223, NETLINK_INET_DIAG +works also for bound-only sockets. As there is no easy way to tell +whether the running kernel contains that commit, the test cannot easily +predict the kernel behavior in case of sockets in bound-only state. +Workaround this by skipping the corresponding part of the test. + +* tests/net-yy-inet.test: Filter out listen() calls. +* tests/net-yy-inet.c (main): Do not print expected output for listen() +syscall. + +Resolves: https://github.com/strace/strace/issues/299 +--- + tests/net-yy-inet.c | 2 -- + tests/net-yy-inet.test | 6 +++++- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/tests/net-yy-inet.c b/tests/net-yy-inet.c +index 1a83548bf..7f8e05783 100644 +--- a/tests/net-yy-inet.c ++++ b/tests/net-yy-inet.c +@@ -63,8 +63,6 @@ main(void) + + if (listen(listen_fd, 1)) + perror_msg_and_skip("listen"); +- printf("listen(%d<" TCP_STR ":[%lu]>, 1) = 0\n", +- listen_fd, listen_inode); + + memset(listen_sa, 0, sizeof(addr)); + *len = sizeof(addr); +diff --git a/tests/net-yy-inet.test b/tests/net-yy-inet.test +index 9a3f851bf..d45414bcb 100755 +--- a/tests/net-yy-inet.test ++++ b/tests/net-yy-inet.test +@@ -17,5 +17,9 @@ run_prog > /dev/null + run_strace -a22 -yy -eclose,network $args > "$EXP" + + # Filter out close() calls made by ld.so and libc. +-sed -n '/socket/,$p' < "$LOG" > "$OUT" ++# ++# Filter out listen() call as we cannot easily predict the kernel ++# behaviour because there is no easy way to tell whether the Linux kernel ++# contains commit v6.8-rc1~131^2~223. ++sed -n '/^listen/d;/^socket/,$p' < "$LOG" > "$OUT" + match_diff "$OUT" "$EXP" +diff --git a/tests-m32/net-yy-inet.c b/tests-m32/net-yy-inet.c +index 1a83548bf..7f8e05783 100644 +--- a/tests-m32/net-yy-inet.c ++++ b/tests-m32/net-yy-inet.c +@@ -63,8 +63,6 @@ main(void) + + if (listen(listen_fd, 1)) + perror_msg_and_skip("listen"); +- printf("listen(%d<" TCP_STR ":[%lu]>, 1) = 0\n", +- listen_fd, listen_inode); + + memset(listen_sa, 0, sizeof(addr)); + *len = sizeof(addr); +diff --git a/tests-m32/net-yy-inet.test b/tests-m32/net-yy-inet.test +index 9a3f851bf..d45414bcb 100755 +--- a/tests-m32/net-yy-inet.test ++++ b/tests-m32/net-yy-inet.test +@@ -17,5 +17,9 @@ run_prog > /dev/null + run_strace -a22 -yy -eclose,network $args > "$EXP" + + # Filter out close() calls made by ld.so and libc. +-sed -n '/socket/,$p' < "$LOG" > "$OUT" ++# ++# Filter out listen() call as we cannot easily predict the kernel ++# behaviour because there is no easy way to tell whether the Linux kernel ++# contains commit v6.8-rc1~131^2~223. ++sed -n '/^listen/d;/^socket/,$p' < "$LOG" > "$OUT" + match_diff "$OUT" "$EXP" +diff --git a/tests-mx32/net-yy-inet.c b/tests-mx32/net-yy-inet.c +index 1a83548bf..7f8e05783 100644 +--- a/tests-mx32/net-yy-inet.c ++++ b/tests-mx32/net-yy-inet.c +@@ -63,8 +63,6 @@ main(void) + + if (listen(listen_fd, 1)) + perror_msg_and_skip("listen"); +- printf("listen(%d<" TCP_STR ":[%lu]>, 1) = 0\n", +- listen_fd, listen_inode); + + memset(listen_sa, 0, sizeof(addr)); + *len = sizeof(addr); +diff --git a/tests-mx32/net-yy-inet.test b/tests-mx32/net-yy-inet.test +index 9a3f851bf..d45414bcb 100755 +--- a/tests-mx32/net-yy-inet.test ++++ b/tests-mx32/net-yy-inet.test +@@ -17,5 +17,9 @@ run_prog > /dev/null + run_strace -a22 -yy -eclose,network $args > "$EXP" + + # Filter out close() calls made by ld.so and libc. +-sed -n '/socket/,$p' < "$LOG" > "$OUT" ++# ++# Filter out listen() call as we cannot easily predict the kernel ++# behaviour because there is no easy way to tell whether the Linux kernel ++# contains commit v6.8-rc1~131^2~223. ++sed -n '/^listen/d;/^socket/,$p' < "$LOG" > "$OUT" + match_diff "$OUT" "$EXP" +-- +2.13.6 + diff --git a/SOURCES/0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch b/SOURCES/0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch new file mode 100644 index 0000000..715b3e8 --- /dev/null +++ b/SOURCES/0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch @@ -0,0 +1,530 @@ +From 660186018897b386fb05d7951aec57a81211a1a4 Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Wed, 21 Aug 2024 15:32:42 +0200 +Subject: [PATCH] tests: avoid linkat--secontext_mismatch failures on + setfilecon errors + +linkat--secontext_mismatch can fail if setfilecon cannot update SELinux +context (for example, that happens when the test is run under +an unprivileged user and tries to change the type to unconfined_t). +Avoid it by actually checking the return code and skipping the test +if there are errors reported by reset_secontext_file +or update_secontext_field calls. + +* tests/secontext.h: Include . +(reset_secontext_file, update_secontext_field): Change the return type +from void to int. +[!(TEST_SECONTEXT && HAVE_SELINUX_RUNTIME)] (reset_secontext_file, +update_secontext_field): Return -ENOSYS. +* tests/secontext.c: (reset_secontext_file): Change the return type +to int; save the setfilecon return value to ret and reset it to -errno +if the latter is non-zero; return ret. +(update_secontext_field): Change the return type to int; return -1 +if ctx is NULL; save the setfilecon return value to ret and reset +it to -errno if the latter is non-zero; return ret. +* tests/linkat.c: Include "xlat.h". +(secontext_types_data, secontext_types): New constants. +(mangle_secontext_field): Store the new field value in the new variable; +store the update_secontext_field return value to the ret variable, error +and skip if it is non-zero. +(main): Error and skip if reset_secontext_file returns non-zero. + +Reported-by: Edjunior Machado +--- + tests/linkat.c | 34 ++++++++++++++++++++++++++++++---- + tests/secontext.c | 19 ++++++++++++++----- + tests/secontext.h | 14 +++++++++----- + 3 files changed, 53 insertions(+), 14 deletions(-) + +diff --git a/tests/linkat.c b/tests/linkat.c +index 1d0ee3c9f..832392ca0 100644 +--- a/tests/linkat.c ++++ b/tests/linkat.c +@@ -19,8 +19,20 @@ + #include + + #include "secontext.h" ++#include "xlat.h" + #include "xmalloc.h" + ++struct xlat_data secontext_types_data[] = { ++ [SECONTEXT_USER] = XLAT_PAIR(SECONTEXT_USER, "user"), ++ [SECONTEXT_ROLE] = XLAT_PAIR(SECONTEXT_ROLE, "role"), ++ [SECONTEXT_TYPE] = XLAT_PAIR(SECONTEXT_TYPE, "type"), ++}; ++struct xlat secontext_types = { ++ .data = secontext_types_data, ++ .size = ARRAY_SIZE(secontext_types_data), ++ .type = XT_INDEXED, ++}; ++ + static void + mangle_secontext_field(const char *path, enum secontext_field field, + const char *new_val, const char *fallback_val) +@@ -29,10 +41,18 @@ mangle_secontext_field(const char *path, enum secontext_field field, + if (!orig) + return; + +- update_secontext_field(path, field, +- strcmp(new_val, orig) ? new_val : fallback_val); ++ const char *new = strcmp(new_val, orig) ? new_val : fallback_val; + + free(orig); ++ ++ int ret = update_secontext_field(path, field, new); ++ if (ret) { ++ error_msg_and_skip("Failed to mangle secontext %s for " ++ "'%s' to %s: %d", ++ sprintxval_abbrev(&secontext_types, field, ++ "SECONTEXT_???"), ++ path, new, ret); ++ } + } + + int +@@ -103,8 +123,14 @@ main(void) + if (close(fd_sample_2)) + perror_msg_and_fail("close"); + +- if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) +- reset_secontext_file(sample_1); ++ if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) { ++ int ret; ++ if ((ret = reset_secontext_file(sample_1))) { ++ errno = -ret; ++ perror_msg_and_skip("Reset secontext for '%s'", ++ sample_1); ++ } ++ } + + free(sample_1_secontext); + +diff --git a/tests/secontext.c b/tests/secontext.c +index 84c682869..a0463c467 100644 +--- a/tests/secontext.c ++++ b/tests/secontext.c +@@ -284,14 +284,19 @@ secontext_short_pid(pid_t pid) + return FORMAT_SPACE_AFTER(raw_secontext_short_pid(pid)); + } + +-void reset_secontext_file(const char *file) ++int ++reset_secontext_file(const char *file) + { + char *proper_ctx = raw_expected_secontext_full_file(file); +- (void) setfilecon(file, proper_ctx); ++ int ret = setfilecon(file, proper_ctx); ++ if (ret && errno) ++ ret = -errno; + free(proper_ctx); ++ ++ return ret; + } + +-void ++int + update_secontext_field(const char *file, enum secontext_field field, + const char *newvalue) + { +@@ -300,7 +305,7 @@ update_secontext_field(const char *file, enum secontext_field field, + + char *ctx = raw_secontext_full_file(file); + if (ctx == NULL) +- return; ++ return -1; + + char *saveptr = NULL; + char *token; +@@ -319,11 +324,15 @@ update_secontext_field(const char *file, enum secontext_field field, + char *newcontext = xasprintf("%s:%s:%s:%s", split[0], split[1], + split[2], split[3]); + +- (void) setfilecon(file, newcontext); ++ int ret = setfilecon(file, newcontext); ++ if (ret && errno) ++ ret = -errno; + + free(newcontext); + free(ctx); + errno = saved_errno; ++ ++ return ret; + } + + #endif /* HAVE_SELINUX_RUNTIME */ +diff --git a/tests/secontext.h b/tests/secontext.h +index b5bba2272..dab33e6a5 100644 +--- a/tests/secontext.h ++++ b/tests/secontext.h +@@ -7,6 +7,8 @@ + + #include "tests.h" + #include "xmalloc.h" ++ ++#include + #include + + char *secontext_full_fd(int) ATTRIBUTE_MALLOC; +@@ -35,10 +37,10 @@ char *get_secontext_field(const char *full_context, enum secontext_field field); + char *get_secontext_field_fd(int fd, enum secontext_field field); + char *get_secontext_field_file(const char *file, enum secontext_field field); + +-void reset_secontext_file(const char *file); ++int reset_secontext_file(const char *file); + +-void update_secontext_field(const char *file, enum secontext_field field, +- const char *newvalue); ++int update_secontext_field(const char *file, enum secontext_field field, ++ const char *newvalue); + + # ifdef PRINT_SECONTEXT_FULL + +@@ -81,15 +83,17 @@ get_secontext_field_file(const char *file, enum secontext_field field) + return NULL; + } + +-static inline void ++static inline int + reset_secontext_file(const char *file) + { ++ return -ENOSYS; + } + +-static inline void ++static inline int + update_secontext_field(const char *file, enum secontext_field field, + const char *newvalue) + { ++ return -ENOSYS; + } + + # define SECONTEXT_FD(fd) xstrdup("") +diff --git a/tests-m32/linkat.c b/tests-m32/linkat.c +index 1d0ee3c9f..832392ca0 100644 +--- a/tests-m32/linkat.c ++++ b/tests-m32/linkat.c +@@ -19,8 +19,20 @@ + #include + + #include "secontext.h" ++#include "xlat.h" + #include "xmalloc.h" + ++struct xlat_data secontext_types_data[] = { ++ [SECONTEXT_USER] = XLAT_PAIR(SECONTEXT_USER, "user"), ++ [SECONTEXT_ROLE] = XLAT_PAIR(SECONTEXT_ROLE, "role"), ++ [SECONTEXT_TYPE] = XLAT_PAIR(SECONTEXT_TYPE, "type"), ++}; ++struct xlat secontext_types = { ++ .data = secontext_types_data, ++ .size = ARRAY_SIZE(secontext_types_data), ++ .type = XT_INDEXED, ++}; ++ + static void + mangle_secontext_field(const char *path, enum secontext_field field, + const char *new_val, const char *fallback_val) +@@ -29,10 +41,18 @@ mangle_secontext_field(const char *path, enum secontext_field field, + if (!orig) + return; + +- update_secontext_field(path, field, +- strcmp(new_val, orig) ? new_val : fallback_val); ++ const char *new = strcmp(new_val, orig) ? new_val : fallback_val; + + free(orig); ++ ++ int ret = update_secontext_field(path, field, new); ++ if (ret) { ++ error_msg_and_skip("Failed to mangle secontext %s for " ++ "'%s' to %s: %d", ++ sprintxval_abbrev(&secontext_types, field, ++ "SECONTEXT_???"), ++ path, new, ret); ++ } + } + + int +@@ -103,8 +123,14 @@ main(void) + if (close(fd_sample_2)) + perror_msg_and_fail("close"); + +- if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) +- reset_secontext_file(sample_1); ++ if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) { ++ int ret; ++ if ((ret = reset_secontext_file(sample_1))) { ++ errno = -ret; ++ perror_msg_and_skip("Reset secontext for '%s'", ++ sample_1); ++ } ++ } + + free(sample_1_secontext); + +diff --git a/tests-m32/secontext.c b/tests-m32/secontext.c +index 84c682869..a0463c467 100644 +--- a/tests-m32/secontext.c ++++ b/tests-m32/secontext.c +@@ -284,14 +284,19 @@ secontext_short_pid(pid_t pid) + return FORMAT_SPACE_AFTER(raw_secontext_short_pid(pid)); + } + +-void reset_secontext_file(const char *file) ++int ++reset_secontext_file(const char *file) + { + char *proper_ctx = raw_expected_secontext_full_file(file); +- (void) setfilecon(file, proper_ctx); ++ int ret = setfilecon(file, proper_ctx); ++ if (ret && errno) ++ ret = -errno; + free(proper_ctx); ++ ++ return ret; + } + +-void ++int + update_secontext_field(const char *file, enum secontext_field field, + const char *newvalue) + { +@@ -300,7 +305,7 @@ update_secontext_field(const char *file, enum secontext_field field, + + char *ctx = raw_secontext_full_file(file); + if (ctx == NULL) +- return; ++ return -1; + + char *saveptr = NULL; + char *token; +@@ -319,11 +324,15 @@ update_secontext_field(const char *file, enum secontext_field field, + char *newcontext = xasprintf("%s:%s:%s:%s", split[0], split[1], + split[2], split[3]); + +- (void) setfilecon(file, newcontext); ++ int ret = setfilecon(file, newcontext); ++ if (ret && errno) ++ ret = -errno; + + free(newcontext); + free(ctx); + errno = saved_errno; ++ ++ return ret; + } + + #endif /* HAVE_SELINUX_RUNTIME */ +diff --git a/tests-m32/secontext.h b/tests-m32/secontext.h +index b5bba2272..dab33e6a5 100644 +--- a/tests-m32/secontext.h ++++ b/tests-m32/secontext.h +@@ -7,6 +7,8 @@ + + #include "tests.h" + #include "xmalloc.h" ++ ++#include + #include + + char *secontext_full_fd(int) ATTRIBUTE_MALLOC; +@@ -35,10 +37,10 @@ char *get_secontext_field(const char *full_context, enum secontext_field field); + char *get_secontext_field_fd(int fd, enum secontext_field field); + char *get_secontext_field_file(const char *file, enum secontext_field field); + +-void reset_secontext_file(const char *file); ++int reset_secontext_file(const char *file); + +-void update_secontext_field(const char *file, enum secontext_field field, +- const char *newvalue); ++int update_secontext_field(const char *file, enum secontext_field field, ++ const char *newvalue); + + # ifdef PRINT_SECONTEXT_FULL + +@@ -81,15 +83,17 @@ get_secontext_field_file(const char *file, enum secontext_field field) + return NULL; + } + +-static inline void ++static inline int + reset_secontext_file(const char *file) + { ++ return -ENOSYS; + } + +-static inline void ++static inline int + update_secontext_field(const char *file, enum secontext_field field, + const char *newvalue) + { ++ return -ENOSYS; + } + + # define SECONTEXT_FD(fd) xstrdup("") +diff --git a/tests-mx32/linkat.c b/tests-mx32/linkat.c +index 1d0ee3c9f..832392ca0 100644 +--- a/tests-mx32/linkat.c ++++ b/tests-mx32/linkat.c +@@ -19,8 +19,20 @@ + #include + + #include "secontext.h" ++#include "xlat.h" + #include "xmalloc.h" + ++struct xlat_data secontext_types_data[] = { ++ [SECONTEXT_USER] = XLAT_PAIR(SECONTEXT_USER, "user"), ++ [SECONTEXT_ROLE] = XLAT_PAIR(SECONTEXT_ROLE, "role"), ++ [SECONTEXT_TYPE] = XLAT_PAIR(SECONTEXT_TYPE, "type"), ++}; ++struct xlat secontext_types = { ++ .data = secontext_types_data, ++ .size = ARRAY_SIZE(secontext_types_data), ++ .type = XT_INDEXED, ++}; ++ + static void + mangle_secontext_field(const char *path, enum secontext_field field, + const char *new_val, const char *fallback_val) +@@ -29,10 +41,18 @@ mangle_secontext_field(const char *path, enum secontext_field field, + if (!orig) + return; + +- update_secontext_field(path, field, +- strcmp(new_val, orig) ? new_val : fallback_val); ++ const char *new = strcmp(new_val, orig) ? new_val : fallback_val; + + free(orig); ++ ++ int ret = update_secontext_field(path, field, new); ++ if (ret) { ++ error_msg_and_skip("Failed to mangle secontext %s for " ++ "'%s' to %s: %d", ++ sprintxval_abbrev(&secontext_types, field, ++ "SECONTEXT_???"), ++ path, new, ret); ++ } + } + + int +@@ -103,8 +123,14 @@ main(void) + if (close(fd_sample_2)) + perror_msg_and_fail("close"); + +- if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) +- reset_secontext_file(sample_1); ++ if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) { ++ int ret; ++ if ((ret = reset_secontext_file(sample_1))) { ++ errno = -ret; ++ perror_msg_and_skip("Reset secontext for '%s'", ++ sample_1); ++ } ++ } + + free(sample_1_secontext); + +diff --git a/tests-mx32/secontext.c b/tests-mx32/secontext.c +index 84c682869..a0463c467 100644 +--- a/tests-mx32/secontext.c ++++ b/tests-mx32/secontext.c +@@ -284,14 +284,19 @@ secontext_short_pid(pid_t pid) + return FORMAT_SPACE_AFTER(raw_secontext_short_pid(pid)); + } + +-void reset_secontext_file(const char *file) ++int ++reset_secontext_file(const char *file) + { + char *proper_ctx = raw_expected_secontext_full_file(file); +- (void) setfilecon(file, proper_ctx); ++ int ret = setfilecon(file, proper_ctx); ++ if (ret && errno) ++ ret = -errno; + free(proper_ctx); ++ ++ return ret; + } + +-void ++int + update_secontext_field(const char *file, enum secontext_field field, + const char *newvalue) + { +@@ -300,7 +305,7 @@ update_secontext_field(const char *file, enum secontext_field field, + + char *ctx = raw_secontext_full_file(file); + if (ctx == NULL) +- return; ++ return -1; + + char *saveptr = NULL; + char *token; +@@ -319,11 +324,15 @@ update_secontext_field(const char *file, enum secontext_field field, + char *newcontext = xasprintf("%s:%s:%s:%s", split[0], split[1], + split[2], split[3]); + +- (void) setfilecon(file, newcontext); ++ int ret = setfilecon(file, newcontext); ++ if (ret && errno) ++ ret = -errno; + + free(newcontext); + free(ctx); + errno = saved_errno; ++ ++ return ret; + } + + #endif /* HAVE_SELINUX_RUNTIME */ +diff --git a/tests-mx32/secontext.h b/tests-mx32/secontext.h +index b5bba2272..dab33e6a5 100644 +--- a/tests-mx32/secontext.h ++++ b/tests-mx32/secontext.h +@@ -7,6 +7,8 @@ + + #include "tests.h" + #include "xmalloc.h" ++ ++#include + #include + + char *secontext_full_fd(int) ATTRIBUTE_MALLOC; +@@ -35,10 +37,10 @@ char *get_secontext_field(const char *full_context, enum secontext_field field); + char *get_secontext_field_fd(int fd, enum secontext_field field); + char *get_secontext_field_file(const char *file, enum secontext_field field); + +-void reset_secontext_file(const char *file); ++int reset_secontext_file(const char *file); + +-void update_secontext_field(const char *file, enum secontext_field field, +- const char *newvalue); ++int update_secontext_field(const char *file, enum secontext_field field, ++ const char *newvalue); + + # ifdef PRINT_SECONTEXT_FULL + +@@ -81,15 +83,17 @@ get_secontext_field_file(const char *file, enum secontext_field field) + return NULL; + } + +-static inline void ++static inline int + reset_secontext_file(const char *file) + { ++ return -ENOSYS; + } + +-static inline void ++static inline int + update_secontext_field(const char *file, enum secontext_field field, + const char *newvalue) + { ++ return -ENOSYS; + } + + # define SECONTEXT_FD(fd) xstrdup("") +-- +2.13.6 + diff --git a/SOURCES/0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch b/SOURCES/0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch new file mode 100644 index 0000000..eb4220a --- /dev/null +++ b/SOURCES/0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch @@ -0,0 +1,76 @@ +From d08dfdebb381427cbd8565994868926ba9bc4b40 Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Wed, 30 Oct 2024 15:16:47 +0100 +Subject: [PATCH 188/190] linux/s390/get_scno.c: use NT_S390_SYSTEM_CALL if + gprs[2] is clobbered + +The way the syscall number is retrieved currently relies on the kernel +propagating it properly into gprs[2], which is not however always the case; +apart of the situation where scno > NR_syscalls, there is also an issue +of inspecting it during syscall restart (as it happens on attach, for +example), when it is already clobbered by a ERESTART* errno. Luckily +for strace, this issue has been already foreseen by the kernel +developers, and support for retrieving syscall number on s390 +via a separate ptrace regset has been added by the Linux commit +v3.2-rc1~109^2~34; 13 years later, it is time for it to fulfill +its purpose and finally get utilised. + +* src/linux/s390/get_scno.c (arch_get_scno): Try to retrieve the syscall +number by querying NT_S390_SYSTEM_CALL regset if gprs[2] contains an errno. + +Complements: v6.11-21-gc7e0ea6d712e "syscall: do not use uninitialized parts of struct ptrace_syscall_info" +--- + src/linux/s390/get_scno.c | 34 ++++++++++++++++++++++++++++++++-- + 1 file changed, 32 insertions(+), 2 deletions(-) + +diff --git a/src/linux/s390/get_scno.c b/src/linux/s390/get_scno.c +index f0863e26d701..fdc94d025280 100644 +--- a/src/linux/s390/get_scno.c ++++ b/src/linux/s390/get_scno.c +@@ -9,11 +9,41 @@ + # define ARCH_REGSET s390_regset + #endif + ++#ifndef NT_ARM_SYSTEM_CALL ++# define NT_S390_SYSTEM_CALL 0x307 ++#endif ++ + /* Return codes: 1 - ok, 0 - ignore, other - error. */ + static int + arch_get_scno(struct tcb *tcp) + { +- tcp->scno = ARCH_REGSET.gprs[2] ? +- ARCH_REGSET.gprs[2] : ARCH_REGSET.gprs[1]; ++ typeof(ARCH_REGSET.gprs[2]) gpr2 = ARCH_REGSET.gprs[2]; ++ ++ if (gpr2 > (typeof(gpr2)) (-4095ULL)) { ++ /* ++ * We are in restart_syscall and gprs[2] is clobbered ++ * by the errno, using pulling the syscall number ++ * via NT_S390_SYSTEM_CALL regset. ++ */ ++ unsigned int scno; ++ const struct iovec io = { ++ .iov_base = &scno, ++ .iov_len = sizeof(scno) ++ }; ++ int rc = ptrace(PTRACE_GETREGSET, tcp->pid, NT_S390_SYSTEM_CALL, ++ &io); ++ if (rc && errno != ESRCH) { ++ perror_func_msg("NT_S390_SYSTEM_CALL pid:%d", tcp->pid); ++ return -1; ++ } ++ /* ++ * The ptrace call returns thread.system_call, that stores raw ++ * int_code, and the syscall number part is the lowest 16 bits ++ * of it. ++ */ ++ tcp->scno = scno & 0xffff; ++ } else { ++ tcp->scno = gpr2 ?: ARCH_REGSET.gprs[1]; ++ } + return 1; + } +-- +2.28.0 + diff --git a/SOURCES/0191-prctl-improve-PR_SVE_-SG-ET_VL-decoding.patch b/SOURCES/0191-prctl-improve-PR_SVE_-SG-ET_VL-decoding.patch new file mode 100644 index 0000000..6f522a8 --- /dev/null +++ b/SOURCES/0191-prctl-improve-PR_SVE_-SG-ET_VL-decoding.patch @@ -0,0 +1,89 @@ +From 1663bf8582b7187d04225105a62bbab9ebbb8109 Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Thu, 4 Aug 2022 18:46:41 +0200 +Subject: [PATCH] prctl: improve PR_SVE_[SG]ET_VL decoding + +* src/prctl.c (sprint_sve_val): Add aux parameter, handle printing based +on it. +(SYS_FUNC(prctl)): : Pass false as aux +to sprint_sve_val. +(SYS_FUNC(prctl)): : Pass true as aux +to sprint_sve_val; return RVAL_HEX flag. +* NEWS: Mention it. +--- + NEWS | 1 + + src/prctl.c | 38 +++++++++++++++++++++++++++++--------- + 2 files changed, 30 insertions(+), 9 deletions(-) + +diff --git a/src/prctl.c b/src/prctl.c +index f3bc1a34821d..2611baa5588d 100644 +--- a/src/prctl.c ++++ b/src/prctl.c +@@ -64,17 +64,37 @@ print_prctl_args(struct tcb *tcp, const unsigned int first) + } + + static char * +-sprint_sve_val(kernel_ulong_t arg) ++sprint_sve_val(kernel_ulong_t arg, bool aux) + { +- static char out[sizeof("PR_SVE_SET_VL_ONEXEC|PR_SVE_VL_INHERIT|0x") + +- sizeof(kernel_ulong_t) * 2]; ++ static char out[sizeof("0x /* PR_SVE_SET_VL_ONEXEC|PR_SVE_VL_INHERIT" ++ "|0x|0x */") + sizeof(kernel_ulong_t) * 2 * 3]; ++ ++ if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_RAW) { ++ if (aux) ++ return NULL; ++ ++ xsprintf(out, "%#" PRI_klx, arg); ++ ++ return out; ++ } + + kernel_ulong_t vl = arg & PR_SVE_VL_LEN_MASK; + kernel_ulong_t flags = arg & ~PR_SVE_VL_LEN_MASK; +- const char *flags_str = sprintflags("", pr_sve_vl_flags, flags); + +- xsprintf(out, "%s%s%#" PRI_klx, +- flags_str ?: "", flags_str ? "|" : "", vl); ++ if (!flags && aux) ++ return NULL; ++ ++ const char *flags_str = sprintflags_ex("", pr_sve_vl_flags, flags, '\0', ++ XLAT_STYLE_ABBREV); ++ ++ if (!aux && flags && xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE) ++ { ++ xsprintf(out, "%#" PRI_klx " /* %s%s%#" PRI_klx " */", ++ arg, flags_str ?: "", flags_str ? "|" : "", vl); ++ } else { ++ xsprintf(out, "%s%s%#" PRI_klx, ++ flags_str ?: "", flags_str ? "|" : "", vl); ++ } + + return out; + } +@@ -229,7 +249,7 @@ SYS_FUNC(prctl) + case PR_SVE_SET_VL: + if (entering(tcp)) { + tprint_arg_next(); +- tprints(sprint_sve_val(arg2)); ++ tprints(sprint_sve_val(arg2, false)); + return 0; + } + ATTRIBUTE_FALLTHROUGH; +@@ -240,9 +260,9 @@ SYS_FUNC(prctl) + if (syserror(tcp) || tcp->u_rval == 0) + return 0; + +- tcp->auxstr = sprint_sve_val(tcp->u_rval); ++ tcp->auxstr = sprint_sve_val(tcp->u_rval, true); + +- return RVAL_STR; ++ return RVAL_HEX | RVAL_STR; + + case PR_GET_SPECULATION_CTRL: + if (entering(tcp)) { +-- +2.28.0 + diff --git a/SOURCES/0192-tests-prctl-sve-fix-prctl-PR_SVE_GET_VL-return-expec.patch b/SOURCES/0192-tests-prctl-sve-fix-prctl-PR_SVE_GET_VL-return-expec.patch new file mode 100644 index 0000000..ecf3f44 --- /dev/null +++ b/SOURCES/0192-tests-prctl-sve-fix-prctl-PR_SVE_GET_VL-return-expec.patch @@ -0,0 +1,130 @@ +From 3ed268876dd5b65263449f9aeb18a1cc2604c707 Mon Sep 17 00:00:00 2001 +From: Eugene Syromyatnikov +Date: Tue, 25 Apr 2023 18:11:21 +0200 +Subject: [PATCH] tests/prctl-sve: fix prctl(PR_SVE_GET_VL) return expected + value printing + +* tests/prctl-sve.c: Print the expected return value string based +on the value returned, similarly to the way it is done +in tests/prctl-sme.c:print_sme_vl_arg(). + +Fixes: v5.13~8 "tests: improve test coverage of prctl syscall decoder" +Closes: https://github.com/strace/strace/issues/251 +--- + tests/prctl-sve.c | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +diff --git a/tests/prctl-sve.c b/tests/prctl-sve.c +index 4cef149cfec6..216ebfc3f92c 100644 +--- a/tests/prctl-sve.c ++++ b/tests/prctl-sve.c +@@ -43,12 +43,28 @@ main(void) + (unsigned long) 0xff, sprintrc(rc)); + + rc = syscall(__NR_prctl, PR_SVE_GET_VL); +- printf("prctl(PR_SVE_GET_VL) = %s", sprintrc(rc)); ++ printf("prctl(PR_SVE_GET_VL) = "); + if (rc >= 0) { +- printf(" (PR_SVE_SET_VL_ONEXEC|PR_SVE_VL_INHERIT|%#lx)", +- (unsigned long) 0xff); ++ printf("%#lx", rc); ++ if (rc > 0xffff) { ++ printf(" ("); ++ if (rc & PR_SVE_SET_VL_ONEXEC) ++ printf("PR_SVE_SET_VL_ONEXEC"); ++ if (rc & PR_SVE_VL_INHERIT) { ++ printf("%sPR_SVE_VL_INHERIT", ++ rc & PR_SVE_SET_VL_ONEXEC ? "|" : ""); ++ } ++ if (rc & ~0x6ffffU) { ++ printf("%s%#lx", ++ rc & 0x60000 ? "|" : "", rc & ~0x6ffffU); ++ } ++ printf("|%#lx)\n", rc & 0xffffU); ++ } else { ++ puts(""); ++ } ++ } else { ++ puts(sprintrc(rc)); + } +- puts(""); + + puts("+++ exited with 0 +++"); + return 0; +diff --git a/tests-m32/prctl-sve.c b/tests-m32/prctl-sve.c +index 4cef149cfec6..216ebfc3f92c 100644 +--- a/tests-m32/prctl-sve.c ++++ b/tests-m32/prctl-sve.c +@@ -43,12 +43,28 @@ main(void) + (unsigned long) 0xff, sprintrc(rc)); + + rc = syscall(__NR_prctl, PR_SVE_GET_VL); +- printf("prctl(PR_SVE_GET_VL) = %s", sprintrc(rc)); ++ printf("prctl(PR_SVE_GET_VL) = "); + if (rc >= 0) { +- printf(" (PR_SVE_SET_VL_ONEXEC|PR_SVE_VL_INHERIT|%#lx)", +- (unsigned long) 0xff); ++ printf("%#lx", rc); ++ if (rc > 0xffff) { ++ printf(" ("); ++ if (rc & PR_SVE_SET_VL_ONEXEC) ++ printf("PR_SVE_SET_VL_ONEXEC"); ++ if (rc & PR_SVE_VL_INHERIT) { ++ printf("%sPR_SVE_VL_INHERIT", ++ rc & PR_SVE_SET_VL_ONEXEC ? "|" : ""); ++ } ++ if (rc & ~0x6ffffU) { ++ printf("%s%#lx", ++ rc & 0x60000 ? "|" : "", rc & ~0x6ffffU); ++ } ++ printf("|%#lx)\n", rc & 0xffffU); ++ } else { ++ puts(""); ++ } ++ } else { ++ puts(sprintrc(rc)); + } +- puts(""); + + puts("+++ exited with 0 +++"); + return 0; +diff --git a/tests-mx32/prctl-sve.c b/tests-mx32/prctl-sve.c +index 4cef149cfec6..216ebfc3f92c 100644 +--- a/tests-mx32/prctl-sve.c ++++ b/tests-mx32/prctl-sve.c +@@ -43,12 +43,28 @@ main(void) + (unsigned long) 0xff, sprintrc(rc)); + + rc = syscall(__NR_prctl, PR_SVE_GET_VL); +- printf("prctl(PR_SVE_GET_VL) = %s", sprintrc(rc)); ++ printf("prctl(PR_SVE_GET_VL) = "); + if (rc >= 0) { +- printf(" (PR_SVE_SET_VL_ONEXEC|PR_SVE_VL_INHERIT|%#lx)", +- (unsigned long) 0xff); ++ printf("%#lx", rc); ++ if (rc > 0xffff) { ++ printf(" ("); ++ if (rc & PR_SVE_SET_VL_ONEXEC) ++ printf("PR_SVE_SET_VL_ONEXEC"); ++ if (rc & PR_SVE_VL_INHERIT) { ++ printf("%sPR_SVE_VL_INHERIT", ++ rc & PR_SVE_SET_VL_ONEXEC ? "|" : ""); ++ } ++ if (rc & ~0x6ffffU) { ++ printf("%s%#lx", ++ rc & 0x60000 ? "|" : "", rc & ~0x6ffffU); ++ } ++ printf("|%#lx)\n", rc & 0xffffU); ++ } else { ++ puts(""); ++ } ++ } else { ++ puts(sprintrc(rc)); + } +- puts(""); + + puts("+++ exited with 0 +++"); + return 0; +-- +2.28.0 + diff --git a/SPECS/strace.spec b/SPECS/strace.spec index 84d9f17..8bf7144 100644 --- a/SPECS/strace.spec +++ b/SPECS/strace.spec @@ -1,7 +1,7 @@ Summary: Tracks and displays system calls associated with a running process Name: strace Version: 5.18 -Release: 2%{?dist} +Release: 2.1%{?dist} # The test suite is GPLv2+, all the rest is LGPLv2.1+. License: LGPL-2.1+ and GPL-2.0+ Group: Development/Debuggers @@ -280,6 +280,33 @@ Patch181: 0181-secontext-fix-expected-SELinux-context-check-for-unl.patch # v5.18-21-g5338636 "tests/bpf: fix sloppy low FD number usage" Patch182: 0182-tests-bpf-fix-sloppy-low-FD-number-usage.patch +## https://issues.redhat.com/browse/RHEL-8570 +# v6.11-21-gc7e0ea6d7 "syscall: do not use uninitialized parts of struct ptrace_syscall_info" +Patch183: 0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch +# v6.11-22-g2048c136b "startup_tcb: add a comment" +Patch184: 0184-startup_tcb-add-a-comment.patch +# v6.11-23-g3bf08cbb3 "tests: add another test of restart_syscall decoding" +Patch185: 0185-tests-add-another-test-of-restart_syscall-decoding.patch + +## kernel-5.14.0-417.el9~9 (RHEL 9.4+) has v6.8-rc1~131^2~223 "tcp: Dump bound-only sockets in inet_diag." +# v6.9~27 "tests: workaround net-yy-inet* for new kernels" +Patch186: 0186-tests-workaround-net-yy-inet-for-new-kernels.patch +## Update linkat--secontext_mismatch test to fix the failures reported by QE +# v6.11~4 "tests: avoid linkat--secontext_mismatch failures on setfilecon errors" +Patch187: 0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch +# "linux/s390/get_scno.c: use NT_S390_SYSTEM_CALL if gprs[2] is clobbered" +Patch188: 0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch +### Skip these two patches present in RHEL 9/10 as sockopt-sol_socket test doesn't exist in strace-5.18 +## "tests: move k_setsockopt definition into a separate" +#Patch189: 0189-tests-move-k_setsockopt-definition-into-a-separate-f.patch +## "tests/sockopt-timestamp.c: use k_getsockopt and k_setsockopt" +#Patch190: 0190-tests-sockopt-timestamp.c-use-k_getsockopt-and-k_set.patch +## Fix for prctl-sve.gen test failure on aarch64 +# v5.19~14 "prctl: improve PR_SVE_[SG]ET_VL decoding" +Patch191: 0191-prctl-improve-PR_SVE_-SG-ET_VL-decoding.patch +# v6.3~32 "tests/prctl-sve: fix prctl(PR_SVE_GET_VL) return expected value printing" +Patch192: 0192-tests-prctl-sve-fix-prctl-PR_SVE_GET_VL-return-expec.patch + ### Wire up rseq and kexec_file_load in order to avoid kexec_file_load ### test failure on aarch64. Addresses https://bugzilla.redhat.com/1676045 ### ("strace: FTBFS in Fedora rawhide/f30"). @@ -448,6 +475,18 @@ received by a process. %patch181 -p1 %patch182 -p1 +%patch183 -p1 +%patch184 -p1 +%patch185 -p1 + +%patch186 -p1 +%patch187 -p1 +%patch188 -p1 +#%patch189 -p1 +#%patch190 -p1 +%patch191 -p1 +%patch192 -p1 + #%patch1000 -p1 #%patch1001 -p1 @@ -533,6 +572,11 @@ echo 'END OF TEST SUITE INFORMATION' %{_mandir}/man1/* %changelog +* Tue Oct 29 2024 Eugene Syromiatnikov - 5.18-2.1 +- Fix incorrect syscall name reporting in restart_syscall() on attach when + PTRACE_GET_SYSCALL_INFO is in use (RHEL-8570). +- Update net-yy-inet*, linkat--secontext_mismatch, and prctl-sve tests. + * Mon Jul 11 2022 Eugene Syromiatnikov - 5.18-2 - Fix the issues reported by covscan (#2103068). - Fix SELinux context matching for the deleted paths (#2087693).