Fix incorrect syscall name reporting in restart_syscall() on attach
* 0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch: New file. * 0184-startup_tcb-add-a-comment.patch: Likewise. * 0185-tests-add-another-test-of-restart_syscall-decoding.patch: Likewise. * 0186-tests-workaround-net-yy-inet-for-new-kernels.patch: Rename from 0001-tests-workaround-net-yy-inet-for-new-kernels.patch to be in sync with RHEL 9, add tests-m32 and tests-mx32 hunks. * 0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch: New file. * 0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch: Likewise. * 0189-tests-move-k_setsockopt-definition-into-a-separate-f.patch: Likewise. * 0190-tests-sockopt-timestamp.c-use-k_getsockopt-and-k_set.patch: Likewise. * strace.spec (Patch183, Patch184, Patch185, Patch186, Patch187, Patch188, Patch189, Patch190): New patches. (Patch0001): Remove. (%prep): Apply them. (%changelog): Add a record. Resolves: RHEL-65108 Signed-off-by: Eugene Syromiatnikov <esyr@redhat.com>
This commit is contained in:
parent
4656d2c177
commit
bf36fdf2da
@ -1,52 +0,0 @@
|
||||
From e9d784ecd3ef0c5af9f8c74a830e797d773d71cb Mon Sep 17 00:00:00 2001
|
||||
From: "Dmitry V. Levin" <ldv@strace.io>
|
||||
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"
|
||||
--
|
||||
2.28.0
|
||||
|
102
0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch
Normal file
102
0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch
Normal file
@ -0,0 +1,102 @@
|
||||
From c7e0ea6d712eb214dafe7e9eae57661d9a427ea7 Mon Sep 17 00:00:00 2001
|
||||
From: "Dmitry V. Levin" <ldv@strace.io>
|
||||
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
|
||||
|
37
0184-startup_tcb-add-a-comment.patch
Normal file
37
0184-startup_tcb-add-a-comment.patch
Normal file
@ -0,0 +1,37 @@
|
||||
From 2048c136ba6edc4282dbc976c499e038d5b60c03 Mon Sep 17 00:00:00 2001
|
||||
From: "Dmitry V. Levin" <ldv@strace.io>
|
||||
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
|
||||
|
129
0185-tests-add-another-test-of-restart_syscall-decoding.patch
Normal file
129
0185-tests-add-another-test-of-restart_syscall-decoding.patch
Normal file
@ -0,0 +1,129 @@
|
||||
From 3bf08cbb388a89014252bdfe5143324bdaa4dc46 Mon Sep 17 00:00:00 2001
|
||||
From: "Dmitry V. Levin" <ldv@strace.io>
|
||||
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-6.7/tests/Makefile.am
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests/Makefile.am 2024-10-29 13:05:29.486223478 +0100
|
||||
+++ strace-6.7/tests/Makefile.am 2024-10-29 13:58:46.485209167 +0100
|
||||
@@ -565,6 +565,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 \
|
||||
@@ -736,6 +737,7 @@
|
||||
qual_inject-signal.expected \
|
||||
qualify_personality_empty.in \
|
||||
regex.in \
|
||||
+ restart_syscall-p.expected \
|
||||
rt_sigaction.awk \
|
||||
sched.in \
|
||||
sigaltstack.expected \
|
||||
Index: strace-6.7/tests/restart_syscall-p.expected
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests/restart_syscall-p.expected 2024-10-29 13:58:46.485209167 +0100
|
||||
@@ -0,0 +1,2 @@
|
||||
+restart_syscall(<... resuming interrupted nanosleep ...>) = 0
|
||||
+exit_group(0) = ?
|
||||
Index: strace-6.7/tests/restart_syscall-p.test
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests/restart_syscall-p.test 2024-10-29 13:58:46.485209167 +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-6.7/tests-m32/Makefile.in
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-m32/Makefile.in 2024-01-29 13:43:44.000000000 +0100
|
||||
+++ strace-6.7/tests-m32/Makefile.in 2024-10-29 13:59:34.146652355 +0100
|
||||
@@ -10531,6 +10531,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 \
|
||||
@@ -10697,6 +10698,7 @@
|
||||
qual_inject-signal.expected \
|
||||
qualify_personality_empty.in \
|
||||
regex.in \
|
||||
+ restart_syscall-p.expected \
|
||||
rt_sigaction.awk \
|
||||
sched.in \
|
||||
sigaltstack.expected \
|
||||
Index: strace-6.7/tests-mx32/Makefile.in
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-mx32/Makefile.in 2024-01-29 13:43:45.000000000 +0100
|
||||
+++ strace-6.7/tests-mx32/Makefile.in 2024-10-29 13:59:43.762540016 +0100
|
||||
@@ -10531,6 +10531,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 \
|
||||
@@ -10697,6 +10698,7 @@
|
||||
qual_inject-signal.expected \
|
||||
qualify_personality_empty.in \
|
||||
regex.in \
|
||||
+ restart_syscall-p.expected \
|
||||
rt_sigaction.awk \
|
||||
sched.in \
|
||||
sigaltstack.expected \
|
||||
Index: strace-6.7/tests/Makefile.in
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests/Makefile.in 2024-01-29 13:43:45.000000000 +0100
|
||||
+++ strace-6.7/tests/Makefile.in 2024-10-29 13:59:15.712867710 +0100
|
||||
@@ -10530,6 +10530,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 \
|
||||
@@ -10696,6 +10697,7 @@
|
||||
qual_inject-signal.expected \
|
||||
qualify_personality_empty.in \
|
||||
regex.in \
|
||||
+ restart_syscall-p.expected \
|
||||
rt_sigaction.awk \
|
||||
sched.in \
|
||||
sigaltstack.expected \
|
108
0186-tests-workaround-net-yy-inet-for-new-kernels.patch
Normal file
108
0186-tests-workaround-net-yy-inet-for-new-kernels.patch
Normal file
@ -0,0 +1,108 @@
|
||||
From e9d784ecd3ef0c5af9f8c74a830e797d773d71cb Mon Sep 17 00:00:00 2001
|
||||
From: "Dmitry V. Levin" <ldv@strace.io>
|
||||
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
|
||||
|
530
0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch
Normal file
530
0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch
Normal file
@ -0,0 +1,530 @@
|
||||
From 660186018897b386fb05d7951aec57a81211a1a4 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
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 <errno.h>.
|
||||
(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 <emachado@redhat.com>
|
||||
---
|
||||
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 <string.h>
|
||||
|
||||
#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 <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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 <string.h>
|
||||
|
||||
#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 <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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 <string.h>
|
||||
|
||||
#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 <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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
|
||||
|
@ -0,0 +1,76 @@
|
||||
From d08dfdebb381427cbd8565994868926ba9bc4b40 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
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
|
||||
|
698
0189-tests-move-k_setsockopt-definition-into-a-separate-f.patch
Normal file
698
0189-tests-move-k_setsockopt-definition-into-a-separate-f.patch
Normal file
@ -0,0 +1,698 @@
|
||||
From e7f488a6d267001214636507c79210af57c2c6a7 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Thu, 31 Oct 2024 13:28:00 +0100
|
||||
Subject: [PATCH 189/190] tests: move k_setsockopt definition into a separate
|
||||
file
|
||||
|
||||
...and add k_getsockopt definition as well (for completeness's sake
|
||||
and because it will be utilised in the next patch).
|
||||
|
||||
* tests/k_sockopt.c: New file.
|
||||
* tests/k_sockopt.h: Likewise.
|
||||
* tests/Makefile.am (libtests_a_SOURCES): Add k_sockopt.c
|
||||
and k_sockopt.h.
|
||||
* tests/sockopt-timestamp.c: Include "k_sockopt.h".
|
||||
---
|
||||
tests/Makefile.am | 2 ++
|
||||
tests/k_sockopt.c | 61 +++++++++++++++++++++++++++++++++++++++
|
||||
tests/k_sockopt.h | 24 +++++++++++++++
|
||||
tests/sockopt-timestamp.c | 25 +---------------
|
||||
4 files changed, 88 insertions(+), 24 deletions(-)
|
||||
create mode 100644 tests/k_sockopt.c
|
||||
create mode 100644 tests/k_sockopt.h
|
||||
|
||||
Index: strace-6.7/tests/Makefile.am
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests/Makefile.am 2024-10-31 14:07:30.389665979 +0100
|
||||
+++ strace-6.7/tests/Makefile.am 2024-10-31 14:07:30.445665345 +0100
|
||||
@@ -61,6 +61,8 @@
|
||||
hexquote_strndup.c \
|
||||
ifindex.c \
|
||||
inode_of_sockfd.c \
|
||||
+ k_sockopt.c \
|
||||
+ k_sockopt.h \
|
||||
libmmsg.c \
|
||||
libsocketcall.c \
|
||||
lock_file.c \
|
||||
Index: strace-6.7/tests/k_sockopt.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests/k_sockopt.c 2024-10-31 14:07:30.445665345 +0100
|
||||
@@ -0,0 +1,61 @@
|
||||
+/*
|
||||
+ * [gs]etsockopt() wrappers that avoid glibc and perform syscalls directly.
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Dmitry V. Levin <ldv@strace.io>
|
||||
+ * Copyright (c) 2019-2024 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+#include "tests.h"
|
||||
+#include "scno.h"
|
||||
+
|
||||
+#include <unistd.h>
|
||||
+#include <sys/socket.h>
|
||||
+
|
||||
+#include "k_sockopt.h"
|
||||
+
|
||||
+static const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL;
|
||||
+
|
||||
+#if defined __NR_getsockopt || defined __NR_setsockopt
|
||||
+static const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL;
|
||||
+#endif
|
||||
+
|
||||
+#define SC_getsockopt 15
|
||||
+long
|
||||
+k_getsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int *len)
|
||||
+{
|
||||
+ return syscall(
|
||||
+#ifdef __NR_getsockopt
|
||||
+ __NR_getsockopt,
|
||||
+#else /* socketcall */
|
||||
+ __NR_socketcall, SC_getsockopt,
|
||||
+#endif
|
||||
+ fill | fd , fill | level, fill | optname, optval, len
|
||||
+#ifdef __NR_getsockopt
|
||||
+ , bad
|
||||
+#endif
|
||||
+ );
|
||||
+}
|
||||
+
|
||||
+# define SC_setsockopt 14
|
||||
+long
|
||||
+k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int len)
|
||||
+{
|
||||
+ return syscall(
|
||||
+#ifdef __NR_setsockopt
|
||||
+ __NR_setsockopt,
|
||||
+#else /* socketcall */
|
||||
+ __NR_socketcall, SC_setsockopt,
|
||||
+#endif
|
||||
+ fill | fd , fill | level, fill | optname, optval, fill | len
|
||||
+#ifdef __NR_setsockopt
|
||||
+ , bad
|
||||
+#endif
|
||||
+ );
|
||||
+}
|
||||
Index: strace-6.7/tests/k_sockopt.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests/k_sockopt.h 2024-10-31 14:07:30.445665345 +0100
|
||||
@@ -0,0 +1,24 @@
|
||||
+/*
|
||||
+ * [gs]etsockopt() wrappers that avoid glibc and perform syscalls directly.
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Dmitry V. Levin <ldv@strace.io>
|
||||
+ * Copyright (c) 2019-2024 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+#ifndef STRACE_K_SOCKOPT_H
|
||||
+#define STRACE_K_SOCKOPT_H
|
||||
+
|
||||
+extern long
|
||||
+k_getsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int *len);
|
||||
+
|
||||
+extern long
|
||||
+k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int len);
|
||||
+
|
||||
+#endif /* STRACE_K_SOCKOPT_H */
|
||||
Index: strace-6.7/tests/sockopt-timestamp.c
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests/sockopt-timestamp.c 2024-10-31 14:07:27.014704200 +0100
|
||||
+++ strace-6.7/tests/sockopt-timestamp.c 2024-10-31 14:07:30.446665333 +0100
|
||||
@@ -22,6 +22,7 @@
|
||||
# include "kernel_time_types.h"
|
||||
# include "kernel_timeval.h"
|
||||
# include "kernel_old_timespec.h"
|
||||
+# include "k_sockopt.h"
|
||||
|
||||
# define XLAT_MACROS_ONLY
|
||||
# include "xlat/sock_options.h"
|
||||
@@ -44,30 +45,6 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
-# define SC_setsockopt 14
|
||||
-static long
|
||||
-k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
- const unsigned int optname, const void *const optval,
|
||||
- const unsigned int len)
|
||||
-{
|
||||
- const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL;
|
||||
-# ifdef __NR_setsockopt
|
||||
- const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL;
|
||||
-# endif
|
||||
-
|
||||
- return syscall(
|
||||
-# ifdef __NR_setsockopt
|
||||
- __NR_setsockopt,
|
||||
-# else /* socketcall */
|
||||
- __NR_socketcall, SC_setsockopt,
|
||||
-# endif
|
||||
- fill | fd , fill | level, fill | optname, optval, fill | len
|
||||
-# ifdef __NR_setsockopt
|
||||
- , bad
|
||||
-# endif
|
||||
- );
|
||||
-}
|
||||
-
|
||||
static void
|
||||
print_timestamp_old(const struct cmsghdr *c)
|
||||
{
|
||||
Index: strace-6.7/tests/Makefile.in
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests/Makefile.in 2024-10-31 14:07:30.402665832 +0100
|
||||
+++ strace-6.7/tests/Makefile.in 2024-10-31 14:09:57.964994687 +0100
|
||||
@@ -850,6 +850,7 @@
|
||||
libtests_a-hexquote_strndup.$(OBJEXT) \
|
||||
libtests_a-ifindex.$(OBJEXT) \
|
||||
libtests_a-inode_of_sockfd.$(OBJEXT) \
|
||||
+ libtests_a-k_sockopt.$(OBJEXT) \
|
||||
libtests_a-libmmsg.$(OBJEXT) \
|
||||
libtests_a-libsocketcall.$(OBJEXT) \
|
||||
libtests_a-lock_file.$(OBJEXT) \
|
||||
@@ -6803,6 +6804,7 @@
|
||||
./$(DEPDIR)/libtests_a-hexquote_strndup.Po \
|
||||
./$(DEPDIR)/libtests_a-ifindex.Po \
|
||||
./$(DEPDIR)/libtests_a-inode_of_sockfd.Po \
|
||||
+ ./$(DEPDIR)/libtests_a-k_sockopt.Po \
|
||||
./$(DEPDIR)/libtests_a-libmmsg.Po \
|
||||
./$(DEPDIR)/libtests_a-libsocketcall.Po \
|
||||
./$(DEPDIR)/libtests_a-lock_file.Po \
|
||||
@@ -8709,6 +8711,8 @@
|
||||
hexquote_strndup.c \
|
||||
ifindex.c \
|
||||
inode_of_sockfd.c \
|
||||
+ k_sockopt.c \
|
||||
+ k_sockopt.h \
|
||||
libmmsg.c \
|
||||
libsocketcall.c \
|
||||
lock_file.c \
|
||||
@@ -16432,6 +16436,7 @@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexquote_strndup.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-ifindex.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-inode_of_sockfd.Po@am__quote@ # am--include-marker
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-k_sockopt.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libmmsg.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libsocketcall.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-lock_file.Po@am__quote@ # am--include-marker
|
||||
@@ -17367,6 +17372,20 @@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-inode_of_sockfd.obj `if test -f 'inode_of_sockfd.c'; then $(CYGPATH_W) 'inode_of_sockfd.c'; else $(CYGPATH_W) '$(srcdir)/inode_of_sockfd.c'; fi`
|
||||
|
||||
+libtests_a-k_sockopt.o: k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-k_sockopt.o -MD -MP -MF $(DEPDIR)/libtests_a-k_sockopt.Tpo -c -o libtests_a-k_sockopt.o `test -f 'k_sockopt.c' || echo '$(srcdir)/'`k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-k_sockopt.Tpo $(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='k_sockopt.c' object='libtests_a-k_sockopt.o' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-k_sockopt.o `test -f 'k_sockopt.c' || echo '$(srcdir)/'`k_sockopt.c
|
||||
+
|
||||
+libtests_a-k_sockopt.obj: k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-k_sockopt.obj -MD -MP -MF $(DEPDIR)/libtests_a-k_sockopt.Tpo -c -o libtests_a-k_sockopt.obj `if test -f 'k_sockopt.c'; then $(CYGPATH_W) 'k_sockopt.c'; else $(CYGPATH_W) '$(srcdir)/k_sockopt.c'; fi`
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-k_sockopt.Tpo $(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='k_sockopt.c' object='libtests_a-k_sockopt.obj' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-k_sockopt.obj `if test -f 'k_sockopt.c'; then $(CYGPATH_W) 'k_sockopt.c'; else $(CYGPATH_W) '$(srcdir)/k_sockopt.c'; fi`
|
||||
+
|
||||
libtests_a-libmmsg.o: libmmsg.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-libmmsg.o -MD -MP -MF $(DEPDIR)/libtests_a-libmmsg.Tpo -c -o libtests_a-libmmsg.o `test -f 'libmmsg.c' || echo '$(srcdir)/'`libmmsg.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-libmmsg.Tpo $(DEPDIR)/libtests_a-libmmsg.Po
|
||||
@@ -19014,6 +19033,7 @@
|
||||
-rm -f ./$(DEPDIR)/libtests_a-hexquote_strndup.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-ifindex.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-inode_of_sockfd.Po
|
||||
+ -rm -f ./$(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libmmsg.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libsocketcall.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-lock_file.Po
|
||||
@@ -20341,6 +20361,7 @@
|
||||
-rm -f ./$(DEPDIR)/libtests_a-hexquote_strndup.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-ifindex.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-inode_of_sockfd.Po
|
||||
+ -rm -f ./$(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libmmsg.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libsocketcall.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-lock_file.Po
|
||||
Index: strace-6.7/tests-m32/Makefile.am
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-m32/Makefile.am 2024-10-31 14:07:27.014704200 +0100
|
||||
+++ strace-6.7/tests-m32/Makefile.am 2024-10-31 14:07:30.449665299 +0100
|
||||
@@ -61,6 +61,8 @@
|
||||
hexquote_strndup.c \
|
||||
ifindex.c \
|
||||
inode_of_sockfd.c \
|
||||
+ k_sockopt.c \
|
||||
+ k_sockopt.h \
|
||||
libmmsg.c \
|
||||
libsocketcall.c \
|
||||
lock_file.c \
|
||||
Index: strace-6.7/tests-m32/k_sockopt.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests-m32/k_sockopt.c 2024-10-31 14:07:30.449665299 +0100
|
||||
@@ -0,0 +1,61 @@
|
||||
+/*
|
||||
+ * [gs]etsockopt() wrappers that avoid glibc and perform syscalls directly.
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Dmitry V. Levin <ldv@strace.io>
|
||||
+ * Copyright (c) 2019-2024 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+#include "tests.h"
|
||||
+#include "scno.h"
|
||||
+
|
||||
+#include <unistd.h>
|
||||
+#include <sys/socket.h>
|
||||
+
|
||||
+#include "k_sockopt.h"
|
||||
+
|
||||
+static const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL;
|
||||
+
|
||||
+#if defined __NR_getsockopt || defined __NR_setsockopt
|
||||
+static const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL;
|
||||
+#endif
|
||||
+
|
||||
+#define SC_getsockopt 15
|
||||
+long
|
||||
+k_getsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int *len)
|
||||
+{
|
||||
+ return syscall(
|
||||
+#ifdef __NR_getsockopt
|
||||
+ __NR_getsockopt,
|
||||
+#else /* socketcall */
|
||||
+ __NR_socketcall, SC_getsockopt,
|
||||
+#endif
|
||||
+ fill | fd , fill | level, fill | optname, optval, len
|
||||
+#ifdef __NR_getsockopt
|
||||
+ , bad
|
||||
+#endif
|
||||
+ );
|
||||
+}
|
||||
+
|
||||
+# define SC_setsockopt 14
|
||||
+long
|
||||
+k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int len)
|
||||
+{
|
||||
+ return syscall(
|
||||
+#ifdef __NR_setsockopt
|
||||
+ __NR_setsockopt,
|
||||
+#else /* socketcall */
|
||||
+ __NR_socketcall, SC_setsockopt,
|
||||
+#endif
|
||||
+ fill | fd , fill | level, fill | optname, optval, fill | len
|
||||
+#ifdef __NR_setsockopt
|
||||
+ , bad
|
||||
+#endif
|
||||
+ );
|
||||
+}
|
||||
Index: strace-6.7/tests-m32/k_sockopt.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests-m32/k_sockopt.h 2024-10-31 14:07:30.449665299 +0100
|
||||
@@ -0,0 +1,24 @@
|
||||
+/*
|
||||
+ * [gs]etsockopt() wrappers that avoid glibc and perform syscalls directly.
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Dmitry V. Levin <ldv@strace.io>
|
||||
+ * Copyright (c) 2019-2024 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+#ifndef STRACE_K_SOCKOPT_H
|
||||
+#define STRACE_K_SOCKOPT_H
|
||||
+
|
||||
+extern long
|
||||
+k_getsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int *len);
|
||||
+
|
||||
+extern long
|
||||
+k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int len);
|
||||
+
|
||||
+#endif /* STRACE_K_SOCKOPT_H */
|
||||
Index: strace-6.7/tests-m32/sockopt-timestamp.c
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-m32/sockopt-timestamp.c 2024-10-31 14:07:27.014704200 +0100
|
||||
+++ strace-6.7/tests-m32/sockopt-timestamp.c 2024-10-31 14:07:30.450665288 +0100
|
||||
@@ -22,6 +22,7 @@
|
||||
# include "kernel_time_types.h"
|
||||
# include "kernel_timeval.h"
|
||||
# include "kernel_old_timespec.h"
|
||||
+# include "k_sockopt.h"
|
||||
|
||||
# define XLAT_MACROS_ONLY
|
||||
# include "xlat/sock_options.h"
|
||||
@@ -44,30 +45,6 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
-# define SC_setsockopt 14
|
||||
-static long
|
||||
-k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
- const unsigned int optname, const void *const optval,
|
||||
- const unsigned int len)
|
||||
-{
|
||||
- const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL;
|
||||
-# ifdef __NR_setsockopt
|
||||
- const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL;
|
||||
-# endif
|
||||
-
|
||||
- return syscall(
|
||||
-# ifdef __NR_setsockopt
|
||||
- __NR_setsockopt,
|
||||
-# else /* socketcall */
|
||||
- __NR_socketcall, SC_setsockopt,
|
||||
-# endif
|
||||
- fill | fd , fill | level, fill | optname, optval, fill | len
|
||||
-# ifdef __NR_setsockopt
|
||||
- , bad
|
||||
-# endif
|
||||
- );
|
||||
-}
|
||||
-
|
||||
static void
|
||||
print_timestamp_old(const struct cmsghdr *c)
|
||||
{
|
||||
Index: strace-6.7/tests-m32/Makefile.in
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-m32/Makefile.in 2024-10-31 14:07:30.394665922 +0100
|
||||
+++ strace-6.7/tests-m32/Makefile.in 2024-10-31 14:07:30.453665254 +0100
|
||||
@@ -850,6 +850,7 @@
|
||||
libtests_a-hexquote_strndup.$(OBJEXT) \
|
||||
libtests_a-ifindex.$(OBJEXT) \
|
||||
libtests_a-inode_of_sockfd.$(OBJEXT) \
|
||||
+ libtests_a-k_sockopt.$(OBJEXT) \
|
||||
libtests_a-libmmsg.$(OBJEXT) \
|
||||
libtests_a-libsocketcall.$(OBJEXT) \
|
||||
libtests_a-lock_file.$(OBJEXT) \
|
||||
@@ -6803,6 +6804,7 @@
|
||||
./$(DEPDIR)/libtests_a-hexquote_strndup.Po \
|
||||
./$(DEPDIR)/libtests_a-ifindex.Po \
|
||||
./$(DEPDIR)/libtests_a-inode_of_sockfd.Po \
|
||||
+ ./$(DEPDIR)/libtests_a-k_sockopt.Po \
|
||||
./$(DEPDIR)/libtests_a-libmmsg.Po \
|
||||
./$(DEPDIR)/libtests_a-libsocketcall.Po \
|
||||
./$(DEPDIR)/libtests_a-lock_file.Po \
|
||||
@@ -8709,6 +8711,8 @@
|
||||
hexquote_strndup.c \
|
||||
ifindex.c \
|
||||
inode_of_sockfd.c \
|
||||
+ k_sockopt.c \
|
||||
+ k_sockopt.h \
|
||||
libmmsg.c \
|
||||
libsocketcall.c \
|
||||
lock_file.c \
|
||||
@@ -16432,6 +16436,7 @@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexquote_strndup.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-ifindex.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-inode_of_sockfd.Po@am__quote@ # am--include-marker
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-k_sockopt.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libmmsg.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libsocketcall.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-lock_file.Po@am__quote@ # am--include-marker
|
||||
@@ -17367,6 +17372,20 @@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-inode_of_sockfd.obj `if test -f 'inode_of_sockfd.c'; then $(CYGPATH_W) 'inode_of_sockfd.c'; else $(CYGPATH_W) '$(srcdir)/inode_of_sockfd.c'; fi`
|
||||
|
||||
+libtests_a-k_sockopt.o: k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-k_sockopt.o -MD -MP -MF $(DEPDIR)/libtests_a-k_sockopt.Tpo -c -o libtests_a-k_sockopt.o `test -f 'k_sockopt.c' || echo '$(srcdir)/'`k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-k_sockopt.Tpo $(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='k_sockopt.c' object='libtests_a-k_sockopt.o' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-k_sockopt.o `test -f 'k_sockopt.c' || echo '$(srcdir)/'`k_sockopt.c
|
||||
+
|
||||
+libtests_a-k_sockopt.obj: k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-k_sockopt.obj -MD -MP -MF $(DEPDIR)/libtests_a-k_sockopt.Tpo -c -o libtests_a-k_sockopt.obj `if test -f 'k_sockopt.c'; then $(CYGPATH_W) 'k_sockopt.c'; else $(CYGPATH_W) '$(srcdir)/k_sockopt.c'; fi`
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-k_sockopt.Tpo $(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='k_sockopt.c' object='libtests_a-k_sockopt.obj' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-k_sockopt.obj `if test -f 'k_sockopt.c'; then $(CYGPATH_W) 'k_sockopt.c'; else $(CYGPATH_W) '$(srcdir)/k_sockopt.c'; fi`
|
||||
+
|
||||
libtests_a-libmmsg.o: libmmsg.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-libmmsg.o -MD -MP -MF $(DEPDIR)/libtests_a-libmmsg.Tpo -c -o libtests_a-libmmsg.o `test -f 'libmmsg.c' || echo '$(srcdir)/'`libmmsg.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-libmmsg.Tpo $(DEPDIR)/libtests_a-libmmsg.Po
|
||||
@@ -19014,6 +19033,7 @@
|
||||
-rm -f ./$(DEPDIR)/libtests_a-hexquote_strndup.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-ifindex.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-inode_of_sockfd.Po
|
||||
+ -rm -f ./$(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libmmsg.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libsocketcall.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-lock_file.Po
|
||||
@@ -20341,6 +20361,7 @@
|
||||
-rm -f ./$(DEPDIR)/libtests_a-hexquote_strndup.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-ifindex.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-inode_of_sockfd.Po
|
||||
+ -rm -f ./$(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libmmsg.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libsocketcall.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-lock_file.Po
|
||||
Index: strace-6.7/tests-mx32/Makefile.am
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-mx32/Makefile.am 2024-10-31 14:07:27.014704200 +0100
|
||||
+++ strace-6.7/tests-mx32/Makefile.am 2024-10-31 14:07:30.453665254 +0100
|
||||
@@ -61,6 +61,8 @@
|
||||
hexquote_strndup.c \
|
||||
ifindex.c \
|
||||
inode_of_sockfd.c \
|
||||
+ k_sockopt.c \
|
||||
+ k_sockopt.h \
|
||||
libmmsg.c \
|
||||
libsocketcall.c \
|
||||
lock_file.c \
|
||||
Index: strace-6.7/tests-mx32/k_sockopt.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests-mx32/k_sockopt.c 2024-10-31 14:07:30.453665254 +0100
|
||||
@@ -0,0 +1,61 @@
|
||||
+/*
|
||||
+ * [gs]etsockopt() wrappers that avoid glibc and perform syscalls directly.
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Dmitry V. Levin <ldv@strace.io>
|
||||
+ * Copyright (c) 2019-2024 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+#include "tests.h"
|
||||
+#include "scno.h"
|
||||
+
|
||||
+#include <unistd.h>
|
||||
+#include <sys/socket.h>
|
||||
+
|
||||
+#include "k_sockopt.h"
|
||||
+
|
||||
+static const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL;
|
||||
+
|
||||
+#if defined __NR_getsockopt || defined __NR_setsockopt
|
||||
+static const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL;
|
||||
+#endif
|
||||
+
|
||||
+#define SC_getsockopt 15
|
||||
+long
|
||||
+k_getsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int *len)
|
||||
+{
|
||||
+ return syscall(
|
||||
+#ifdef __NR_getsockopt
|
||||
+ __NR_getsockopt,
|
||||
+#else /* socketcall */
|
||||
+ __NR_socketcall, SC_getsockopt,
|
||||
+#endif
|
||||
+ fill | fd , fill | level, fill | optname, optval, len
|
||||
+#ifdef __NR_getsockopt
|
||||
+ , bad
|
||||
+#endif
|
||||
+ );
|
||||
+}
|
||||
+
|
||||
+# define SC_setsockopt 14
|
||||
+long
|
||||
+k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int len)
|
||||
+{
|
||||
+ return syscall(
|
||||
+#ifdef __NR_setsockopt
|
||||
+ __NR_setsockopt,
|
||||
+#else /* socketcall */
|
||||
+ __NR_socketcall, SC_setsockopt,
|
||||
+#endif
|
||||
+ fill | fd , fill | level, fill | optname, optval, fill | len
|
||||
+#ifdef __NR_setsockopt
|
||||
+ , bad
|
||||
+#endif
|
||||
+ );
|
||||
+}
|
||||
Index: strace-6.7/tests-mx32/k_sockopt.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ strace-6.7/tests-mx32/k_sockopt.h 2024-10-31 14:07:30.453665254 +0100
|
||||
@@ -0,0 +1,24 @@
|
||||
+/*
|
||||
+ * [gs]etsockopt() wrappers that avoid glibc and perform syscalls directly.
|
||||
+ *
|
||||
+ * Copyright (c) 2019 Dmitry V. Levin <ldv@strace.io>
|
||||
+ * Copyright (c) 2019-2024 The strace developers.
|
||||
+ * All rights reserved.
|
||||
+ *
|
||||
+ * SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+#ifndef STRACE_K_SOCKOPT_H
|
||||
+#define STRACE_K_SOCKOPT_H
|
||||
+
|
||||
+extern long
|
||||
+k_getsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int *len);
|
||||
+
|
||||
+extern long
|
||||
+k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
+ const unsigned int optname, const void *const optval,
|
||||
+ const unsigned int len);
|
||||
+
|
||||
+#endif /* STRACE_K_SOCKOPT_H */
|
||||
Index: strace-6.7/tests-mx32/sockopt-timestamp.c
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-mx32/sockopt-timestamp.c 2024-10-31 14:07:27.014704200 +0100
|
||||
+++ strace-6.7/tests-mx32/sockopt-timestamp.c 2024-10-31 14:07:30.453665254 +0100
|
||||
@@ -22,6 +22,7 @@
|
||||
# include "kernel_time_types.h"
|
||||
# include "kernel_timeval.h"
|
||||
# include "kernel_old_timespec.h"
|
||||
+# include "k_sockopt.h"
|
||||
|
||||
# define XLAT_MACROS_ONLY
|
||||
# include "xlat/sock_options.h"
|
||||
@@ -44,30 +45,6 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
-# define SC_setsockopt 14
|
||||
-static long
|
||||
-k_setsockopt(const unsigned int fd, const unsigned int level,
|
||||
- const unsigned int optname, const void *const optval,
|
||||
- const unsigned int len)
|
||||
-{
|
||||
- const kernel_ulong_t fill = (kernel_ulong_t) 0xdefaced00000000ULL;
|
||||
-# ifdef __NR_setsockopt
|
||||
- const kernel_ulong_t bad = (kernel_ulong_t) 0xbadc0dedbadc0dedULL;
|
||||
-# endif
|
||||
-
|
||||
- return syscall(
|
||||
-# ifdef __NR_setsockopt
|
||||
- __NR_setsockopt,
|
||||
-# else /* socketcall */
|
||||
- __NR_socketcall, SC_setsockopt,
|
||||
-# endif
|
||||
- fill | fd , fill | level, fill | optname, optval, fill | len
|
||||
-# ifdef __NR_setsockopt
|
||||
- , bad
|
||||
-# endif
|
||||
- );
|
||||
-}
|
||||
-
|
||||
static void
|
||||
print_timestamp_old(const struct cmsghdr *c)
|
||||
{
|
||||
Index: strace-6.7/tests-mx32/Makefile.in
|
||||
===================================================================
|
||||
--- strace-6.7.orig/tests-mx32/Makefile.in 2024-10-31 14:07:30.398665877 +0100
|
||||
+++ strace-6.7/tests-mx32/Makefile.in 2024-10-31 14:07:30.456665220 +0100
|
||||
@@ -850,6 +850,7 @@
|
||||
libtests_a-hexquote_strndup.$(OBJEXT) \
|
||||
libtests_a-ifindex.$(OBJEXT) \
|
||||
libtests_a-inode_of_sockfd.$(OBJEXT) \
|
||||
+ libtests_a-k_sockopt.$(OBJEXT) \
|
||||
libtests_a-libmmsg.$(OBJEXT) \
|
||||
libtests_a-libsocketcall.$(OBJEXT) \
|
||||
libtests_a-lock_file.$(OBJEXT) \
|
||||
@@ -6803,6 +6804,7 @@
|
||||
./$(DEPDIR)/libtests_a-hexquote_strndup.Po \
|
||||
./$(DEPDIR)/libtests_a-ifindex.Po \
|
||||
./$(DEPDIR)/libtests_a-inode_of_sockfd.Po \
|
||||
+ ./$(DEPDIR)/libtests_a-k_sockopt.Po \
|
||||
./$(DEPDIR)/libtests_a-libmmsg.Po \
|
||||
./$(DEPDIR)/libtests_a-libsocketcall.Po \
|
||||
./$(DEPDIR)/libtests_a-lock_file.Po \
|
||||
@@ -8709,6 +8711,8 @@
|
||||
hexquote_strndup.c \
|
||||
ifindex.c \
|
||||
inode_of_sockfd.c \
|
||||
+ k_sockopt.c \
|
||||
+ k_sockopt.h \
|
||||
libmmsg.c \
|
||||
libsocketcall.c \
|
||||
lock_file.c \
|
||||
@@ -16432,6 +16436,7 @@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-hexquote_strndup.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-ifindex.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-inode_of_sockfd.Po@am__quote@ # am--include-marker
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-k_sockopt.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libmmsg.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-libsocketcall.Po@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtests_a-lock_file.Po@am__quote@ # am--include-marker
|
||||
@@ -17367,6 +17372,20 @@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-inode_of_sockfd.obj `if test -f 'inode_of_sockfd.c'; then $(CYGPATH_W) 'inode_of_sockfd.c'; else $(CYGPATH_W) '$(srcdir)/inode_of_sockfd.c'; fi`
|
||||
|
||||
+libtests_a-k_sockopt.o: k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-k_sockopt.o -MD -MP -MF $(DEPDIR)/libtests_a-k_sockopt.Tpo -c -o libtests_a-k_sockopt.o `test -f 'k_sockopt.c' || echo '$(srcdir)/'`k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-k_sockopt.Tpo $(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='k_sockopt.c' object='libtests_a-k_sockopt.o' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-k_sockopt.o `test -f 'k_sockopt.c' || echo '$(srcdir)/'`k_sockopt.c
|
||||
+
|
||||
+libtests_a-k_sockopt.obj: k_sockopt.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-k_sockopt.obj -MD -MP -MF $(DEPDIR)/libtests_a-k_sockopt.Tpo -c -o libtests_a-k_sockopt.obj `if test -f 'k_sockopt.c'; then $(CYGPATH_W) 'k_sockopt.c'; else $(CYGPATH_W) '$(srcdir)/k_sockopt.c'; fi`
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-k_sockopt.Tpo $(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='k_sockopt.c' object='libtests_a-k_sockopt.obj' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtests_a-k_sockopt.obj `if test -f 'k_sockopt.c'; then $(CYGPATH_W) 'k_sockopt.c'; else $(CYGPATH_W) '$(srcdir)/k_sockopt.c'; fi`
|
||||
+
|
||||
libtests_a-libmmsg.o: libmmsg.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtests_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtests_a-libmmsg.o -MD -MP -MF $(DEPDIR)/libtests_a-libmmsg.Tpo -c -o libtests_a-libmmsg.o `test -f 'libmmsg.c' || echo '$(srcdir)/'`libmmsg.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtests_a-libmmsg.Tpo $(DEPDIR)/libtests_a-libmmsg.Po
|
||||
@@ -19014,6 +19033,7 @@
|
||||
-rm -f ./$(DEPDIR)/libtests_a-hexquote_strndup.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-ifindex.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-inode_of_sockfd.Po
|
||||
+ -rm -f ./$(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libmmsg.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libsocketcall.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-lock_file.Po
|
||||
@@ -20341,6 +20361,7 @@
|
||||
-rm -f ./$(DEPDIR)/libtests_a-hexquote_strndup.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-ifindex.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-inode_of_sockfd.Po
|
||||
+ -rm -f ./$(DEPDIR)/libtests_a-k_sockopt.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libmmsg.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-libsocketcall.Po
|
||||
-rm -f ./$(DEPDIR)/libtests_a-lock_file.Po
|
@ -0,0 +1,60 @@
|
||||
From cbda4efac4d55f8b3bf6622cdb764d2375a2cf3a Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Thu, 31 Oct 2024 13:31:14 +0100
|
||||
Subject: [PATCH 190/190] tests/sockopt-timestamp.c: use k_getsockopt and
|
||||
k_setsockopt
|
||||
|
||||
Avoid using glibc wrappers as these performs additional actions
|
||||
that lead to the following issues:
|
||||
- Test segfault on 32-bit compat when an attempt to use
|
||||
SO_RCVTIMEO_NEW/SO_SNDTIMEO_NEW with opt pointing to unavailable
|
||||
memory is made;
|
||||
- Additional calls to SO_TIMESTAMP{,NS}_OLD when SO_TIMESTAMP{NS}_NEW
|
||||
are called:
|
||||
|
||||
-getsockopt(3, SOL_SOCKET, SO_TIMESTAMP_NEW, [0], [4]) = 0
|
||||
[...]
|
||||
+getsockopt(3, SOL_SOCKET, SO_TIMESTAMP_NEW, 0xf7d3cffc, [4]) = -1 ENOPROTOOPT (Protocol not available)
|
||||
+getsockopt(3, SOL_SOCKET, SO_TIMESTAMP_OLD, [0], [4]) = 0
|
||||
|
||||
* tests/sockopt-sol_socket.c: Include "k_sockopt.h".
|
||||
{get_sockopt): Use k_getsockopt() instead of getsockopt().
|
||||
{set_sockopt): Use k_setsockopt() instead of setsockopt().
|
||||
---
|
||||
tests/sockopt-sol_socket.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/tests/sockopt-sol_socket.c b/tests/sockopt-sol_socket.c
|
||||
index 833aee6e1904..ee7a866c4385 100644
|
||||
--- a/tests/sockopt-sol_socket.c
|
||||
+++ b/tests/sockopt-sol_socket.c
|
||||
@@ -13,6 +13,8 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
+#include "k_sockopt.h"
|
||||
+
|
||||
#define XLAT_MACROS_ONLY
|
||||
# include "xlat/sock_options.h"
|
||||
#undef XLAT_MACROS_ONLY
|
||||
@@ -34,7 +36,7 @@ struct intstr {
|
||||
static int
|
||||
get_sockopt(int fd, int name, void *val, socklen_t *len)
|
||||
{
|
||||
- rc = getsockopt(fd, SOL_SOCKET, name, val, len);
|
||||
+ rc = k_getsockopt(fd, SOL_SOCKET, name, val, len);
|
||||
errstr = sprintrc(rc);
|
||||
return rc;
|
||||
}
|
||||
@@ -42,7 +44,7 @@ get_sockopt(int fd, int name, void *val, socklen_t *len)
|
||||
static int
|
||||
set_sockopt(int fd, int name, void *val, socklen_t len)
|
||||
{
|
||||
- rc = setsockopt(fd, SOL_SOCKET, name, val, len);
|
||||
+ rc = k_setsockopt(fd, SOL_SOCKET, name, val, len);
|
||||
errstr = sprintrc(rc);
|
||||
return rc;
|
||||
}
|
||||
--
|
||||
2.28.0
|
||||
|
46
strace.spec
46
strace.spec
@ -1,7 +1,7 @@
|
||||
Summary: Tracks and displays system calls associated with a running process
|
||||
Name: strace
|
||||
Version: 6.7
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
# The test suite is GPLv2+, the bundled headers are GPLv2 with Linux syscall
|
||||
# exception, all the rest is LGPLv2.1+.
|
||||
%if 0%{?fedora} >= 35 || 0%{?centos} >= 9 || 0%{?rhel} >= 9
|
||||
@ -105,9 +105,6 @@ URL: https://strace.io
|
||||
%if 0%{?fedora} >= 12 || 0%{?centos} >= 6 || 0%{?rhel} >= 6 || 0%{?suse_version} >= 1200
|
||||
Source: https://strace.io/files/%{version}/strace-%{version}.tar.xz
|
||||
|
||||
# v6.9~27 "tests: workaround net-yy-inet* for new kernels"
|
||||
Patch0001: 0001-tests-workaround-net-yy-inet-for-new-kernels.patch
|
||||
|
||||
BuildRequires: xz
|
||||
%else
|
||||
Source: strace-%{version}.tar.gz
|
||||
@ -136,6 +133,27 @@ BuildRequires: pkgconfig(bluez)
|
||||
%{?!buildroot:BuildRoot: %_tmppath/buildroot-%name-%version-%release}
|
||||
%define maybe_use_defattr %{?suse_version:%%defattr(-,root,root)}
|
||||
|
||||
## 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
|
||||
# "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
|
||||
|
||||
# Fallback definitions for make_build/make_install macros
|
||||
%{?!__make: %global __make %_bindir/make}
|
||||
%{?!__install: %global __install %_bindir/install}
|
||||
@ -154,13 +172,24 @@ received by a process.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%patch 183 -p1
|
||||
%patch 184 -p1
|
||||
%patch 185 -p1
|
||||
|
||||
%patch 186 -p1
|
||||
%patch 187 -p1
|
||||
%patch 188 -p1
|
||||
%patch 189 -p1
|
||||
%patch 190 -p1
|
||||
|
||||
chmod a+x tests/*.test
|
||||
|
||||
echo -n %version-%release > .tarball-version
|
||||
echo -n 2024 > .year
|
||||
echo -n 2023-11-21 > doc/.strace.1.in.date
|
||||
echo -n 2022-01-01 > doc/.strace-log-merge.1.in.date
|
||||
|
||||
%patch0001 -p1
|
||||
|
||||
%build
|
||||
echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION'
|
||||
uname -a |head -1
|
||||
@ -211,6 +240,11 @@ fi
|
||||
%{_mandir}/man1/*
|
||||
|
||||
%changelog
|
||||
* Tue Oct 29 2024 Eugene Syromiatnikov <esyr@redhat.com> - 6.7-5
|
||||
- Fix incorrect syscall name reporting in restart_syscall() on attach when
|
||||
PTRACE_GET_SYSCALL_INFO is in use (RHEL-65108).
|
||||
- Update net-yy-inet* and linkat--secontext_mismatch tests.
|
||||
|
||||
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 6.7-4
|
||||
- Bump release for October 2024 mass rebuild:
|
||||
Resolves: RHEL-64018
|
||||
|
Loading…
Reference in New Issue
Block a user