Compare commits
No commits in common. "c8" and "imports/c10s/strace-6.7-3.el10" have entirely different histories.
c8
...
imports/c1
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/strace-5.18.tar.xz
|
||||
/strace-6.7.tar.xz
|
||||
|
@ -1 +0,0 @@
|
||||
e038ea9fc29366ce6119cde27d8cf16ac554a353 SOURCES/strace-5.18.tar.xz
|
52
0001-tests-workaround-net-yy-inet-for-new-kernels.patch
Normal file
52
0001-tests-workaround-net-yy-inet-for-new-kernels.patch
Normal file
@ -0,0 +1,52 @@
|
||||
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
|
||||
|
@ -1,58 +0,0 @@
|
||||
From 2bf069698a384ff2bc62d2a10544d49d766b4d7f Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Mon, 27 Jun 2022 18:00:17 +0200
|
||||
Subject: [PATCH] src/xlat: remove remnants of unnecessary idx usage in xlookup
|
||||
|
||||
As there is no idx saving between calls anymore, there's no need to use
|
||||
(and update) idx in the XT_SORTED case. Reported by clang as a dead store:
|
||||
|
||||
Error: CLANG_WARNING:
|
||||
strace-5.18/src/xlat.c:84:4: warning[deadcode.DeadStores]: Value stored to 'idx' is never read
|
||||
|
||||
* src/xlat.c (xlookup): Remove idx declaration; declare idx inside
|
||||
of the for loop in the XT_NORMAL case; do not offset x->data and x->size
|
||||
by offs in the XT_SORTED case and do not update idx upon successful
|
||||
lookup.
|
||||
|
||||
Complements: v5.15~164 "xlat: no longer interpret NULL xlat as continuation"
|
||||
---
|
||||
src/xlat.c | 10 +++-------
|
||||
1 file changed, 3 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: strace-5.18/src/xlat.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/xlat.c 2022-07-12 17:11:52.660927011 +0200
|
||||
+++ strace-5.18/src/xlat.c 2022-07-12 17:16:18.116794139 +0200
|
||||
@@ -61,7 +61,6 @@
|
||||
const char *
|
||||
xlookup(const struct xlat *x, const uint64_t val)
|
||||
{
|
||||
- size_t idx = 0;
|
||||
const struct xlat_data *e;
|
||||
|
||||
if (!x || !x->data)
|
||||
@@ -69,21 +68,18 @@
|
||||
|
||||
switch (x->type) {
|
||||
case XT_NORMAL:
|
||||
- for (; idx < x->size; idx++)
|
||||
+ for (size_t idx = 0; idx < x->size; idx++)
|
||||
if (x->data[idx].val == val)
|
||||
return x->data[idx].str;
|
||||
break;
|
||||
|
||||
case XT_SORTED:
|
||||
e = bsearch((const void *) &val,
|
||||
- x->data + idx,
|
||||
- x->size - idx,
|
||||
+ x->data, x->size,
|
||||
sizeof(x->data[0]),
|
||||
xlat_bsearch_compare);
|
||||
- if (e) {
|
||||
- idx = e - x->data;
|
||||
+ if (e)
|
||||
return e->str;
|
||||
- }
|
||||
break;
|
||||
|
||||
case XT_INDEXED:
|
@ -1,56 +0,0 @@
|
||||
From e604d7bfd18cf5f29e6723091cc1db2945c918c9 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Tue, 28 Jun 2022 16:46:53 +0200
|
||||
Subject: [PATCH] strauss: tips whitespace and phrasing cleanups
|
||||
|
||||
* src/strauss.c (tips_tricks_tweaks): Fix some whitespace and phrasing
|
||||
issues.
|
||||
---
|
||||
src/strauss.c | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: strace-5.18/src/strauss.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/strauss.c 2022-07-12 17:17:08.712197019 +0200
|
||||
+++ strace-5.18/src/strauss.c 2022-07-12 17:17:20.685055717 +0200
|
||||
@@ -128,8 +128,8 @@
|
||||
{ "strace is about as old as the Linux kernel.",
|
||||
"It has been originally written for SunOS",
|
||||
"by Paul Kranenburg in 1991. The support",
|
||||
- "for all OSes except Linux has been dropped",
|
||||
- "since 2012, though, in strace 4.7." },
|
||||
+ "for all OSes except Linux was dropped"
|
||||
+ "in 2012, though, in strace 4.7." },
|
||||
{ "strace is able to decode netlink messages.",
|
||||
"It does so automatically for I/O performed",
|
||||
"on netlink sockets. Try it yourself:", "",
|
||||
@@ -187,7 +187,7 @@
|
||||
"want to try --seccomp-bpf option, maybe you",
|
||||
"will feel better." },
|
||||
{ "-v is a shorthand for -e abbrev=none and not",
|
||||
- " for -e verbose=all. It is idiosyncratic,",
|
||||
+ "for -e verbose=all. It is idiosyncratic,",
|
||||
"but it is the historic behaviour." },
|
||||
{ "strace uses netlink for printing",
|
||||
"protocol-specific information about socket",
|
||||
@@ -254,7 +254,7 @@
|
||||
"by invoking it with the following options:", "",
|
||||
" strace -DDDqqq -enone --signal=none" },
|
||||
{ "Historically, supplying -o option to strace",
|
||||
- "led to silencing of messages about tracee",
|
||||
+ "leads to silencing of messages about tracee",
|
||||
"attach/detach and personality changes.",
|
||||
"It can be now overridden with --quiet=none",
|
||||
"option." },
|
||||
@@ -285,8 +285,9 @@
|
||||
"will trace all syscalls related to accessing",
|
||||
"and modifying process's user/group IDs",
|
||||
"and capability sets. Other pre-defined",
|
||||
- "syscall classes include %clock, %desc,%file,",
|
||||
- "%ipc,%memory, %net,%process, and %signal." },
|
||||
+ "syscall classes include %clock, %desc,"
|
||||
+ "%file, %ipc, %memory, %net, %process,"
|
||||
+ "and %signal." },
|
||||
{ "Trying to figure out communication between",
|
||||
"tracees inside a different PID namespace",
|
||||
"(in so-called \"containers\", for example)?",
|
@ -1,48 +0,0 @@
|
||||
From 968789d5426442ac43b96eabd65f3e5c0c141e62 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Tue, 28 Jun 2022 16:47:56 +0200
|
||||
Subject: [PATCH] strauss: fix off-by-one error in strauss array access
|
||||
|
||||
It has to be limited with strauss_lines - 1, not strauss_lines.
|
||||
Reported by covscan:
|
||||
|
||||
Error: OVERRUN (CWE-119):
|
||||
strace-5.18/src/strauss.c:380: cond_at_least: Checking "4UL + i < 37UL"
|
||||
implies that "i" is at least 33 on the false branch.
|
||||
strace-5.18/src/strauss.c:380: overrun-local: Overrunning array "strauss"
|
||||
of 37 8-byte elements at element index 37 (byte offset 303) using index
|
||||
"(4UL + i < 37UL) ? 4UL + i : 37UL" (which evaluates to 37).
|
||||
|
||||
* src/strauss.c (print_totd): Limit strauss array accesses to
|
||||
strauss_lines - 1 instead of strauss_lines.
|
||||
---
|
||||
src/strauss.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/strauss.c b/src/strauss.c
|
||||
index 98af183..b22ab6a 100644
|
||||
--- a/src/strauss.c
|
||||
+++ b/src/strauss.c
|
||||
@@ -373,16 +373,16 @@ print_totd(void)
|
||||
tip_left[MIN(i + 1, ARRAY_SIZE(tip_left) - 1)],
|
||||
w, w, tips_tricks_tweaks[id][i] ?: "",
|
||||
tip_right[MIN(i + 1, ARRAY_SIZE(tip_right) - 1)],
|
||||
- strauss[MIN(3 + i, strauss_lines)]);
|
||||
+ strauss[MIN(3 + i, strauss_lines - 1)]);
|
||||
}
|
||||
fprintf(stderr, "%s%s\n",
|
||||
- tip_bottom, strauss[MIN(3 + i, strauss_lines)]);
|
||||
+ tip_bottom, strauss[MIN(3 + i, strauss_lines - 1)]);
|
||||
do {
|
||||
fprintf(stderr, "%*s%*s%*s%s\n",
|
||||
(int) strlen(tip_left[0]), "",
|
||||
w, "",
|
||||
(int) strlen(tip_right[0]), "",
|
||||
- strauss[MIN(4 + i, strauss_lines)]);
|
||||
+ strauss[MIN(4 + i, strauss_lines - 1)]);
|
||||
} while ((show_tips == TIPS_FULL) && (4 + ++i < strauss_lines));
|
||||
|
||||
printed = true;
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,62 +0,0 @@
|
||||
From 6d3e97e83a7d61cbb2f5109efb4b519383a55712 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Tue, 28 Jun 2022 16:55:49 +0200
|
||||
Subject: [PATCH] util: add offs sanity check to print_clock_t
|
||||
|
||||
While it is not strictly needed right now, the code that uses
|
||||
the calculated offs value lacks any checks for possible buf overruns,
|
||||
which is not defensive enough, so let's add them. Reported by covscan:
|
||||
|
||||
Error: OVERRUN (CWE-119):
|
||||
strace-5.18/src/util.c:248: assignment: Assigning:
|
||||
"offs" = "ilog10(val / clk_tck)". The value of "offs" is now between
|
||||
16 and 31 (inclusive).
|
||||
strace-5.18/src/util.c:249: overrun-local: Overrunning array of 30 bytes
|
||||
at byte offset 31 by dereferencing pointer "buf + offs". [Note: The source
|
||||
code implementation of the function has been overridden by a builtin model.]
|
||||
|
||||
Error: OVERRUN (CWE-119):
|
||||
strace-5.18/src/util.c:248: assignment: Assigning:
|
||||
"offs" = "ilog10(val / clk_tck)". The value of "offs" is now between
|
||||
16 and 31 (inclusive).
|
||||
strace-5.18/src/util.c:253: overrun-buffer-arg: Overrunning array "buf"
|
||||
of 30 bytes by passing it to a function which accesses it at byte offset
|
||||
32 using argument "offs + 2UL" (which evaluates to 33). [Note: The source
|
||||
code implementation of the function has been overridden by a builtin model.]
|
||||
|
||||
Error: OVERRUN (CWE-119):
|
||||
strace-5.18/src/util.c:248: assignment: Assigning:
|
||||
"offs" = "ilog10(val / clk_tck)". The value of "offs" is now between
|
||||
16 and 31 (inclusive).
|
||||
strace-5.18/src/util.c:254: overrun-local: Overrunning array "buf"
|
||||
of 30 bytes at byte offset 32 using index "offs + 1UL" (which evaluates
|
||||
to 32).
|
||||
|
||||
* src/util.c (print_clock_t): Add check that offs is small enough
|
||||
for it and "offs + 2" not to overrun buf.
|
||||
---
|
||||
src/util.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/util.c b/src/util.c
|
||||
index 5f87acb..93aa7b3 100644
|
||||
--- a/src/util.c
|
||||
+++ b/src/util.c
|
||||
@@ -246,6 +246,14 @@ print_clock_t(uint64_t val)
|
||||
*/
|
||||
char buf[sizeof(uint64_t) * 3 + sizeof("0.0 s")];
|
||||
size_t offs = ilog10(val / clk_tck);
|
||||
+ /*
|
||||
+ * This check is mostly to appease covscan, which thinks
|
||||
+ * that offs can go as high as 31 (it cannot), but since
|
||||
+ * there is no proper sanity checks against offs overrunning
|
||||
+ * buf down the code, it may as well be here.
|
||||
+ */
|
||||
+ if (offs > (sizeof(buf) - sizeof("0.0 s")))
|
||||
+ return;
|
||||
int ret = snprintf(buf + offs, sizeof(buf) - offs, "%.*f s",
|
||||
frac_width,
|
||||
(double) (val % clk_tck) / clk_tck);
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,882 +0,0 @@
|
||||
From 960e78f208b4f6d48962bbc9cad45588cc8c90ad Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
|
||||
Date: Tue, 21 Jun 2022 08:43:00 +0200
|
||||
Subject: [PATCH] secontext: print context of Unix socket's sun_path field
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
|
||||
|
||||
* src/sockaddr.c: Include "secontext.h".
|
||||
(print_sockaddr_data_un): Print the SELinux context of sun_path field
|
||||
using selinux_printfilecon.
|
||||
* NEWS: Mention this change.
|
||||
* tests/secontext.c (raw_secontext_full_fd, get_secontext_field_fd,
|
||||
raw_secontext_short_fd, secontext_full_fd, secontext_short_fd): New
|
||||
functions.
|
||||
* tests/secontext.h (secontext_full_fd, secontext_short_fd,
|
||||
get_secontext_field_fd): New prototypes.
|
||||
(SECONTEXT_FD): New macro.
|
||||
* tests/sockname.c: Include "secontext.h".
|
||||
(test_sockname_syscall): Update expected output.
|
||||
* tests/gen_tests.in (getsockname--secontext,
|
||||
getsockname--secontext_full, getsockname--secontext_full_mismatch,
|
||||
getsockname--secontext_mismatch): New tests.
|
||||
|
||||
Resolves: https://github.com/strace/strace/pull/214
|
||||
---
|
||||
NEWS | 1 +
|
||||
src/sockaddr.c | 3 +++
|
||||
tests/gen_tests.in | 4 ++++
|
||||
tests/secontext.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
tests/secontext.h | 12 ++++++++++++
|
||||
tests/sockname.c | 54 +++++++++++++++++++++++++++++++++++-------------------
|
||||
6 files changed, 104 insertions(+), 19 deletions(-)
|
||||
|
||||
Index: strace-5.18/NEWS
|
||||
===================================================================
|
||||
--- strace-5.18.orig/NEWS 2022-07-12 18:20:18.495470531 +0200
|
||||
+++ strace-5.18/NEWS 2022-07-12 18:20:44.531163262 +0200
|
||||
@@ -5,6 +5,7 @@
|
||||
* Added an interface of raising des Strausses awareness.
|
||||
* Added --tips option to print strace tips, tricks, and tweaks
|
||||
at the end of the tracing session.
|
||||
+ * Implemented printing of Unix socket sun_path field's SELinux context.
|
||||
* Enhanced decoding of bpf and io_uring_register syscalls.
|
||||
* Implemented decoding of COUNTER_*, RTC_PARAM_GET, and RTC_PARAM_SET ioctl
|
||||
commands.
|
||||
Index: strace-5.18/src/sockaddr.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/sockaddr.c 2022-07-12 18:17:36.745379483 +0200
|
||||
+++ strace-5.18/src/sockaddr.c 2022-07-12 18:20:18.495470531 +0200
|
||||
@@ -63,6 +63,8 @@
|
||||
#include "xlat/mctp_addrs.h"
|
||||
#include "xlat/mctp_nets.h"
|
||||
|
||||
+#include "secontext.h"
|
||||
+
|
||||
#define SIZEOF_SA_FAMILY sizeof_field(struct sockaddr, sa_family)
|
||||
|
||||
struct sockaddr_rxrpc {
|
||||
@@ -115,6 +117,7 @@
|
||||
if (sa_un->sun_path[0]) {
|
||||
print_quoted_string(sa_un->sun_path, path_len + 1,
|
||||
QUOTE_0_TERMINATED);
|
||||
+ selinux_printfilecon(tcp, sa_un->sun_path);
|
||||
} else {
|
||||
tprints("@");
|
||||
print_quoted_string(sa_un->sun_path + 1, path_len - 1, 0);
|
||||
Index: strace-5.18/tests/gen_tests.in
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests/gen_tests.in 2022-07-12 18:17:36.746379471 +0200
|
||||
+++ strace-5.18/tests/gen_tests.in 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -225,6 +225,10 @@
|
||||
getsid -a10
|
||||
getsid--pidns-translation test_pidns -e trace=getsid -a10
|
||||
getsockname -a27
|
||||
+getsockname--secontext -a27 --secontext -e trace=getsockname
|
||||
+getsockname--secontext_full -a27 --secontext=full -e trace=getsockname
|
||||
+getsockname--secontext_full_mismatch -a27 --secontext=full,mismatch -e trace=getsockname
|
||||
+getsockname--secontext_mismatch -a27 --secontext=mismatch -e trace=getsockname
|
||||
gettid -a9
|
||||
getuid-creds +getuid.test
|
||||
getuid32 +getuid.test
|
||||
Index: strace-5.18/tests/secontext.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests/secontext.c 2022-07-12 18:17:36.747379459 +0200
|
||||
+++ strace-5.18/tests/secontext.c 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -141,6 +141,21 @@
|
||||
return full_secontext;
|
||||
}
|
||||
|
||||
+static char *
|
||||
+raw_secontext_full_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *full_secontext = NULL;
|
||||
+ char *secontext;
|
||||
+
|
||||
+ if (fgetfilecon(fd, &secontext) >= 0) {
|
||||
+ full_secontext = strip_trailing_newlines(xstrdup(secontext));
|
||||
+ freecon(secontext);
|
||||
+ }
|
||||
+ errno = saved_errno;
|
||||
+ return full_secontext;
|
||||
+}
|
||||
+
|
||||
char *
|
||||
get_secontext_field_file(const char *file, enum secontext_field field)
|
||||
{
|
||||
@@ -151,6 +166,16 @@
|
||||
return type;
|
||||
}
|
||||
|
||||
+char *
|
||||
+get_secontext_field_fd(int fd, enum secontext_field field)
|
||||
+{
|
||||
+ char *ctx = raw_secontext_full_fd(fd);
|
||||
+ char *type = get_secontext_field(ctx, field);
|
||||
+ free(ctx);
|
||||
+
|
||||
+ return type;
|
||||
+}
|
||||
+
|
||||
static char *
|
||||
raw_secontext_short_file(const char *filename)
|
||||
{
|
||||
@@ -158,6 +183,12 @@
|
||||
}
|
||||
|
||||
static char *
|
||||
+raw_secontext_short_fd(int fd)
|
||||
+{
|
||||
+ return get_secontext_field_fd(fd, SECONTEXT_TYPE);
|
||||
+}
|
||||
+
|
||||
+static char *
|
||||
raw_secontext_full_pid(pid_t pid)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
@@ -205,6 +236,15 @@
|
||||
}
|
||||
|
||||
char *
|
||||
+secontext_full_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *context = raw_secontext_full_fd(fd);
|
||||
+ errno = saved_errno;
|
||||
+ return FORMAT_SPACE_BEFORE(context);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
secontext_full_pid(pid_t pid)
|
||||
{
|
||||
return FORMAT_SPACE_AFTER(raw_secontext_full_pid(pid));
|
||||
@@ -228,6 +268,15 @@
|
||||
errno = saved_errno;
|
||||
return FORMAT_SPACE_BEFORE(context);
|
||||
}
|
||||
+
|
||||
+char *
|
||||
+secontext_short_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *context = raw_secontext_short_fd(fd);
|
||||
+ errno = saved_errno;
|
||||
+ return FORMAT_SPACE_BEFORE(context);
|
||||
+}
|
||||
|
||||
char *
|
||||
secontext_short_pid(pid_t pid)
|
||||
Index: strace-5.18/tests/secontext.h
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests/secontext.h 2022-07-12 18:17:36.747379459 +0200
|
||||
+++ strace-5.18/tests/secontext.h 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -9,9 +9,11 @@
|
||||
#include "xmalloc.h"
|
||||
#include <unistd.h>
|
||||
|
||||
+char *secontext_full_fd(int) ATTRIBUTE_MALLOC;
|
||||
char *secontext_full_file(const char *, bool) ATTRIBUTE_MALLOC;
|
||||
char *secontext_full_pid(pid_t) ATTRIBUTE_MALLOC;
|
||||
|
||||
+char *secontext_short_fd(int) ATTRIBUTE_MALLOC;
|
||||
char *secontext_short_file(const char *, bool) ATTRIBUTE_MALLOC;
|
||||
char *secontext_short_pid(pid_t) ATTRIBUTE_MALLOC;
|
||||
|
||||
@@ -30,6 +32,7 @@
|
||||
*/
|
||||
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);
|
||||
@@ -44,6 +47,7 @@
|
||||
# else
|
||||
# define SECONTEXT_FILE(filename) secontext_full_file(filename, false)
|
||||
# endif
|
||||
+# define SECONTEXT_FD(fd) secontext_full_fd(fd)
|
||||
# define SECONTEXT_PID(pid) secontext_full_pid(pid)
|
||||
|
||||
# else
|
||||
@@ -53,6 +57,7 @@
|
||||
# else
|
||||
# define SECONTEXT_FILE(filename) secontext_short_file(filename, false)
|
||||
# endif
|
||||
+# define SECONTEXT_FD(fd) secontext_short_fd(fd)
|
||||
# define SECONTEXT_PID(pid) secontext_short_pid(pid)
|
||||
|
||||
# endif
|
||||
@@ -65,6 +70,12 @@
|
||||
return NULL;
|
||||
}
|
||||
static inline char *
|
||||
+get_secontext_field_fd(int fd, enum secontext_field field)
|
||||
+{
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static inline char *
|
||||
get_secontext_field_file(const char *file, enum secontext_field field)
|
||||
{
|
||||
return NULL;
|
||||
@@ -81,6 +92,7 @@
|
||||
{
|
||||
}
|
||||
|
||||
+# define SECONTEXT_FD(fd) xstrdup("")
|
||||
# define SECONTEXT_FILE(filename) xstrdup("")
|
||||
# define SECONTEXT_PID(pid) xstrdup("")
|
||||
|
||||
Index: strace-5.18/tests/sockname.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests/sockname.c 2022-07-12 18:17:36.748379448 +0200
|
||||
+++ strace-5.18/tests/sockname.c 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -18,6 +18,8 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
+#include "secontext.h"
|
||||
+
|
||||
#ifndef TEST_SYSCALL_NAME
|
||||
# error TEST_SYSCALL_NAME must be defined
|
||||
#endif
|
||||
@@ -59,14 +61,19 @@
|
||||
*plen = sizeof(struct sockaddr_un);
|
||||
struct sockaddr_un *addr = tail_alloc(*plen);
|
||||
|
||||
+ char *my_secontext = SECONTEXT_PID_MY();
|
||||
+ char *fd_secontext = SECONTEXT_FD(fd);
|
||||
+
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
int rc = TEST_SYSCALL_NAME(fd PREFIX_S_ARGS, (void *) addr,
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%s\"%s}"
|
||||
", [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR, addr->sun_path,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
(int) sizeof(struct sockaddr_un), (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
memset(addr, 0, sizeof(*addr));
|
||||
@@ -75,28 +82,34 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%s\"%s}"
|
||||
", [%d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR, addr->sun_path,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
(int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr, 0 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, NULL%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr, SUFFIX_STR,
|
||||
- sprintrc(rc));
|
||||
+ printf("%s%s(%d%s%s, %p, NULL%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR,
|
||||
+ addr, SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_S_ARGS, 0, 0 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, NULL, NULL%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, rc == -1 ? PREFIX_F_STR : PREFIX_S_STR,
|
||||
+ printf("%s%s(%d%s%s, NULL, NULL%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext,
|
||||
+ rc == -1 ? PREFIX_F_STR : PREFIX_S_STR,
|
||||
SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr,
|
||||
plen + 1 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, %p%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr,
|
||||
+ printf("%s%s(%d%s%s, %p, %p%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR, addr,
|
||||
plen + 1, SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
const size_t offsetof_sun_path = offsetof(struct sockaddr_un, sun_path);
|
||||
@@ -108,8 +121,9 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX}, [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR,
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX}, [%d => %d]%s) = %d\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
(int) offsetof_sun_path, (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
++addr;
|
||||
@@ -121,17 +135,19 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%.*s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%.*s\"%s}"
|
||||
", [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
(int) (sizeof(struct sockaddr) - offsetof_sun_path),
|
||||
- addr->sun_path, (int) sizeof(struct sockaddr),
|
||||
- (int) *plen, SUFFIX_STR, rc);
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
+ (int) sizeof(struct sockaddr), (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr,
|
||||
plen SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, [%d]%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr,
|
||||
+ printf("%s%s(%d%s%s, %p, [%d]%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR, addr,
|
||||
*plen, SUFFIX_STR, sprintrc(rc));
|
||||
}
|
||||
Index: strace-5.18/tests-m32/secontext.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests-m32/secontext.c 2022-07-12 18:17:36.747379459 +0200
|
||||
+++ strace-5.18/tests-m32/secontext.c 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -141,6 +141,21 @@
|
||||
return full_secontext;
|
||||
}
|
||||
|
||||
+static char *
|
||||
+raw_secontext_full_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *full_secontext = NULL;
|
||||
+ char *secontext;
|
||||
+
|
||||
+ if (fgetfilecon(fd, &secontext) >= 0) {
|
||||
+ full_secontext = strip_trailing_newlines(xstrdup(secontext));
|
||||
+ freecon(secontext);
|
||||
+ }
|
||||
+ errno = saved_errno;
|
||||
+ return full_secontext;
|
||||
+}
|
||||
+
|
||||
char *
|
||||
get_secontext_field_file(const char *file, enum secontext_field field)
|
||||
{
|
||||
@@ -151,6 +166,16 @@
|
||||
return type;
|
||||
}
|
||||
|
||||
+char *
|
||||
+get_secontext_field_fd(int fd, enum secontext_field field)
|
||||
+{
|
||||
+ char *ctx = raw_secontext_full_fd(fd);
|
||||
+ char *type = get_secontext_field(ctx, field);
|
||||
+ free(ctx);
|
||||
+
|
||||
+ return type;
|
||||
+}
|
||||
+
|
||||
static char *
|
||||
raw_secontext_short_file(const char *filename)
|
||||
{
|
||||
@@ -158,6 +183,12 @@
|
||||
}
|
||||
|
||||
static char *
|
||||
+raw_secontext_short_fd(int fd)
|
||||
+{
|
||||
+ return get_secontext_field_fd(fd, SECONTEXT_TYPE);
|
||||
+}
|
||||
+
|
||||
+static char *
|
||||
raw_secontext_full_pid(pid_t pid)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
@@ -205,6 +236,15 @@
|
||||
}
|
||||
|
||||
char *
|
||||
+secontext_full_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *context = raw_secontext_full_fd(fd);
|
||||
+ errno = saved_errno;
|
||||
+ return FORMAT_SPACE_BEFORE(context);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
secontext_full_pid(pid_t pid)
|
||||
{
|
||||
return FORMAT_SPACE_AFTER(raw_secontext_full_pid(pid));
|
||||
@@ -228,6 +268,15 @@
|
||||
errno = saved_errno;
|
||||
return FORMAT_SPACE_BEFORE(context);
|
||||
}
|
||||
+
|
||||
+char *
|
||||
+secontext_short_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *context = raw_secontext_short_fd(fd);
|
||||
+ errno = saved_errno;
|
||||
+ return FORMAT_SPACE_BEFORE(context);
|
||||
+}
|
||||
|
||||
char *
|
||||
secontext_short_pid(pid_t pid)
|
||||
Index: strace-5.18/tests-m32/secontext.h
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests-m32/secontext.h 2022-07-12 18:17:36.747379459 +0200
|
||||
+++ strace-5.18/tests-m32/secontext.h 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -9,9 +9,11 @@
|
||||
#include "xmalloc.h"
|
||||
#include <unistd.h>
|
||||
|
||||
+char *secontext_full_fd(int) ATTRIBUTE_MALLOC;
|
||||
char *secontext_full_file(const char *, bool) ATTRIBUTE_MALLOC;
|
||||
char *secontext_full_pid(pid_t) ATTRIBUTE_MALLOC;
|
||||
|
||||
+char *secontext_short_fd(int) ATTRIBUTE_MALLOC;
|
||||
char *secontext_short_file(const char *, bool) ATTRIBUTE_MALLOC;
|
||||
char *secontext_short_pid(pid_t) ATTRIBUTE_MALLOC;
|
||||
|
||||
@@ -30,6 +32,7 @@
|
||||
*/
|
||||
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);
|
||||
@@ -44,6 +47,7 @@
|
||||
# else
|
||||
# define SECONTEXT_FILE(filename) secontext_full_file(filename, false)
|
||||
# endif
|
||||
+# define SECONTEXT_FD(fd) secontext_full_fd(fd)
|
||||
# define SECONTEXT_PID(pid) secontext_full_pid(pid)
|
||||
|
||||
# else
|
||||
@@ -53,6 +57,7 @@
|
||||
# else
|
||||
# define SECONTEXT_FILE(filename) secontext_short_file(filename, false)
|
||||
# endif
|
||||
+# define SECONTEXT_FD(fd) secontext_short_fd(fd)
|
||||
# define SECONTEXT_PID(pid) secontext_short_pid(pid)
|
||||
|
||||
# endif
|
||||
@@ -65,6 +70,12 @@
|
||||
return NULL;
|
||||
}
|
||||
static inline char *
|
||||
+get_secontext_field_fd(int fd, enum secontext_field field)
|
||||
+{
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static inline char *
|
||||
get_secontext_field_file(const char *file, enum secontext_field field)
|
||||
{
|
||||
return NULL;
|
||||
@@ -81,6 +92,7 @@
|
||||
{
|
||||
}
|
||||
|
||||
+# define SECONTEXT_FD(fd) xstrdup("")
|
||||
# define SECONTEXT_FILE(filename) xstrdup("")
|
||||
# define SECONTEXT_PID(pid) xstrdup("")
|
||||
|
||||
Index: strace-5.18/tests-m32/sockname.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests-m32/sockname.c 2022-07-12 18:17:36.748379448 +0200
|
||||
+++ strace-5.18/tests-m32/sockname.c 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -18,6 +18,8 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
+#include "secontext.h"
|
||||
+
|
||||
#ifndef TEST_SYSCALL_NAME
|
||||
# error TEST_SYSCALL_NAME must be defined
|
||||
#endif
|
||||
@@ -59,14 +61,19 @@
|
||||
*plen = sizeof(struct sockaddr_un);
|
||||
struct sockaddr_un *addr = tail_alloc(*plen);
|
||||
|
||||
+ char *my_secontext = SECONTEXT_PID_MY();
|
||||
+ char *fd_secontext = SECONTEXT_FD(fd);
|
||||
+
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
int rc = TEST_SYSCALL_NAME(fd PREFIX_S_ARGS, (void *) addr,
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%s\"%s}"
|
||||
", [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR, addr->sun_path,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
(int) sizeof(struct sockaddr_un), (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
memset(addr, 0, sizeof(*addr));
|
||||
@@ -75,28 +82,34 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%s\"%s}"
|
||||
", [%d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR, addr->sun_path,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
(int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr, 0 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, NULL%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr, SUFFIX_STR,
|
||||
- sprintrc(rc));
|
||||
+ printf("%s%s(%d%s%s, %p, NULL%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR,
|
||||
+ addr, SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_S_ARGS, 0, 0 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, NULL, NULL%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, rc == -1 ? PREFIX_F_STR : PREFIX_S_STR,
|
||||
+ printf("%s%s(%d%s%s, NULL, NULL%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext,
|
||||
+ rc == -1 ? PREFIX_F_STR : PREFIX_S_STR,
|
||||
SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr,
|
||||
plen + 1 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, %p%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr,
|
||||
+ printf("%s%s(%d%s%s, %p, %p%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR, addr,
|
||||
plen + 1, SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
const size_t offsetof_sun_path = offsetof(struct sockaddr_un, sun_path);
|
||||
@@ -108,8 +121,9 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX}, [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR,
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX}, [%d => %d]%s) = %d\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
(int) offsetof_sun_path, (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
++addr;
|
||||
@@ -121,17 +135,19 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%.*s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%.*s\"%s}"
|
||||
", [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
(int) (sizeof(struct sockaddr) - offsetof_sun_path),
|
||||
- addr->sun_path, (int) sizeof(struct sockaddr),
|
||||
- (int) *plen, SUFFIX_STR, rc);
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
+ (int) sizeof(struct sockaddr), (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr,
|
||||
plen SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, [%d]%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr,
|
||||
+ printf("%s%s(%d%s%s, %p, [%d]%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR, addr,
|
||||
*plen, SUFFIX_STR, sprintrc(rc));
|
||||
}
|
||||
Index: strace-5.18/tests-mx32/secontext.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests-mx32/secontext.c 2022-07-12 18:17:36.747379459 +0200
|
||||
+++ strace-5.18/tests-mx32/secontext.c 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -141,6 +141,21 @@
|
||||
return full_secontext;
|
||||
}
|
||||
|
||||
+static char *
|
||||
+raw_secontext_full_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *full_secontext = NULL;
|
||||
+ char *secontext;
|
||||
+
|
||||
+ if (fgetfilecon(fd, &secontext) >= 0) {
|
||||
+ full_secontext = strip_trailing_newlines(xstrdup(secontext));
|
||||
+ freecon(secontext);
|
||||
+ }
|
||||
+ errno = saved_errno;
|
||||
+ return full_secontext;
|
||||
+}
|
||||
+
|
||||
char *
|
||||
get_secontext_field_file(const char *file, enum secontext_field field)
|
||||
{
|
||||
@@ -151,6 +166,16 @@
|
||||
return type;
|
||||
}
|
||||
|
||||
+char *
|
||||
+get_secontext_field_fd(int fd, enum secontext_field field)
|
||||
+{
|
||||
+ char *ctx = raw_secontext_full_fd(fd);
|
||||
+ char *type = get_secontext_field(ctx, field);
|
||||
+ free(ctx);
|
||||
+
|
||||
+ return type;
|
||||
+}
|
||||
+
|
||||
static char *
|
||||
raw_secontext_short_file(const char *filename)
|
||||
{
|
||||
@@ -158,6 +183,12 @@
|
||||
}
|
||||
|
||||
static char *
|
||||
+raw_secontext_short_fd(int fd)
|
||||
+{
|
||||
+ return get_secontext_field_fd(fd, SECONTEXT_TYPE);
|
||||
+}
|
||||
+
|
||||
+static char *
|
||||
raw_secontext_full_pid(pid_t pid)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
@@ -205,6 +236,15 @@
|
||||
}
|
||||
|
||||
char *
|
||||
+secontext_full_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *context = raw_secontext_full_fd(fd);
|
||||
+ errno = saved_errno;
|
||||
+ return FORMAT_SPACE_BEFORE(context);
|
||||
+}
|
||||
+
|
||||
+char *
|
||||
secontext_full_pid(pid_t pid)
|
||||
{
|
||||
return FORMAT_SPACE_AFTER(raw_secontext_full_pid(pid));
|
||||
@@ -228,6 +268,15 @@
|
||||
errno = saved_errno;
|
||||
return FORMAT_SPACE_BEFORE(context);
|
||||
}
|
||||
+
|
||||
+char *
|
||||
+secontext_short_fd(int fd)
|
||||
+{
|
||||
+ int saved_errno = errno;
|
||||
+ char *context = raw_secontext_short_fd(fd);
|
||||
+ errno = saved_errno;
|
||||
+ return FORMAT_SPACE_BEFORE(context);
|
||||
+}
|
||||
|
||||
char *
|
||||
secontext_short_pid(pid_t pid)
|
||||
Index: strace-5.18/tests-mx32/secontext.h
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests-mx32/secontext.h 2022-07-12 18:17:36.747379459 +0200
|
||||
+++ strace-5.18/tests-mx32/secontext.h 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -9,9 +9,11 @@
|
||||
#include "xmalloc.h"
|
||||
#include <unistd.h>
|
||||
|
||||
+char *secontext_full_fd(int) ATTRIBUTE_MALLOC;
|
||||
char *secontext_full_file(const char *, bool) ATTRIBUTE_MALLOC;
|
||||
char *secontext_full_pid(pid_t) ATTRIBUTE_MALLOC;
|
||||
|
||||
+char *secontext_short_fd(int) ATTRIBUTE_MALLOC;
|
||||
char *secontext_short_file(const char *, bool) ATTRIBUTE_MALLOC;
|
||||
char *secontext_short_pid(pid_t) ATTRIBUTE_MALLOC;
|
||||
|
||||
@@ -30,6 +32,7 @@
|
||||
*/
|
||||
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);
|
||||
@@ -44,6 +47,7 @@
|
||||
# else
|
||||
# define SECONTEXT_FILE(filename) secontext_full_file(filename, false)
|
||||
# endif
|
||||
+# define SECONTEXT_FD(fd) secontext_full_fd(fd)
|
||||
# define SECONTEXT_PID(pid) secontext_full_pid(pid)
|
||||
|
||||
# else
|
||||
@@ -53,6 +57,7 @@
|
||||
# else
|
||||
# define SECONTEXT_FILE(filename) secontext_short_file(filename, false)
|
||||
# endif
|
||||
+# define SECONTEXT_FD(fd) secontext_short_fd(fd)
|
||||
# define SECONTEXT_PID(pid) secontext_short_pid(pid)
|
||||
|
||||
# endif
|
||||
@@ -65,6 +70,12 @@
|
||||
return NULL;
|
||||
}
|
||||
static inline char *
|
||||
+get_secontext_field_fd(int fd, enum secontext_field field)
|
||||
+{
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+static inline char *
|
||||
get_secontext_field_file(const char *file, enum secontext_field field)
|
||||
{
|
||||
return NULL;
|
||||
@@ -81,6 +92,7 @@
|
||||
{
|
||||
}
|
||||
|
||||
+# define SECONTEXT_FD(fd) xstrdup("")
|
||||
# define SECONTEXT_FILE(filename) xstrdup("")
|
||||
# define SECONTEXT_PID(pid) xstrdup("")
|
||||
|
||||
Index: strace-5.18/tests-mx32/sockname.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests-mx32/sockname.c 2022-07-12 18:17:36.748379448 +0200
|
||||
+++ strace-5.18/tests-mx32/sockname.c 2022-07-12 18:20:18.496470519 +0200
|
||||
@@ -18,6 +18,8 @@
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
+#include "secontext.h"
|
||||
+
|
||||
#ifndef TEST_SYSCALL_NAME
|
||||
# error TEST_SYSCALL_NAME must be defined
|
||||
#endif
|
||||
@@ -59,14 +61,19 @@
|
||||
*plen = sizeof(struct sockaddr_un);
|
||||
struct sockaddr_un *addr = tail_alloc(*plen);
|
||||
|
||||
+ char *my_secontext = SECONTEXT_PID_MY();
|
||||
+ char *fd_secontext = SECONTEXT_FD(fd);
|
||||
+
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
int rc = TEST_SYSCALL_NAME(fd PREFIX_S_ARGS, (void *) addr,
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%s\"%s}"
|
||||
", [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR, addr->sun_path,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
(int) sizeof(struct sockaddr_un), (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
memset(addr, 0, sizeof(*addr));
|
||||
@@ -75,28 +82,34 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%s\"%s}"
|
||||
", [%d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR, addr->sun_path,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
(int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr, 0 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, NULL%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr, SUFFIX_STR,
|
||||
- sprintrc(rc));
|
||||
+ printf("%s%s(%d%s%s, %p, NULL%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR,
|
||||
+ addr, SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_S_ARGS, 0, 0 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, NULL, NULL%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, rc == -1 ? PREFIX_F_STR : PREFIX_S_STR,
|
||||
+ printf("%s%s(%d%s%s, NULL, NULL%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext,
|
||||
+ rc == -1 ? PREFIX_F_STR : PREFIX_S_STR,
|
||||
SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr,
|
||||
plen + 1 SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, %p%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr,
|
||||
+ printf("%s%s(%d%s%s, %p, %p%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR, addr,
|
||||
plen + 1, SUFFIX_STR, sprintrc(rc));
|
||||
|
||||
const size_t offsetof_sun_path = offsetof(struct sockaddr_un, sun_path);
|
||||
@@ -108,8 +121,9 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX}, [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR,
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX}, [%d => %d]%s) = %d\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
(int) offsetof_sun_path, (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
++addr;
|
||||
@@ -121,17 +135,19 @@
|
||||
plen SUFFIX_ARGS);
|
||||
if (rc < 0)
|
||||
perror_msg_and_skip(TEST_SYSCALL_STR);
|
||||
- printf("%s(%d%s, {sa_family=AF_UNIX, sun_path=\"%.*s\"}"
|
||||
+ printf("%s%s(%d%s%s, {sa_family=AF_UNIX, sun_path=\"%.*s\"%s}"
|
||||
", [%d => %d]%s) = %d\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_S_STR,
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_S_STR,
|
||||
(int) (sizeof(struct sockaddr) - offsetof_sun_path),
|
||||
- addr->sun_path, (int) sizeof(struct sockaddr),
|
||||
- (int) *plen, SUFFIX_STR, rc);
|
||||
+ addr->sun_path, SECONTEXT_FILE(addr->sun_path),
|
||||
+ (int) sizeof(struct sockaddr), (int) *plen, SUFFIX_STR, rc);
|
||||
|
||||
PREPARE_TEST_SYSCALL_INVOCATION;
|
||||
rc = TEST_SYSCALL_NAME(fd PREFIX_F_ARGS, (void *) addr,
|
||||
plen SUFFIX_ARGS);
|
||||
- printf("%s(%d%s, %p, [%d]%s) = %s\n",
|
||||
- TEST_SYSCALL_STR, fd, PREFIX_F_STR, addr,
|
||||
+ printf("%s%s(%d%s%s, %p, [%d]%s) = %s\n",
|
||||
+ my_secontext,
|
||||
+ TEST_SYSCALL_STR, fd, fd_secontext, PREFIX_F_STR, addr,
|
||||
*plen, SUFFIX_STR, sprintrc(rc));
|
||||
}
|
@ -1,374 +0,0 @@
|
||||
From 676979fa9cc7920e5e4d547814f9c0edb597fa0d Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Thu, 30 Jun 2022 16:01:05 +0200
|
||||
Subject: [PATCH] pathtrace, util: do not print " (deleted)" as part of the
|
||||
path
|
||||
|
||||
In order to allow to discern the unlinked paths from the paths that
|
||||
do indeed end with " (deleted)".
|
||||
|
||||
* src/defs.h (getfdpath_pid): Add deleted parameter.
|
||||
(getfdpath): Pass NULL as deleted parameter to getfdpath_pid.
|
||||
* src/largefile_wrappers.h (lstat_file): New macro.
|
||||
* src/pathtrace.c: Include <sys/stat.h>, <sys/types.h>, <unistd.h>,
|
||||
and "largefile_wrappers.h".
|
||||
(getfdpath_pid): Add deleted parameter, check if path ends with
|
||||
" (deleted)", and if it is, try to figure out if it is a part
|
||||
of the path by comparing device/inode numbers of the file procfs
|
||||
link resolves into and the file pointed by the path read; strip
|
||||
" (deleted)"; set deleted (if it is non-NULL) to true if the fd
|
||||
is turned out to be deleted and to false otherwise.
|
||||
* src/util.c (print_quoted_string_in_angle_brackets): Add deleted
|
||||
parameter, print "(deleted)" after the closing angle bracket if it is
|
||||
non-NULL.
|
||||
(printfd_pid): Add deleted local variable, pass it to getfdpath_pid
|
||||
and print_quoted_string_in_angle_brackets calls.
|
||||
* tests/fchmod.c: Add checks for a file with " (deleted)" in the path,
|
||||
update expected output.
|
||||
* NEWS: Mention the change.
|
||||
---
|
||||
NEWS | 5 +++++
|
||||
src/defs.h | 5 +++--
|
||||
src/largefile_wrappers.h | 2 ++
|
||||
src/pathtrace.c | 48 +++++++++++++++++++++++++++++++++++++++++++++---
|
||||
src/util.c | 10 +++++++---
|
||||
tests/fchmod.c | 47 +++++++++++++++++++++++++++++++++++++++++++----
|
||||
6 files changed, 105 insertions(+), 12 deletions(-)
|
||||
|
||||
Index: strace-5.18/NEWS
|
||||
===================================================================
|
||||
--- strace-5.18.orig/NEWS 2022-07-13 12:52:48.219784860 +0200
|
||||
+++ strace-5.18/NEWS 2022-07-13 12:52:48.451782122 +0200
|
||||
@@ -1,6 +1,11 @@
|
||||
Noteworthy changes in release 5.18 (2022-06-18)
|
||||
===============================================
|
||||
|
||||
+* Changes in behaviour
|
||||
+ * The "(deleted)" marker for unlinked paths of file descriptors is now printed
|
||||
+ outside angle brackets; the matching of unlinked paths of file descriptors
|
||||
+ no longer includes the " (deleted)" part into consideration.
|
||||
+
|
||||
* Improvements
|
||||
* Added an interface of raising des Strausses awareness.
|
||||
* Added --tips option to print strace tips, tricks, and tweaks
|
||||
Index: strace-5.18/src/defs.h
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/defs.h 2022-07-13 12:52:29.405006910 +0200
|
||||
+++ strace-5.18/src/defs.h 2022-07-13 12:52:54.532710356 +0200
|
||||
@@ -785,12 +785,13 @@
|
||||
return pathtrace_match_set(tcp, &global_path_set);
|
||||
}
|
||||
|
||||
-extern int getfdpath_pid(pid_t pid, int fd, char *buf, unsigned bufsize);
|
||||
+extern int getfdpath_pid(pid_t pid, int fd, char *buf, unsigned bufsize,
|
||||
+ bool *deleted);
|
||||
|
||||
static inline int
|
||||
getfdpath(struct tcb *tcp, int fd, char *buf, unsigned bufsize)
|
||||
{
|
||||
- return getfdpath_pid(tcp->pid, fd, buf, bufsize);
|
||||
+ return getfdpath_pid(tcp->pid, fd, buf, bufsize, NULL);
|
||||
}
|
||||
|
||||
extern unsigned long getfdinode(struct tcb *, int);
|
||||
Index: strace-5.18/src/largefile_wrappers.h
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/largefile_wrappers.h 2022-07-13 12:52:29.405006910 +0200
|
||||
+++ strace-5.18/src/largefile_wrappers.h 2022-07-13 12:52:48.451782122 +0200
|
||||
@@ -31,6 +31,7 @@
|
||||
# endif
|
||||
# define fstat_fd fstat64
|
||||
# define strace_stat_t struct stat64
|
||||
+# define lstat_file lstat64
|
||||
# define stat_file stat64
|
||||
# define struct_dirent struct dirent64
|
||||
# define read_dir readdir64
|
||||
@@ -42,6 +43,7 @@
|
||||
# define fcntl_fd fcntl
|
||||
# define fstat_fd fstat
|
||||
# define strace_stat_t struct stat
|
||||
+# define lstat_file lstat
|
||||
# define stat_file stat
|
||||
# define struct_dirent struct dirent
|
||||
# define read_dir readdir
|
||||
Index: strace-5.18/src/pathtrace.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/pathtrace.c 2022-07-13 12:52:29.405006910 +0200
|
||||
+++ strace-5.18/src/pathtrace.c 2022-07-13 12:52:54.532710356 +0200
|
||||
@@ -10,7 +10,11 @@
|
||||
#include "defs.h"
|
||||
#include <limits.h>
|
||||
#include <poll.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <unistd.h>
|
||||
|
||||
+#include "largefile_wrappers.h"
|
||||
#include "number_set.h"
|
||||
#include "sen.h"
|
||||
#include "xstring.h"
|
||||
@@ -77,7 +81,7 @@
|
||||
* Get path associated with fd of a process with pid.
|
||||
*/
|
||||
int
|
||||
-getfdpath_pid(pid_t pid, int fd, char *buf, unsigned bufsize)
|
||||
+getfdpath_pid(pid_t pid, int fd, char *buf, unsigned bufsize, bool *deleted)
|
||||
{
|
||||
char linkpath[sizeof("/proc/%u/fd/%u") + 2 * sizeof(int)*3];
|
||||
ssize_t n;
|
||||
@@ -91,12 +95,50 @@
|
||||
|
||||
xsprintf(linkpath, "/proc/%u/fd/%u", proc_pid, fd);
|
||||
n = readlink(linkpath, buf, bufsize - 1);
|
||||
+ if (n < 0)
|
||||
+ goto end;
|
||||
+
|
||||
/*
|
||||
* NB: if buf is too small, readlink doesn't fail,
|
||||
* it returns truncated result (IOW: n == bufsize - 1).
|
||||
*/
|
||||
- if (n >= 0)
|
||||
- buf[n] = '\0';
|
||||
+ buf[n] = '\0';
|
||||
+ if (deleted)
|
||||
+ *deleted = false;
|
||||
+
|
||||
+ /*
|
||||
+ * Try to figure out if the kernel has appended " (deleted)"
|
||||
+ * to the end of a potentially unlinked path and set deleted
|
||||
+ * if it is the case.
|
||||
+ */
|
||||
+ static const char del_sfx[] = " (deleted)";
|
||||
+ if ((size_t) n <= sizeof(del_sfx))
|
||||
+ goto end;
|
||||
+
|
||||
+ char *del = buf + n + 1 - sizeof(del_sfx);
|
||||
+
|
||||
+ if (memcmp(del, del_sfx, sizeof(del_sfx)))
|
||||
+ goto end;
|
||||
+
|
||||
+ strace_stat_t st_link;
|
||||
+ strace_stat_t st_path;
|
||||
+ int rc = stat_file(linkpath, &st_link);
|
||||
+
|
||||
+ if (rc)
|
||||
+ goto end;
|
||||
+
|
||||
+ rc = lstat_file(buf, &st_path);
|
||||
+
|
||||
+ if (rc ||
|
||||
+ (st_link.st_ino != st_path.st_ino) ||
|
||||
+ (st_link.st_dev != st_path.st_dev)) {
|
||||
+ *del = '\0';
|
||||
+ n = del - buf + 1;
|
||||
+ if (deleted)
|
||||
+ *deleted = true;
|
||||
+ }
|
||||
+
|
||||
+end:
|
||||
return n;
|
||||
}
|
||||
|
||||
Index: strace-5.18/src/util.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/util.c 2022-07-13 12:52:47.989787575 +0200
|
||||
+++ strace-5.18/src/util.c 2022-07-13 12:52:48.452782111 +0200
|
||||
@@ -735,12 +735,15 @@
|
||||
}
|
||||
|
||||
static void
|
||||
-print_quoted_string_in_angle_brackets(const char *str)
|
||||
+print_quoted_string_in_angle_brackets(const char *str, const bool deleted)
|
||||
{
|
||||
tprints("<");
|
||||
print_quoted_string_ex(str, strlen(str),
|
||||
QUOTE_OMIT_LEADING_TRAILING_QUOTES, "<>");
|
||||
tprints(">");
|
||||
+
|
||||
+ if (deleted)
|
||||
+ tprints("(deleted)");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -749,8 +752,9 @@
|
||||
PRINT_VAL_D(fd);
|
||||
|
||||
char path[PATH_MAX + 1];
|
||||
+ bool deleted;
|
||||
if (pid > 0 && !number_set_array_is_empty(decode_fd_set, 0)
|
||||
- && getfdpath_pid(pid, fd, path, sizeof(path)) >= 0) {
|
||||
+ && getfdpath_pid(pid, fd, path, sizeof(path), &deleted) >= 0) {
|
||||
if (is_number_in_set(DECODE_FD_SOCKET, decode_fd_set) &&
|
||||
printsocket(tcp, fd, path))
|
||||
goto printed;
|
||||
@@ -761,7 +765,7 @@
|
||||
printpidfd(pid, fd, path))
|
||||
goto printed;
|
||||
if (is_number_in_set(DECODE_FD_PATH, decode_fd_set))
|
||||
- print_quoted_string_in_angle_brackets(path);
|
||||
+ print_quoted_string_in_angle_brackets(path, deleted);
|
||||
printed: ;
|
||||
}
|
||||
|
||||
Index: strace-5.18/tests/fchmod.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests/fchmod.c 2022-07-13 12:52:29.405006910 +0200
|
||||
+++ strace-5.18/tests/fchmod.c 2022-07-13 12:52:48.452782111 +0200
|
||||
@@ -35,10 +35,17 @@
|
||||
(void) unlink(sample);
|
||||
int fd = open(sample, O_CREAT|O_RDONLY, 0400);
|
||||
if (fd == -1)
|
||||
- perror_msg_and_fail("open");
|
||||
+ perror_msg_and_fail("open(\"%s\")", sample);
|
||||
+
|
||||
+ static const char sample_del[] = "fchmod_sample_file (deleted)";
|
||||
+ (void) unlink(sample_del);
|
||||
+ int fd_del = open(sample_del, O_CREAT|O_RDONLY, 0400);
|
||||
+ if (fd_del == -1)
|
||||
+ perror_msg_and_fail("open(\"%s\")", sample);
|
||||
|
||||
# ifdef YFLAG
|
||||
char *sample_realpath = get_fd_path(fd);
|
||||
+ char *sample_del_realpath = get_fd_path(fd_del);
|
||||
# endif
|
||||
|
||||
const char *sample_secontext = SECONTEXT_FILE(sample);
|
||||
@@ -56,12 +63,27 @@
|
||||
sample_secontext,
|
||||
sprintrc(rc));
|
||||
|
||||
+ const char *sample_del_secontext = SECONTEXT_FILE(sample_del);
|
||||
+ rc = syscall(__NR_fchmod, fd_del, 0600);
|
||||
+# ifdef YFLAG
|
||||
+ printf("%s%s(%d<%s>%s, 0600) = %s\n",
|
||||
+# else
|
||||
+ printf("%s%s(%d%s, 0600) = %s\n",
|
||||
+# endif
|
||||
+ my_secontext, "fchmod",
|
||||
+ fd_del,
|
||||
+# ifdef YFLAG
|
||||
+ sample_del_realpath,
|
||||
+# endif
|
||||
+ sample_del_secontext,
|
||||
+ sprintrc(rc));
|
||||
+
|
||||
if (unlink(sample))
|
||||
- perror_msg_and_fail("unlink");
|
||||
+ perror_msg_and_fail("unlink(\"%s\")", sample);
|
||||
|
||||
rc = syscall(__NR_fchmod, fd, 051);
|
||||
# ifdef YFLAG
|
||||
- printf("%s%s(%d<%s (deleted)>%s, 051) = %s\n",
|
||||
+ printf("%s%s(%d<%s>(deleted)%s, 051) = %s\n",
|
||||
# else
|
||||
printf("%s%s(%d%s, 051) = %s\n",
|
||||
# endif
|
||||
@@ -73,9 +95,26 @@
|
||||
sample_secontext,
|
||||
sprintrc(rc));
|
||||
|
||||
+ if (unlink(sample_del))
|
||||
+ perror_msg_and_fail("unlink(\"%s\")", sample_del);
|
||||
+
|
||||
+ rc = syscall(__NR_fchmod, fd_del, 051);
|
||||
+# ifdef YFLAG
|
||||
+ printf("%s%s(%d<%s>(deleted)%s, 051) = %s\n",
|
||||
+# else
|
||||
+ printf("%s%s(%d%s, 051) = %s\n",
|
||||
+# endif
|
||||
+ my_secontext, "fchmod",
|
||||
+ fd_del,
|
||||
+# ifdef YFLAG
|
||||
+ sample_del_realpath,
|
||||
+# endif
|
||||
+ sample_del_secontext,
|
||||
+ sprintrc(rc));
|
||||
+
|
||||
rc = syscall(__NR_fchmod, fd, 004);
|
||||
# ifdef YFLAG
|
||||
- printf("%s%s(%d<%s (deleted)>%s, 004) = %s\n",
|
||||
+ printf("%s%s(%d<%s>(deleted)%s, 004) = %s\n",
|
||||
# else
|
||||
printf("%s%s(%d%s, 004) = %s\n",
|
||||
# endif
|
||||
Index: strace-5.18/tests-m32/fchmod.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/tests-m32/fchmod.c 2022-07-13 12:52:29.405006910 +0200
|
||||
+++ strace-5.18/tests-m32/fchmod.c 2022-07-13 12:52:48.452782111 +0200
|
||||
@@ -35,10 +35,17 @@
|
||||
(void) unlink(sample);
|
||||
int fd = open(sample, O_CREAT|O_RDONLY, 0400);
|
||||
if (fd == -1)
|
||||
- perror_msg_and_fail("open");
|
||||
+ perror_msg_and_fail("open(\"%s\")", sample);
|
||||
+
|
||||
+ static const char sample_del[] = "fchmod_sample_file (deleted)";
|
||||
+ (void) unlink(sample_del);
|
||||
+ int fd_del = open(sample_del, O_CREAT|O_RDONLY, 0400);
|
||||
+ if (fd_del == -1)
|
||||
+ perror_msg_and_fail("open(\"%s\")", sample);
|
||||
|
||||
# ifdef YFLAG
|
||||
char *sample_realpath = get_fd_path(fd);
|
||||
+ char *sample_del_realpath = get_fd_path(fd_del);
|
||||
# endif
|
||||
|
||||
const char *sample_secontext = SECONTEXT_FILE(sample);
|
||||
@@ -56,12 +63,27 @@
|
||||
sample_secontext,
|
||||
sprintrc(rc));
|
||||
|
||||
+ const char *sample_del_secontext = SECONTEXT_FILE(sample_del);
|
||||
+ rc = syscall(__NR_fchmod, fd_del, 0600);
|
||||
+# ifdef YFLAG
|
||||
+ printf("%s%s(%d<%s>%s, 0600) = %s\n",
|
||||
+# else
|
||||
+ printf("%s%s(%d%s, 0600) = %s\n",
|
||||
+# endif
|
||||
+ my_secontext, "fchmod",
|
||||
+ fd_del,
|
||||
+# ifdef YFLAG
|
||||
+ sample_del_realpath,
|
||||
+# endif
|
||||
+ sample_del_secontext,
|
||||
+ sprintrc(rc));
|
||||
+
|
||||
if (unlink(sample))
|
||||
- perror_msg_and_fail("unlink");
|
||||
+ perror_msg_and_fail("unlink(\"%s\")", sample);
|
||||
|
||||
rc = syscall(__NR_fchmod, fd, 051);
|
||||
# ifdef YFLAG
|
||||
- printf("%s%s(%d<%s (deleted)>%s, 051) = %s\n",
|
||||
+ printf("%s%s(%d<%s>(deleted)%s, 051) = %s\n",
|
||||
# else
|
||||
printf("%s%s(%d%s, 051) = %s\n",
|
||||
# endif
|
||||
@@ -73,9 +95,26 @@
|
||||
sample_secontext,
|
||||
sprintrc(rc));
|
||||
|
||||
+ if (unlink(sample_del))
|
||||
+ perror_msg_and_fail("unlink(\"%s\")", sample_del);
|
||||
+
|
||||
+ rc = syscall(__NR_fchmod, fd_del, 051);
|
||||
+# ifdef YFLAG
|
||||
+ printf("%s%s(%d<%s>(deleted)%s, 051) = %s\n",
|
||||
+# else
|
||||
+ printf("%s%s(%d%s, 051) = %s\n",
|
||||
+# endif
|
||||
+ my_secontext, "fchmod",
|
||||
+ fd_del,
|
||||
+# ifdef YFLAG
|
||||
+ sample_del_realpath,
|
||||
+# endif
|
||||
+ sample_del_secontext,
|
||||
+ sprintrc(rc));
|
||||
+
|
||||
rc = syscall(__NR_fchmod, fd, 004);
|
||||
# ifdef YFLAG
|
||||
- printf("%s%s(%d<%s (deleted)>%s, 004) = %s\n",
|
||||
+ printf("%s%s(%d<%s>(deleted)%s, 004) = %s\n",
|
||||
# else
|
||||
printf("%s%s(%d%s, 004) = %s\n",
|
||||
# endif
|
@ -1,209 +0,0 @@
|
||||
From 3f0e5340b651da98251a58cc7923525d69f96032 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Fri, 1 Jul 2022 10:45:48 +0200
|
||||
Subject: [PATCH] secontext: fix expected SELinux context check for unlinked
|
||||
FDs
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
selinux_getfdcon open-coded a part of getfdpath_pid since it tries
|
||||
to do the same job, figure out a path associated with an FD, for slightly
|
||||
different purpose: to get the expected SELinux context for it. As the previous
|
||||
commit shows, it's a bit more complicated in cases when the path ends
|
||||
with the " (deleted)" string, which is also used for designated unlinked paths
|
||||
in procfs. Otherwise, it may manifest in test failures such as this:
|
||||
|
||||
[unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023] fchmod(4</root/rpmbuild/BUILD/strace-5.13/tests/fchmod-y--secontext_full_mismatch.dir/fchmod_subdir/fchmod_sample_file> [unconfined_u:object_r:admin_home_t:s0!!system_u:object_r:admin_home_t:s0], 0600) = 0
|
||||
-[unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023] fchmod(4</root/rpmbuild/BUILD/strace-5.13/tests/fchmod-y--secontext_full_mismatch.dir/fchmod_subdir/fchmod_sample_file (deleted)> [unconfined_u:object_r:admin_home_t:s0!!system_u:object_r:admin_home_t:s0], 051) = 0
|
||||
-[unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023] fchmod(4</root/rpmbuild/BUILD/strace-5.13/tests/fchmod-y--secontext_full_mismatch.dir/fchmod_subdir/fchmod_sample_file (deleted)> [unconfined_u:object_r:admin_home_t:s0!!system_u:object_r:admin_home_t:s0], 004) = 0
|
||||
+[unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023] fchmod(4</root/rpmbuild/BUILD/strace-5.13/tests/fchmod-y--secontext_full_mismatch.dir/fchmod_subdir/fchmod_sample_file (deleted)> [unconfined_u:object_r:admin_home_t:s0], 051) = 0
|
||||
+[unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023] fchmod(4</root/rpmbuild/BUILD/strace-5.13/tests/fchmod-y--secontext_full_mismatch.dir/fchmod_subdir/fchmod_sample_file (deleted)> [unconfined_u:object_r:admin_home_t:s0], 004) = 0
|
||||
+++ exited with 0 +++
|
||||
+ fail_ '../../src/strace -a15 -y --secontext=full,mismatch -e trace=fchmod ../fchmod-y--secontext_full_mismatch output mismatch'
|
||||
+ warn_ 'fchmod-y--secontext_full_mismatch.gen.test: failed test: ../../src/strace -a15 -y --secontext=full,mismatch -e trace=fchmod ../fchmod-y--secontext_full_mismatch output mismatch'
|
||||
+ printf '%s\n' 'fchmod-y--secontext_full_mismatch.gen.test: failed test: ../../src/strace -a15 -y --secontext=full,mismatch -e trace=fchmod ../fchmod-y--secontext_full_mismatch output mismatch'
|
||||
fchmod-y--secontext_full_mismatch.gen.test: failed test: ../../src/strace -a15 -y --secontext=full,mismatch -e trace=fchmod ../fchmod-y--secontext_full_mismatch output mismatch
|
||||
+ exit 1
|
||||
FAIL fchmod-y--secontext_full_mismatch.gen.test (exit status: 1)
|
||||
|
||||
that happens due to the fact that the get_expected_filecontext() call
|
||||
is made against the path with the " (deleted)" part, which is wrong (it
|
||||
is more wrong than shown above when a file with the path that ends with
|
||||
" (deleted)" exists). Moreover, it would be incorrect to call stat()
|
||||
on that path.
|
||||
|
||||
Let's factor out the common part of the code and simply call it
|
||||
from selinux_getfdcon, then use the st_mode from the procfs link.
|
||||
|
||||
* src/defs.h (get_proc_pid_fd_path): New declaration.
|
||||
* src/pathtrace.c (get)proc_pid_fd_path): New function, part
|
||||
of getfdpath_pid that performs link resolution and processing
|
||||
of the result.
|
||||
(getfdpath_pid): Call get_proc_pid_fd_path after PID resolution.
|
||||
* src/secontext.c (get_expected_filecontext): Add mode parameter, use
|
||||
it in selabel_lookup call instead of retrieveing file mode using stat()
|
||||
if it is not -1.
|
||||
(selinux_getfdcon): Call get_proc_pid_fd_path instead
|
||||
of open-coding path resolution code, call stat() on the procfs link
|
||||
and pass the retrieved st_mode to the get_expected_filecontext call.
|
||||
(selinux_getfilecon): Pass -1 as mode in the get_expected_filecontext
|
||||
call.
|
||||
|
||||
Reported-by: Václav Kadlčík <vkadlcik@redhat.com>
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2087693
|
||||
---
|
||||
src/defs.h | 15 +++++++++++++++
|
||||
src/pathtrace.c | 26 ++++++++++++++++++--------
|
||||
src/secontext.c | 35 +++++++++++++++++++++--------------
|
||||
3 files changed, 54 insertions(+), 22 deletions(-)
|
||||
|
||||
Index: strace-5.18/src/defs.h
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/defs.h 2022-07-12 18:22:01.563254140 +0200
|
||||
+++ strace-5.18/src/defs.h 2022-07-12 18:22:06.202199392 +0200
|
||||
@@ -785,6 +785,21 @@
|
||||
return pathtrace_match_set(tcp, &global_path_set);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * Resolves a path for a fd procfs PID proc_pid (the one got from
|
||||
+ * get_proc_pid()).
|
||||
+ *
|
||||
+ * @param proc_pid PID number in /proc, obtained with get_proc_pid().
|
||||
+ * @param fd FD to resolve path for.
|
||||
+ * @param buf Buffer to store the resolved path in.
|
||||
+ * @param bufsize The size of buf.
|
||||
+ * @param deleted If non-NULL, set to true if the path associated with the FD
|
||||
+ * seems to have been unlinked and to false otherwise.
|
||||
+ * @return Number of bytes written including terminating '\0'.
|
||||
+ */
|
||||
+extern int get_proc_pid_fd_path(int proc_pid, int fd, char *buf,
|
||||
+ unsigned bufsize, bool *deleted);
|
||||
+
|
||||
extern int getfdpath_pid(pid_t pid, int fd, char *buf, unsigned bufsize,
|
||||
bool *deleted);
|
||||
|
||||
Index: strace-5.18/src/pathtrace.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/pathtrace.c 2022-07-12 18:22:01.532254506 +0200
|
||||
+++ strace-5.18/src/pathtrace.c 2022-07-12 18:22:06.202199392 +0200
|
||||
@@ -77,11 +77,9 @@
|
||||
set->paths_selected[set->num_selected++] = path;
|
||||
}
|
||||
|
||||
-/*
|
||||
- * Get path associated with fd of a process with pid.
|
||||
- */
|
||||
int
|
||||
-getfdpath_pid(pid_t pid, int fd, char *buf, unsigned bufsize, bool *deleted)
|
||||
+get_proc_pid_fd_path(int proc_pid, int fd, char *buf, unsigned bufsize,
|
||||
+ bool *deleted)
|
||||
{
|
||||
char linkpath[sizeof("/proc/%u/fd/%u") + 2 * sizeof(int)*3];
|
||||
ssize_t n;
|
||||
@@ -89,10 +87,6 @@
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
- int proc_pid = get_proc_pid(pid);
|
||||
- if (!proc_pid)
|
||||
- return -1;
|
||||
-
|
||||
xsprintf(linkpath, "/proc/%u/fd/%u", proc_pid, fd);
|
||||
n = readlink(linkpath, buf, bufsize - 1);
|
||||
if (n < 0)
|
||||
@@ -143,6 +137,22 @@
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Get path associated with fd of a process with pid.
|
||||
+ */
|
||||
+int
|
||||
+getfdpath_pid(pid_t pid, int fd, char *buf, unsigned bufsize, bool *deleted)
|
||||
+{
|
||||
+ if (fd < 0)
|
||||
+ return -1;
|
||||
+
|
||||
+ int proc_pid = get_proc_pid(pid);
|
||||
+ if (!proc_pid)
|
||||
+ return -1;
|
||||
+
|
||||
+ return get_proc_pid_fd_path(proc_pid, fd, buf, bufsize, deleted);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* Add a path to the set we're tracing. Also add the canonicalized
|
||||
* version of the path. Specifying NULL will delete all paths.
|
||||
*/
|
||||
Index: strace-5.18/src/secontext.c
|
||||
===================================================================
|
||||
--- strace-5.18.orig/src/secontext.c 2022-07-12 18:22:01.564254128 +0200
|
||||
+++ strace-5.18/src/secontext.c 2022-07-12 18:22:06.203199380 +0200
|
||||
@@ -62,7 +62,7 @@
|
||||
}
|
||||
|
||||
static int
|
||||
-get_expected_filecontext(const char *path, char **secontext)
|
||||
+get_expected_filecontext(const char *path, char **secontext, int mode)
|
||||
{
|
||||
static struct selabel_handle *hdl;
|
||||
|
||||
@@ -80,12 +80,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- strace_stat_t stb;
|
||||
- if (stat_file(path, &stb) < 0) {
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- return selabel_lookup(hdl, secontext, path, stb.st_mode);
|
||||
+ return selabel_lookup(hdl, secontext, path, mode);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -130,16 +125,22 @@
|
||||
|
||||
/*
|
||||
* We need to resolve the path, because selabel_lookup() doesn't
|
||||
- * resolve anything. Using readlink() is sufficient here.
|
||||
+ * resolve anything.
|
||||
*/
|
||||
+ char buf[PATH_MAX + 1];
|
||||
+ ssize_t n = get_proc_pid_fd_path(proc_pid, fd, buf, sizeof(buf), NULL);
|
||||
+ if ((size_t) n >= (sizeof(buf) - 1))
|
||||
+ return 0;
|
||||
|
||||
- char buf[PATH_MAX];
|
||||
- ssize_t n = readlink(linkpath, buf, sizeof(buf));
|
||||
- if ((size_t) n >= sizeof(buf))
|
||||
+ /*
|
||||
+ * We retrieve stat() here since the path the procfs link resolves into
|
||||
+ * may be reused by a different file with different context.
|
||||
+ */
|
||||
+ strace_stat_t st;
|
||||
+ if (stat_file(linkpath, &st))
|
||||
return 0;
|
||||
- buf[n] = '\0';
|
||||
|
||||
- get_expected_filecontext(buf, expected);
|
||||
+ get_expected_filecontext(buf, expected, st.st_mode);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -190,7 +191,13 @@
|
||||
if (!resolved)
|
||||
return 0;
|
||||
|
||||
- get_expected_filecontext(resolved, expected);
|
||||
+ strace_stat_t st;
|
||||
+ if (stat_file(resolved, &st) < 0)
|
||||
+ goto out;
|
||||
+
|
||||
+ get_expected_filecontext(resolved, expected, st.st_mode);
|
||||
+
|
||||
+out:
|
||||
free(resolved);
|
||||
|
||||
return 0;
|
@ -1,70 +0,0 @@
|
||||
From 5338636cd9ae7f53ed73f1a7909db03189ea2ff3 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
Date: Mon, 4 Jul 2022 12:29:22 +0200
|
||||
Subject: [PATCH] tests/bpf: fix sloppy low FD number usage
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
FD 42 can already be opened, so close it. Otherwise, it may lead
|
||||
to the following test failure:
|
||||
|
||||
-bpf(BPF_LINK_CREATE, {link_create={prog_fd=0</dev/full>, target_fd=0</dev/full>, attach_type=BPF_TRACE_ITER, flags=0, iter_info=[{map={map_fd=0</dev/full>}}, {map={map_fd=42}}, {map={map_fd=314159265}}, {map={map_fd=-1159983635}}, {map={map_fd=-1}}], iter_info_len=5}}, 28) = 841540765612359407 (INJECTED)
|
||||
+bpf(BPF_LINK_CREATE, {link_create={prog_fd=0</dev/full>, target_fd=0</dev/full>, attach_type=BPF_TRACE_ITER, flags=0, iter_info=[{map={map_fd=0</dev/full>}}, {map={map_fd=42</var/tmp/restraintd/logs/146893626/task.log>}}, {map={map_fd=314159265}}, {map={map_fd=-1159983635}}, {map={map_fd=-1}}], iter_info_len=5}}, 28) = 841540765612359407 (INJECTED)
|
||||
bpf(BPF_LINK_CREATE, 0x3ff95574fe5, 28) = 841540765612359407 (INJECTED)
|
||||
-bpf(BPF_LINK_CREATE, {link_create={prog_fd=0</dev/full>, target_fd=0</dev/full>, attach_type=BPF_TRACE_ITER, flags=0, iter_info=[{map={map_fd=0</dev/full>}}, {map={map_fd=42}}, {map={map_fd=314159265}}, {map={map_fd=-1159983635}}, {map={map_fd=-1}}, ... /* 0x3ff9555d000 */], iter_info_len=6}}, 28) = 841540765612359407 (INJECTED)
|
||||
+bpf(BPF_LINK_CREATE, {link_create={prog_fd=0</dev/full>, target_fd=0</dev/full>, attach_type=BPF_TRACE_ITER, flags=0, iter_info=[{map={map_fd=0</dev/full>}}, {map={map_fd=42</var/tmp/restraintd/logs/146893626/task.log>}}, {map={map_fd=314159265}}, {map={map_fd=-1159983635}}, {map={map_fd=-1}}, ... /* 0x3ff9555d000 */], iter_info_len=6}}, 28) = 841540765612359407 (INJECTED)
|
||||
[...]
|
||||
FAIL bpf-success-long-y.test (exit status: 1)
|
||||
|
||||
* tests/bpf.c (init_BPF_LINK_CREATE_attr7): Close iter_info_data[1] fd.
|
||||
|
||||
Fixes: v5.18~18 "bpf: improve bpf(BPF_LINK_CREATE) decoding"
|
||||
Reported-by: Lenka Špačková <lkuprova@redhat.com>
|
||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2103137
|
||||
---
|
||||
tests/bpf.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/tests/bpf.c b/tests/bpf.c
|
||||
index 82d870e..6c1ffd4 100644
|
||||
--- a/tests/bpf.c
|
||||
+++ b/tests/bpf.c
|
||||
@@ -1557,6 +1557,8 @@ init_BPF_LINK_CREATE_attr7(struct bpf_attr_check *check, size_t idx)
|
||||
{
|
||||
struct BPF_LINK_CREATE_struct *attr = &check->data.BPF_LINK_CREATE_data;
|
||||
|
||||
+ close(iter_info_data[1]);
|
||||
+
|
||||
if (!iter_info_data_p) {
|
||||
iter_info_data_p = tail_memdup(iter_info_data,
|
||||
sizeof(iter_info_data));
|
||||
diff --git a/tests-m32/bpf.c b/tests-m32/bpf.c
|
||||
index 82d870e..6c1ffd4 100644
|
||||
--- a/tests-m32/bpf.c
|
||||
+++ b/tests-m32/bpf.c
|
||||
@@ -1557,6 +1557,8 @@ init_BPF_LINK_CREATE_attr7(struct bpf_attr_check *check, size_t idx)
|
||||
{
|
||||
struct BPF_LINK_CREATE_struct *attr = &check->data.BPF_LINK_CREATE_data;
|
||||
|
||||
+ close(iter_info_data[1]);
|
||||
+
|
||||
if (!iter_info_data_p) {
|
||||
iter_info_data_p = tail_memdup(iter_info_data,
|
||||
sizeof(iter_info_data));
|
||||
diff --git a/tests-mx32/bpf.c b/tests-mx32/bpf.c
|
||||
index 82d870e..6c1ffd4 100644
|
||||
--- a/tests-mx32/bpf.c
|
||||
+++ b/tests-mx32/bpf.c
|
||||
@@ -1557,6 +1557,8 @@ init_BPF_LINK_CREATE_attr7(struct bpf_attr_check *check, size_t idx)
|
||||
{
|
||||
struct BPF_LINK_CREATE_struct *attr = &check->data.BPF_LINK_CREATE_data;
|
||||
|
||||
+ close(iter_info_data[1]);
|
||||
+
|
||||
if (!iter_info_data_p) {
|
||||
iter_info_data_p = tail_memdup(iter_info_data,
|
||||
sizeof(iter_info_data));
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,102 +0,0 @@
|
||||
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
|
||||
|
@ -1,37 +0,0 @@
|
||||
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
|
||||
|
@ -1,129 +0,0 @@
|
||||
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-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 \
|
@ -1,108 +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"
|
||||
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
|
||||
|
@ -1,530 +0,0 @@
|
||||
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
|
||||
|
@ -1,76 +0,0 @@
|
||||
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
|
||||
|
@ -1,89 +0,0 @@
|
||||
From 1663bf8582b7187d04225105a62bbab9ebbb8109 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
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)): <case PR_SVE_SET_VL>: Pass false as aux
|
||||
to sprint_sve_val.
|
||||
(SYS_FUNC(prctl)): <case PR_SVE_GET_VL>: 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
|
||||
|
@ -1,130 +0,0 @@
|
||||
From 3ed268876dd5b65263449f9aeb18a1cc2604c707 Mon Sep 17 00:00:00 2001
|
||||
From: Eugene Syromyatnikov <evgsyr@gmail.com>
|
||||
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
|
||||
|
@ -1,59 +0,0 @@
|
||||
Index: strace-5.17/tests/qual_fault.test
|
||||
===================================================================
|
||||
--- strace-5.17.orig/tests/qual_fault.test 2022-06-09 15:47:28.871554186 +0200
|
||||
+++ strace-5.17/tests/qual_fault.test 2022-06-09 15:50:50.016108370 +0200
|
||||
@@ -83,19 +83,36 @@
|
||||
done
|
||||
}
|
||||
|
||||
-for err in '' ENOSYS 22 einval; do
|
||||
+case "$STRACE_ARCH" in
|
||||
+ aarch64)
|
||||
+ ERRS='EnoSys 22'
|
||||
+ NUMBERS1='2'
|
||||
+ NUMBERS2='3'
|
||||
+ NUMBERS3='5'
|
||||
+ NUMBERS4='7'
|
||||
+ ;;
|
||||
+ *)
|
||||
+ ERRS='ENOSYS 22 einval'
|
||||
+ NUMBERS1='1 2 3 7'
|
||||
+ NUMBERS2='1 2 5 11'
|
||||
+ NUMBERS3='1 2 3 7'
|
||||
+ NUMBERS4='1 2 7 11'
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
+for err in '' $(echo $ERRS); do
|
||||
for fault in writev desc,51; do
|
||||
check_fault_injection \
|
||||
writev $fault "$err" '' '' '' 1 -efault=chdir
|
||||
check_fault_injection \
|
||||
writev $fault "$err" '' '' '' 1 -efault=chdir -efault=none
|
||||
- for F in 1 2 3 7; do
|
||||
+ for F in $(echo $NUMBERS1); do
|
||||
check_fault_injection \
|
||||
writev $fault "$err" $F '' '' 1
|
||||
check_fault_injection \
|
||||
writev $fault "$err" $F '' + 1
|
||||
|
||||
- for L in 1 2 5 11; do
|
||||
+ for L in $(echo $NUMBERS2); do
|
||||
[ "$L" -ge "$F" ] ||
|
||||
continue
|
||||
check_fault_injection \
|
||||
@@ -104,12 +121,12 @@
|
||||
writev $fault "$err" $F $L + 1
|
||||
done
|
||||
|
||||
- for S in 1 2 3 7; do
|
||||
+ for S in $(echo $NUMBERS3); do
|
||||
check_fault_injection \
|
||||
writev $fault "$err" $F '' $S 1
|
||||
check_fault_injection \
|
||||
writev $fault "$err" $F '' $S 4
|
||||
- for L in 1 2 7 11; do
|
||||
+ for L in $(echo $NUMBERS4); do
|
||||
[ "$L" -ge "$F" ] ||
|
||||
continue
|
||||
check_fault_injection \
|
1180
SPECS/strace.spec
1180
SPECS/strace.spec
File diff suppressed because it is too large
Load Diff
6
gating.yaml
Normal file
6
gating.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-10
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
|
1
sources
Normal file
1
sources
Normal file
@ -0,0 +1 @@
|
||||
SHA512 (strace-6.7.tar.xz) = da28fd9fb987044782e6fd6f5e90e2cea2ab8e536cbd3893ef4c9b11c9b3185f073ca3d8ca0eade49e9a2af8efbda8c2b66b8988be7ebc463dc45e8f48ca1256
|
809
strace.spec
Normal file
809
strace.spec
Normal file
@ -0,0 +1,809 @@
|
||||
Summary: Tracks and displays system calls associated with a running process
|
||||
Name: strace
|
||||
Version: 6.7
|
||||
Release: 3%{?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
|
||||
# https://docs.fedoraproject.org/en-US/legal/license-field/#_no_effective_license_analysis
|
||||
# BSD-2-Clause:
|
||||
# bundled/linux/include/uapi/linux/tee.h
|
||||
# BSD-3-Clause:
|
||||
# bundled/linux/include/uapi/linux/quota.h
|
||||
# GPL-1.0-or-later WITH Linux-syscall-note:
|
||||
# bundled/linux/include/uapi/linux/if_bonding.h
|
||||
# bundled/linux/include/uapi/linux/loop.h
|
||||
# GPL-2.0-or-later WITH Linux-syscall-note:
|
||||
# bundled/linux/include/uapi/linux/dm-ioctl.h
|
||||
# bundled/linux/include/uapi/linux/hiddev.h
|
||||
# bundled/linux/include/uapi/linux/if_alg.h
|
||||
# bundled/linux/include/uapi/linux/if_bridge.h
|
||||
# bundled/linux/include/uapi/linux/in6.h
|
||||
# bundled/linux/include/uapi/linux/in.h
|
||||
# bundled/linux/include/uapi/linux/keyctl.h
|
||||
# bundled/linux/include/uapi/linux/mptcp.h
|
||||
# bundled/linux/include/uapi/linux/ptp_clock.h
|
||||
# bundled/linux/include/uapi/linux/tcp.h
|
||||
# bundled/linux/include/uapi/mtd/mtd-abi.h
|
||||
# bundled/linux/include/uapi/mtd/ubi-user.h
|
||||
# LGPL-2.0-or-later WITH Linux-syscall-note:
|
||||
# bundled/linux/include/uapi/linux/dm-ioctl.h
|
||||
# LGPL-2.1-or-later WITH Linux-syscall-note:
|
||||
# bundled/linux/include/uapi/linux/dqblk_xfs.h
|
||||
# bundled/linux/include/uapi/linux/mqueue.h
|
||||
# (GPL-2.0-only WITH Linux-syscall-note) OR Linux-OpenIB:
|
||||
# bundled/linux/include/uapi/linux/tls.h
|
||||
# bundled/linux/include/uapi/rdma/ib_user_verbs.h
|
||||
# (GPL-2.0-only WITH Linux-syscall-note) OR MIT:
|
||||
# bundled/linux/include/uapi/linux/io_uring.h
|
||||
# (GPL-2.0-or-later WITH Linux-syscall-note) OR BSD-3-Clause:
|
||||
# bundled/linux/include/uapi/linux/v4l2-common.h
|
||||
# bundled/linux/include/uapi/linux/v4l2-controls.h
|
||||
# bundled/linux/include/uapi/linux/videodev2.h
|
||||
# GPL-2.0-only WITH Linux-syscall-note:
|
||||
# bundled/linux/include/uapi/asm-generic/hugetlb_encode.h (no explicit license in the file)
|
||||
# bundled/linux/include/uapi/linux/mount.h (no explicit license in the file)
|
||||
# bundled/linux/include/uapi/linux/netfilter/nfnetlink_osf.h (no explicit license in the file)
|
||||
# bundled/linux/include/uapi/linux/version.h (no explicit license in the file)
|
||||
# bundled/linux/include/uapi/asm/hugetlb_encode.h (no explicit license in the file)
|
||||
# the rest of bundled/linux
|
||||
# ISC:
|
||||
# bundled/linux/include/uapi/linux/nfc.h
|
||||
# X11:
|
||||
# build-aux/install-sh (dist only)
|
||||
# LGPL-2.1-or-later:
|
||||
# build-aux/copyright-year-gen
|
||||
# build-aux/file-date-gen
|
||||
# m4/ax_code_coverage.m4
|
||||
# m4/mpers.m4
|
||||
# m4/st_demangle.m4
|
||||
# m4/st_esyscmd_s.m4
|
||||
# m4/st_libdw.m4
|
||||
# m4/st_libunwind.m4
|
||||
# m4/st_save_restore_var.m4
|
||||
# m4/st_selinux.m4
|
||||
# m4/st_stacktrace.m4
|
||||
# m4/st_warn_cflags.m4
|
||||
# GPL-2.0-or-later:
|
||||
# build-aux/ar-lib (dist only)
|
||||
# build-aux/compile (dist only)
|
||||
# build-aux/depcomp (dist only)
|
||||
# build-aux/missing (dist only)
|
||||
# build-aux/test-driver (dist only)
|
||||
# GPL-3.0-or-later:
|
||||
# build-aux/config.guess (dist only)
|
||||
# build-aux/config.sub (dist only)
|
||||
# build-aux/git-version-gen
|
||||
# FSFAP:
|
||||
# README-configure
|
||||
# m4/ax_prog_cc_for_build.m4
|
||||
# m4/ax_valgrind_check.m4
|
||||
# FSFUL:
|
||||
# configure (dist only)
|
||||
# FSFULLR:
|
||||
# m4/warnings.m4
|
||||
# FSFULLRWD:
|
||||
# aclocal.m4 (dist only)
|
||||
# Makefile.in (dist only)
|
||||
# bundled/Makefile.in (dist only)
|
||||
# src/Makefile.in (dist only)
|
||||
# tests/Makefile.in (dist only)
|
||||
# tests-m32/Makefile.in (dist only)
|
||||
# tests-mx32/Makefile.in (dist only)
|
||||
License: LGPL-2.1-or-later AND GPL-2.0-or-later AND GPL-3.0-or-later AND BSD-2-Clause AND BSD-3-Clause AND (GPL-1.0-or-later WITH Linux-syscall-note) AND (GPL-2.0-or-later WITH Linux-syscall-note) AND (GPL-2.0-only WITH Linux-syscall-note) AND (LGPL-2.0-or-later WITH Linux-syscall-note) AND (LGPL-2.1-or-later WITH Linux-syscall-note) AND ((GPL-2.0-only WITH Linux-syscall-note) OR Linux-OpenIB) AND ((GPL-2.0-only WITH Linux-syscall-note) OR MIT) AND ((GPL-2.0-or-later WITH Linux-syscall-note) OR BSD-3-Clause) AND ISC AND X11 AND FSFAP AND FSFUL AND FSFULLR AND FSFULLRWD
|
||||
%else
|
||||
License: LGPL-2.1+ and GPL-2.0+
|
||||
%endif
|
||||
# Some distros require Group tag to be present,
|
||||
# some require Group tag to be absent,
|
||||
# some do not care about Group tag at all,
|
||||
# and we have to cater for all of them.
|
||||
%if 0%{?fedora} < 28 && 0%{?centos} < 8 && 0%{?rhel} < 8 && 0%{?suse_version} < 1500
|
||||
Group: Development%{?suse_version:/Tools}/Debuggers
|
||||
%endif
|
||||
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
|
||||
%endif
|
||||
BuildRequires: gcc gzip make
|
||||
|
||||
# Install Bluetooth headers for AF_BLUETOOTH sockets decoding.
|
||||
%if 0%{?fedora} >= 18 || 0%{?centos} >= 6 || 0%{?rhel} >= 8 || 0%{?suse_version} >= 1200
|
||||
BuildRequires: pkgconfig(bluez)
|
||||
%endif
|
||||
|
||||
# Install elfutils-devel or libdw-devel to enable strace -k option.
|
||||
# Install binutils-devel to enable symbol demangling.
|
||||
%if 0%{?fedora} >= 20 || 0%{?centos} >= 6 || 0%{?rhel} >= 6
|
||||
%define buildrequires_stacktrace BuildRequires: elfutils-devel binutils-devel
|
||||
%define buildrequires_selinux BuildRequires: libselinux-devel
|
||||
%endif
|
||||
%if 0%{?suse_version} >= 1100
|
||||
%define buildrequires_stacktrace BuildRequires: libdw-devel binutils-devel
|
||||
%define buildrequires_selinux BuildRequires: libselinux-devel
|
||||
%endif
|
||||
%{?buildrequires_stacktrace}
|
||||
%{?buildrequires_selinux}
|
||||
|
||||
# OBS compatibility
|
||||
%{?!buildroot:BuildRoot: %_tmppath/buildroot-%name-%version-%release}
|
||||
%define maybe_use_defattr %{?suse_version:%%defattr(-,root,root)}
|
||||
|
||||
# Fallback definitions for make_build/make_install macros
|
||||
%{?!__make: %global __make %_bindir/make}
|
||||
%{?!__install: %global __install %_bindir/install}
|
||||
%{?!make_build: %global make_build %__make %{?_smp_mflags}}
|
||||
%{?!make_install: %global make_install %__make install DESTDIR="%{?buildroot}" INSTALL="%__install -p"}
|
||||
|
||||
%description
|
||||
The strace program intercepts and records the system calls called and
|
||||
received by a running process. Strace can print a record of each
|
||||
system call, its arguments and its return value. Strace is useful for
|
||||
diagnosing problems and debugging, as well as for instructional
|
||||
purposes.
|
||||
|
||||
Install strace if you need a tool to track the system calls made and
|
||||
received by a process.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
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
|
||||
libc="$(ldd /bin/sh |sed -n 's|^[^/]*\(/[^ ]*/libc\.so[^ ]*\).*|\1|p' |head -1)"
|
||||
$libc |head -1
|
||||
file -L /bin/sh
|
||||
gcc --version |head -1
|
||||
ld --version |head -1
|
||||
kver="$(printf '%%s\n%%s\n' '#include <linux/version.h>' 'LINUX_VERSION_CODE' | gcc -E -P -)"
|
||||
printf 'kernel-headers %%s.%%s.%%s\n' $((kver/65536)) $((kver/256%%256)) $((kver%%256))
|
||||
echo 'END OF BUILD ENVIRONMENT INFORMATION'
|
||||
|
||||
CFLAGS_FOR_BUILD="$RPM_OPT_FLAGS"; export CFLAGS_FOR_BUILD
|
||||
%configure --enable-mpers=check --enable-bundled=yes
|
||||
%make_build
|
||||
|
||||
%install
|
||||
%make_install
|
||||
|
||||
# some say uncompressed changelog files are too big
|
||||
for f in ChangeLog ChangeLog-CVS; do
|
||||
gzip -9n < "$f" > "$f".gz &
|
||||
done
|
||||
wait
|
||||
|
||||
%check
|
||||
width=$(echo __LONG_WIDTH__ |%__cc -E -P -)
|
||||
skip_32bit=0
|
||||
%if 0%{?fedora} >= 35 || 0%{?rhel} > 9
|
||||
skip_32bit=1
|
||||
%endif
|
||||
|
||||
if [ "${width}" != 32 ] || [ "${skip_32bit}" != 1 ]; then
|
||||
%{buildroot}%{_bindir}/strace -V
|
||||
%make_build -k check VERBOSE=1
|
||||
echo 'BEGIN OF TEST SUITE INFORMATION'
|
||||
tail -n 99999 -- tests*/test-suite.log tests*/ksysent.gen.log
|
||||
find tests* -type f -name '*.log' -print0 |
|
||||
xargs -r0 grep -H '^KERNEL BUG:' -- ||:
|
||||
echo 'END OF TEST SUITE INFORMATION'
|
||||
fi
|
||||
|
||||
%files
|
||||
%maybe_use_defattr
|
||||
%doc CREDITS ChangeLog.gz ChangeLog-CVS.gz COPYING NEWS README
|
||||
%{_bindir}/strace
|
||||
%{_bindir}/strace-log-merge
|
||||
%{_mandir}/man1/*
|
||||
|
||||
%changelog
|
||||
* Thu Aug 01 2024 Eugene Syromiatnikov <esyr@redhat.com> - 6.7-3
|
||||
- Apply "tests: workaround net-yy-inet* for new kernels" (RHEL-45361)
|
||||
|
||||
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 6.7-2
|
||||
- Bump release for June 2024 mass rebuild
|
||||
|
||||
* Mon Jan 29 2024 Dmitry V. Levin <ldv@strace.io> - 6.7-1
|
||||
- v6.6 -> v6.7.
|
||||
|
||||
* Tue Oct 31 2023 Dmitry V. Levin <ldv@strace.io> - 6.6-1
|
||||
- v6.5 -> v6.6 (resolves: #2243631).
|
||||
|
||||
* Fri Sep 01 2023 Dmitry V. Levin <ldv@strace.io> - 6.5-1
|
||||
- v6.4 -> v6.5.
|
||||
- Updated the SPDX license expression (by Eugene Syromyatnikov).
|
||||
|
||||
* Mon Jun 26 2023 Dmitry V. Levin <ldv@strace.io> - 6.4-1
|
||||
- v6.3 -> v6.4.
|
||||
|
||||
* Mon May 08 2023 Dmitry V. Levin <ldv@strace.io> - 6.3-1
|
||||
- v6.2 -> v6.3.
|
||||
|
||||
* Sun Feb 26 2023 Dmitry V. Levin <ldv@strace.io> - 6.2-1
|
||||
- v6.1 -> v6.2.
|
||||
|
||||
* Mon Dec 12 2022 Dmitry V. Levin <ldv@strace.io> - 6.1-1
|
||||
- v6.0 -> v6.1.
|
||||
|
||||
* Sat Oct 29 2022 Dmitry V. Levin <ldv@strace.io> - 6.0-1
|
||||
- v5.19 -> v6.0.
|
||||
|
||||
* Fri Aug 12 2022 Dmitry V. Levin <ldv@strace.io> - 5.19-1
|
||||
- v5.18 -> v5.19.
|
||||
|
||||
* Sat Jun 18 2022 Dmitry V. Levin <ldv@strace.io> - 5.18-1
|
||||
- v5.17 -> v5.18.
|
||||
|
||||
* Sat Mar 26 2022 Dmitry V. Levin <ldv@strace.io> - 5.17-1
|
||||
- v5.16 -> v5.17 (resolves: #2047030).
|
||||
|
||||
* Mon Jan 10 2022 Dmitry V. Levin <ldv@strace.io> - 5.16-1
|
||||
- v5.15 -> v5.16.
|
||||
|
||||
* Wed Dec 01 2021 Dmitry V. Levin <ldv@strace.io> - 5.15-1
|
||||
- v5.14 -> v5.15.
|
||||
|
||||
* Thu Sep 02 2021 Dmitry V. Levin <ldv@strace.io> - 5.14-1
|
||||
- v5.13 -> v5.14.
|
||||
|
||||
* Sun Jul 18 2021 Dmitry V. Levin <ldv@strace.io> - 5.13-1
|
||||
- v5.12 -> v5.13.
|
||||
|
||||
* Mon Apr 26 2021 Dmitry V. Levin <ldv@strace.io> - 5.12-1
|
||||
- v5.11 -> v5.12.
|
||||
|
||||
* Wed Feb 17 2021 Dmitry V. Levin <ldv@strace.io> - 5.11-1
|
||||
- v5.10 -> v5.11.
|
||||
|
||||
* Mon Dec 14 2020 Dmitry V. Levin <ldv@strace.io> - 5.10-1
|
||||
- v5.9 -> v5.10.
|
||||
|
||||
* Thu Sep 24 2020 Dmitry V. Levin <ldv@strace.io> - 5.9-1
|
||||
- v5.8 -> v5.9.
|
||||
|
||||
* Thu Aug 06 2020 Dmitry V. Levin <ldv@strace.io> - 5.8-1
|
||||
- v5.7 -> v5.8.
|
||||
|
||||
* Mon Jun 01 2020 Dmitry V. Levin <ldv@strace.io> - 5.7-1
|
||||
- v5.6 -> v5.7.
|
||||
|
||||
* Tue Apr 07 2020 Dmitry V. Levin <ldv@strace.io> - 5.6-1
|
||||
- v5.5 -> v5.6.
|
||||
|
||||
* Thu Feb 06 2020 Dmitry V. Levin <ldv@strace.io> - 5.5-1
|
||||
- v5.4 -> v5.5.
|
||||
|
||||
* Thu Nov 28 2019 Dmitry V. Levin <ldv@strace.io> - 5.4-1
|
||||
- v5.3 -> v5.4.
|
||||
|
||||
* Wed Sep 25 2019 Dmitry V. Levin <ldv@strace.io> - 5.3-1
|
||||
- v5.2 -> v5.3.
|
||||
|
||||
* Fri Jul 12 2019 Dmitry V. Levin <ldv@strace.io> - 5.2-1
|
||||
- v5.1 -> v5.2.
|
||||
|
||||
* Wed May 22 2019 Dmitry V. Levin <ldv@strace.io> - 5.1-1
|
||||
- v5.0 -> v5.1.
|
||||
|
||||
* Tue Mar 19 2019 Dmitry V. Levin <ldv@strace.io> - 5.0-1
|
||||
- v4.26 -> v5.0 (resolves: #478419, #526740, #851457, #1609318,
|
||||
#1610774, #1662936, #1676045).
|
||||
|
||||
* Wed Dec 26 2018 Dmitry V. Levin <ldv@strace.io> - 4.26-1
|
||||
- v4.25 -> v4.26.
|
||||
|
||||
* Tue Oct 30 2018 Dmitry V. Levin <ldv@strace.io> - 4.25-1
|
||||
- v4.24 -> v4.25.
|
||||
|
||||
* Tue Aug 14 2018 Dmitry V. Levin <ldv@strace.io> - 4.24-1
|
||||
- v4.23 -> v4.24.
|
||||
|
||||
* Thu Jun 14 2018 Dmitry V. Levin <ldv@strace.io> - 4.23-1
|
||||
- v4.22 -> v4.23.
|
||||
- Enabled libdw backend for -k option (#1568647).
|
||||
|
||||
* Thu Apr 05 2018 Dmitry V. Levin <ldv@strace.io> - 4.22-1
|
||||
- v4.21 -> v4.22.
|
||||
|
||||
* Tue Feb 13 2018 Dmitry V. Levin <ldv@strace.io> - 4.21-1
|
||||
- v4.20 -> v4.21.
|
||||
|
||||
* Mon Nov 13 2017 Dmitry V. Levin <ldv@strace.io> - 4.20-1
|
||||
- v4.19 -> v4.20.
|
||||
|
||||
* Tue Sep 05 2017 Dmitry V. Levin <ldv@strace.io> - 4.19-1
|
||||
- v4.18 -> v4.19.
|
||||
|
||||
* Wed Jul 05 2017 Dmitry V. Levin <ldv@strace.io> - 4.18-1
|
||||
- v4.17 -> v4.18.
|
||||
|
||||
* Wed May 24 2017 Dmitry V. Levin <ldv@strace.io> - 4.17-1
|
||||
- v4.16 -> v4.17.
|
||||
|
||||
* Tue Feb 14 2017 Dmitry V. Levin <ldv@strace.io> - 4.16-1
|
||||
- v4.15 -> v4.16.
|
||||
|
||||
* Wed Dec 14 2016 Dmitry V. Levin <ldv@strace.io> - 4.15-1
|
||||
- v4.14-100-g622af42 -> v4.15.
|
||||
|
||||
* Wed Nov 16 2016 Dmitry V. Levin <ldv@strace.io> - 4.14.0.100.622a-1
|
||||
- v4.14 -> v4.14-100-g622af42:
|
||||
+ implemented syscall fault injection.
|
||||
|
||||
* Tue Oct 04 2016 Dmitry V. Levin <ldv@strace.io> - 4.14-1
|
||||
- v4.13 -> v4.14:
|
||||
+ added printing of the mode argument of open and openat syscalls
|
||||
when O_TMPFILE flag is set (#1377846).
|
||||
|
||||
* Tue Jul 26 2016 Dmitry V. Levin <ldv@strace.io> - 4.13-1
|
||||
- v4.12 -> v4.13.
|
||||
|
||||
* Tue May 31 2016 Dmitry V. Levin <ldv@strace.io> - 4.12-1
|
||||
- v4.11-163-g972018f -> v4.12.
|
||||
|
||||
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 4.11.0.163.9720-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Fri Jan 15 2016 Dmitry V. Levin <ldv@strace.io> - 4.11.0.163.9720-1
|
||||
- New upstream snapshot v4.11-163-g972018f:
|
||||
+ fixed decoding of syscalls unknown to the kernel on s390/s390x (#1298294).
|
||||
|
||||
* Wed Dec 23 2015 Dmitry V. Levin <ldv@strace.io> - 4.11-2
|
||||
- Enabled experimental -k option on x86_64 (#1170296).
|
||||
|
||||
* Mon Dec 21 2015 Dmitry V. Levin <ldv@strace.io> - 4.11-1
|
||||
- New upstream release:
|
||||
+ print nanoseconds along with seconds in stat family syscalls (#1251176).
|
||||
|
||||
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.10-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Mon May 11 2015 Marcin Juszkiewicz <mjuszkiewicz@redhat.com> - 4.10-2
|
||||
- Backport set of upstream patches to get it buildable on AArch64
|
||||
|
||||
* Fri Mar 06 2015 Dmitry V. Levin <ldv@strace.io> - 4.10-1
|
||||
- New upstream release:
|
||||
+ enhanced ioctl decoding (#902788).
|
||||
|
||||
* Mon Nov 03 2014 Lubomir Rintel <lkundrak@v3.sk> - 4.9-3
|
||||
- Regenerate ioctl entries with proper kernel headers
|
||||
|
||||
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.9-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Fri Aug 15 2014 Dmitry V. Levin <ldv@strace.io> - 4.9-1
|
||||
- New upstream release:
|
||||
+ fixed build when <sys/ptrace.h> and <linux/ptrace.h> conflict (#993384);
|
||||
+ updated CLOCK_* constants (#1088455);
|
||||
+ enabled ppc64le support (#1122323);
|
||||
+ fixed attach to a process on ppc64le (#1129569).
|
||||
|
||||
* Fri Jul 25 2014 Dan Horák <dan[at]danny.cz> - 4.8-5
|
||||
- update for ppc64
|
||||
|
||||
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.8-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Fri Dec 6 2013 Peter Robinson <pbrobinson@fedoraproject.org> 4.8-3
|
||||
- Fix FTBFS
|
||||
|
||||
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.8-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Mon Jun 03 2013 Dmitry V. Levin <ldv@strace.io> - 4.8-1
|
||||
- New upstream release:
|
||||
+ fixed ERESTARTNOINTR leaking to userspace on ancient kernels (#659382);
|
||||
+ fixed decoding of *xattr syscalls (#885233);
|
||||
+ fixed handling of files with 64-bit inode numbers by 32-bit strace (#912790);
|
||||
+ added aarch64 support (#969858).
|
||||
|
||||
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.7-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
|
||||
|
||||
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.7-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||
|
||||
* Wed May 02 2012 Dmitry V. Levin <ldv@strace.io> 4.7-1
|
||||
- New upstream release.
|
||||
+ implemented proper handling of real SIGTRAPs (#162774).
|
||||
|
||||
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.6-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||
|
||||
* Mon Mar 14 2011 Dmitry V. Levin <ldv@strace.io> - 4.6-1
|
||||
- New upstream release.
|
||||
+ fixed a corner case in waitpid handling (#663547).
|
||||
|
||||
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.5.20-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||
|
||||
* Tue Apr 13 2010 Roland McGrath <roland@redhat.com> - 4.5.20-1
|
||||
- New upstream release, work mostly by Andreas Schwab and Dmitry V. Levin.
|
||||
+ fixed potential stack buffer overflow in select decoder (#556678);
|
||||
+ fixed FTBFS (#539044).
|
||||
|
||||
* Wed Oct 21 2009 Roland McGrath <roland@redhat.com> - 4.5.19-1
|
||||
- New upstream release, work mostly by Dmitry V. Levin <ldv@strace.io>
|
||||
+ exit/kill strace with traced process exitcode/signal (#105371);
|
||||
+ fixed build on ARM EABI (#507576);
|
||||
+ fixed display of 32-bit argv array on 64-bit architectures (#519480);
|
||||
+ fixed display of 32-bit fcntl(F_SETLK) on 64-bit architectures (#471169);
|
||||
+ fixed several bugs in strings decoder, including potential heap
|
||||
memory corruption (#470529, #478324, #511035).
|
||||
|
||||
* Thu Aug 28 2008 Roland McGrath <roland@redhat.com> - 4.5.18-1
|
||||
- build fix for newer kernel headers (#457291)
|
||||
- fix CLONE_VFORK handling (#455078)
|
||||
- Support new Linux/PPC system call subpage_prot and PROT_SAO flag.
|
||||
- In sigaction system call, display sa_flags value along with SIG_DFL/SIG_IGN.
|
||||
|
||||
* Mon Jul 21 2008 Roland McGrath <roland@redhat.com> - 4.5.17-1
|
||||
- handle O_CLOEXEC, MSG_CMSG_CLOEXEC (#365781)
|
||||
- fix biarch stat64 decoding (#222275)
|
||||
- fix spurious "..." in printing of environment strings (#358241)
|
||||
- improve prctl decoding (#364401)
|
||||
- fix hang wait on exited child with exited child (#354261)
|
||||
- fix biarch fork/vfork (-f) tracing (#447475)
|
||||
- fix biarch printing of negative argument kill (#430585)
|
||||
- fix biarch decoding of error return values (#447587)
|
||||
- fix -f tracing of CLONE_VFORK (#455078)
|
||||
- fix ia64 register clobberation in -f tracing (#453438)
|
||||
- print SO_NODEFER, SA_RESETHAND instead of SA_NOMASK, SA_ONESHOT (#455821)
|
||||
- fix futex argument decoding (#448628, #448629)
|
||||
|
||||
* Fri Aug 3 2007 Roland McGrath <roland@redhat.com> - 4.5.16-1
|
||||
- fix multithread issues (#240962, #240961, #247907)
|
||||
- fix spurious SIGSTOP on early interrupt (#240986)
|
||||
- fix utime for biarch (#247185)
|
||||
- fix -u error message (#247170)
|
||||
- better futex syscall printing (##241467)
|
||||
- fix argv/envp printing with small -s settings, and for biarch
|
||||
- new syscalls: getcpu, eventfd, timerfd, signalfd, epoll_pwait,
|
||||
move_pages, utimensat
|
||||
|
||||
* Tue Jan 16 2007 Roland McGrath <roland@redhat.com> - 4.5.15-1
|
||||
- biarch fixes (#179740, #192193, #171626, #173050, #218433, #218043)
|
||||
- fix -ff -o behavior (#204950, #218435, #193808, #219423)
|
||||
- better quotactl printing (#118696)
|
||||
- *at, inotify*, pselect6, ppoll and unshare syscalls (#178633, #191275)
|
||||
- glibc-2.5 build fixes (#209856)
|
||||
- memory corruption fixes (#200621
|
||||
- fix race in child setup under -f (#180293)
|
||||
- show ipc key values in hex (#198179, #192182)
|
||||
- disallow -c with -ff (#187847)
|
||||
- Resolves: RHBZ #179740, RHBZ #192193, RHBZ #204950, RHBZ #218435
|
||||
- Resolves: RHBZ #193808, RHBZ #219423, RHBZ #171626, RHBZ #173050
|
||||
- Resolves: RHBZ #218433, RHBZ #218043, RHBZ #118696, RHBZ #178633
|
||||
- Resolves: RHBZ #191275, RHBZ #209856, RHBZ #200621, RHBZ #180293
|
||||
- Resolves: RHBZ #198179, RHBZ #198182, RHBZ #187847
|
||||
|
||||
* Mon Nov 20 2006 Jakub Jelinek <jakub@redhat.com> - 4.5.14-4
|
||||
- Fix ia64 syscall decoding (#206768)
|
||||
- Fix build with glibc-2.4.90-33 and up on all arches but ia64
|
||||
- Fix build against 2.6.18+ headers
|
||||
|
||||
* Tue Aug 22 2006 Roland McGrath <roland@redhat.com> - 4.5.14-3
|
||||
- Fix bogus decoding of syscalls >= 300 (#201462, #202620).
|
||||
|
||||
* Fri Jul 14 2006 Jesse Keating <jkeating@redhat.com> - 4.5.14-2
|
||||
- rebuild
|
||||
|
||||
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 4.5.14-1.2
|
||||
- bump again for long double bug on ppc{,64}
|
||||
|
||||
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 4.5.14-1.1
|
||||
- rebuilt for new gcc4.1 snapshot and glibc changes
|
||||
|
||||
* Mon Jan 16 2006 Roland McGrath <roland@redhat.com> - 4.5.14-1
|
||||
- Fix biarch decoding of socket syscalls (#174354).
|
||||
- Fix biarch -e support (#173986).
|
||||
- Accept numeric syscalls in -e (#174798).
|
||||
- Fix ipc syscall decoding (#164755).
|
||||
- Improve msgrcv printing (#164757).
|
||||
- Man page updates (#165375).
|
||||
- Improve mount syscall printing (#165377).
|
||||
- Correct printing of restarting syscalls (#165469).
|
||||
|
||||
* Wed Aug 3 2005 Roland McGrath <roland@redhat.com> - 4.5.13-1
|
||||
- Fix setsockopt decoding on 64-bit (#162449).
|
||||
- Fix typos in socket option name strings (#161578).
|
||||
- Display more IPV6 socket options by name (#162450).
|
||||
- Don't display inappropriate syscalls for -e trace=file (#159340).
|
||||
- New selector type -e trace=desc for file-descriptor using calls (#159400).
|
||||
- Fix 32-bit old_mmap syscall decoding on x86-64 (#162467, #164215).
|
||||
- Fix errors detaching from multithreaded process on interrupt (#161919).
|
||||
- Note 4.5.12 fix for crash handling bad signal numbers (#162739).
|
||||
|
||||
* Wed Jun 8 2005 Roland McGrath <roland@redhat.com> - 4.5.12-1
|
||||
- Fix known syscall recognition for IA32 processes on x86-64 (#158934).
|
||||
- Fix bad output for ptrace on x86-64 (#159787).
|
||||
- Fix potential buffer overruns (#151570, #159196).
|
||||
- Make some diagnostics more consistent (#159308).
|
||||
- Update PowerPC system calls.
|
||||
- Better printing for Linux aio system calls.
|
||||
- Don't truncate statfs64 fields to 32 bits in output (#158243).
|
||||
- Cosmetic code cleanups (#159688).
|
||||
|
||||
* Tue Mar 22 2005 Roland McGrath <roland@redhat.com> - 4.5.11-1
|
||||
- Build tweaks.
|
||||
- Note 4.5.10 select fix (#151570).
|
||||
|
||||
* Mon Mar 14 2005 Roland McGrath <roland@redhat.com> - 4.5.10-1
|
||||
- Fix select handling on nonstandard fd_set sizes.
|
||||
- Don't print errors for null file name pointers.
|
||||
- Fix initial execve output with -i (#143365).
|
||||
|
||||
* Fri Feb 4 2005 Roland McGrath <roland@redhat.com> - 4.5.9-2
|
||||
- update ia64 syscall list (#146245)
|
||||
- fix x86_64 syscall argument extraction for 32-bit processes (#146093)
|
||||
- fix -e signal=NAME parsing (#143362)
|
||||
- fix x86_64 exit_group syscall handling
|
||||
- improve socket ioctl printing (#138223)
|
||||
- code cleanups (#143369, #143370)
|
||||
- improve mount flags printing (#141932)
|
||||
- support symbolic printing of x86_64 arch_prctl parameters (#142667)
|
||||
- fix potential crash in getxattr printing
|
||||
|
||||
* Tue Oct 19 2004 Roland McGrath <roland@redhat.com> - 4.5.8-1
|
||||
- fix multithreaded exit handling (#132150, #135254)
|
||||
- fix ioctl name matching (#129808)
|
||||
- print RTC_* ioctl structure contents (#58606)
|
||||
- grok epoll_* syscalls (#134463)
|
||||
- grok new RLIMIT_* values (#133594)
|
||||
- print struct cmsghdr contents for sendmsg (#131689)
|
||||
- fix clock_* and timer_* argument output (#131420)
|
||||
|
||||
* Tue Aug 31 2004 Roland McGrath <roland@redhat.com> - 4.5.7-2
|
||||
- new upstream version, misc fixes and updates (#128091, #129166, #128391, #129378, #130965, #131177)
|
||||
|
||||
* Mon Jul 12 2004 Roland McGrath <roland@redhat.com> 4.5.6-1
|
||||
- new upstream version, updates ioctl lists (#127398), fixes quotactl (#127393), more ioctl decoding (#126917)
|
||||
|
||||
* Sun Jun 27 2004 Roland McGrath <roland@redhat.com> 4.5.5-1
|
||||
- new upstream version, fixes x86-64 biarch support (#126547)
|
||||
|
||||
* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com> 4.5.4-2
|
||||
- rebuilt
|
||||
|
||||
* Thu Jun 3 2004 Roland McGrath <roland@redhat.com> 4.5.4-0.FC1
|
||||
- rebuilt for FC1 update
|
||||
|
||||
* Thu Jun 3 2004 Roland McGrath <roland@redhat.com> 4.5.4-1
|
||||
- new upstream version, more ioctls (#122257), minor fixes
|
||||
|
||||
* Fri Apr 16 2004 Roland McGrath <roland@redhat.com> 4.5.3-1
|
||||
- new upstream version, mq_* calls (#120701), -p vs NPTL (#120462), more fixes (#118694, #120541, #118685)
|
||||
|
||||
* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com> 4.5.2-1.1
|
||||
- rebuilt
|
||||
|
||||
* Mon Mar 1 2004 Roland McGrath <roland@redhat.com> 4.5.2-1
|
||||
- new upstream version, sched_* calls (#116990), show core flag (#112117)
|
||||
|
||||
* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
|
||||
- rebuilt
|
||||
|
||||
* Thu Nov 13 2003 Roland McGrath <roland@redhat.com> 4.5.1-1
|
||||
- new upstream version, more fixes (#108012, #105366, #105359, #105358)
|
||||
|
||||
* Tue Sep 30 2003 Roland McGrath <roland@redhat.com> 4.5-3
|
||||
- revert bogus s390 fix
|
||||
|
||||
* Thu Sep 25 2003 Roland McGrath <roland@redhat.com> 4.5-1.2.1AS
|
||||
- rebuilt for 2.1AS erratum
|
||||
|
||||
* Wed Sep 24 2003 Roland McGrath <roland@redhat.com> 4.5-2
|
||||
- rebuilt
|
||||
|
||||
* Wed Sep 24 2003 Roland McGrath <roland@redhat.com> 4.5-1
|
||||
- new upstream version, more fixes (#101499, #104365)
|
||||
|
||||
* Thu Jul 17 2003 Roland McGrath <roland@redhat.com> 4.4.99-2
|
||||
- rebuilt
|
||||
|
||||
* Thu Jul 17 2003 Roland McGrath <roland@redhat.com> 4.4.99-1
|
||||
- new upstream version, groks more new system calls, PF_INET6 sockets
|
||||
|
||||
* Tue Jun 10 2003 Roland McGrath <roland@redhat.com> 4.4.98-1
|
||||
- new upstream version, more fixes (#90754, #91085)
|
||||
|
||||
* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
|
||||
- rebuilt
|
||||
|
||||
* Sun Mar 30 2003 Roland McGrath <roland@redhat.com> 4.4.96-1
|
||||
- new upstream version, handles yet more 2.5 syscalls, x86_64 & ia64 fixes
|
||||
|
||||
* Mon Feb 24 2003 Elliot Lee <sopwith@redhat.com> 4.4.95-2
|
||||
- rebuilt
|
||||
|
||||
* Mon Feb 24 2003 Roland McGrath <roland@redhat.com> 4.4.95-1
|
||||
- new upstream version, fixed getresuid/getresgid (#84959)
|
||||
|
||||
* Wed Feb 19 2003 Roland McGrath <roland@redhat.com> 4.4.94-1
|
||||
- new upstream version, new option -E to set environment variables (#82392)
|
||||
|
||||
* Wed Jan 22 2003 Tim Powers <timp@redhat.com> 4.4.93-2
|
||||
- rebuilt
|
||||
|
||||
* Tue Jan 21 2003 Roland McGrath <roland@redhat.com> 4.4.93-1
|
||||
- new upstream version, fixes ppc and s390 bugs, adds missing ptrace requests
|
||||
|
||||
* Fri Jan 10 2003 Roland McGrath <roland@redhat.com> 4.4.91-1
|
||||
- new upstream version, fixes -f on x86-64
|
||||
|
||||
* Fri Jan 10 2003 Roland McGrath <roland@redhat.com> 4.4.90-1
|
||||
- new upstream version, fixes all known bugs modulo ia64 and s390 issues
|
||||
|
||||
* Fri Jan 03 2003 Florian La Roche <Florian.LaRoche@redhat.de> 4.4-11
|
||||
- add further s390 patch from IBM
|
||||
|
||||
* Wed Nov 27 2002 Tim Powers <timp@redhat.com> 4.4-10
|
||||
- remove unpackaged files from the buildroot
|
||||
|
||||
* Mon Oct 07 2002 Phil Knirsch <pknirsch@redhat.com> 4.4-9.1
|
||||
- Added latest s390(x) patch.
|
||||
|
||||
* Fri Sep 06 2002 Karsten Hopp <karsten@redhat.de> 4.4-9
|
||||
- preliminary x86_64 support with an ugly patch to help
|
||||
debugging. Needs cleanup!
|
||||
|
||||
* Mon Sep 2 2002 Jakub Jelinek <jakub@redhat.com> 4.4-8
|
||||
- newer version of the clone fixing patch (Roland McGrath)
|
||||
- aio syscalls for i386/ia64/ppc (Ben LaHaise)
|
||||
|
||||
* Wed Aug 28 2002 Jakub Jelinek <jakub@redhat.com> 4.4-7
|
||||
- fix strace -f (Roland McGrath, #68994)
|
||||
- handle ?et_thread_area, SA_RESTORER (Ulrich Drepper)
|
||||
|
||||
* Fri Jun 21 2002 Jakub Jelinek <jakub@redhat.com> 4.4-6
|
||||
- handle futexes, *xattr, sendfile64, etc. (Ulrich Drepper)
|
||||
- handle modify_ldt (#66894)
|
||||
|
||||
* Thu May 23 2002 Tim Powers <timp@redhat.com>
|
||||
- automated rebuild
|
||||
|
||||
* Tue Apr 16 2002 Jakub Jelinek <jakub@redhat.com> 4.4-4
|
||||
- fix for the last patch by Jeff Law (#62591)
|
||||
|
||||
* Mon Mar 4 2002 Preston Brown <pbrown@redhat.com> 4.4-3
|
||||
- integrate patch from Jeff Law to eliminate hang tracing threads
|
||||
|
||||
* Sat Feb 23 2002 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- minor update from debian tar-ball
|
||||
|
||||
* Wed Jan 02 2002 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- update to 4.4
|
||||
|
||||
* Sun Jul 22 2001 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- disable s390 patches, they are already included
|
||||
|
||||
* Wed Jul 18 2001 Preston Brown <pbrown@redhat.com> 4.3-1
|
||||
- new upstream version. Seems to have integrated most new syscalls
|
||||
- tracing threaded programs is now functional.
|
||||
|
||||
* Mon Jun 11 2001 Than Ngo <than@redhat.com>
|
||||
- port s390 patches from IBM
|
||||
|
||||
* Wed May 16 2001 Nalin Dahyabhai <nalin@redhat.com>
|
||||
- modify new syscall patch to allocate enough heap space in setgroups32()
|
||||
|
||||
* Wed Feb 14 2001 Jakub Jelinek <jakub@redhat.com>
|
||||
- #include <time.h> in addition to <sys/time.h>
|
||||
|
||||
* Fri Jan 26 2001 Karsten Hopp <karsten@redhat.com>
|
||||
- clean up conflicting patches. This happened only
|
||||
when building on S390
|
||||
|
||||
* Fri Jan 19 2001 Bill Nottingham <notting@redhat.com>
|
||||
- update to CVS, reintegrate ia64 support
|
||||
|
||||
* Fri Dec 8 2000 Bernhard Rosenkraenzer <bero@redhat.com>
|
||||
- Get S/390 support into the normal package
|
||||
|
||||
* Sat Nov 18 2000 Florian La Roche <Florian.LaRoche@redhat.de>
|
||||
- added S/390 patch from IBM, adapting it to not conflict with
|
||||
IA64 patch
|
||||
|
||||
* Sat Aug 19 2000 Jakub Jelinek <jakub@redhat.com>
|
||||
- doh, actually apply the 2.4 syscalls patch
|
||||
- make it compile with 2.4.0-test7-pre4+ headers, add
|
||||
getdents64 and fcntl64
|
||||
|
||||
* Thu Aug 3 2000 Jakub Jelinek <jakub@redhat.com>
|
||||
- add a bunch of new 2.4 syscalls (#14036)
|
||||
|
||||
* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
|
||||
- automatic rebuild
|
||||
- excludearch ia64
|
||||
|
||||
* Fri Jun 2 2000 Matt Wilson <msw@redhat.com>
|
||||
- use buildinstall for FHS
|
||||
|
||||
* Wed May 24 2000 Jakub Jelinek <jakub@redhat.com>
|
||||
- make things compile on sparc
|
||||
- fix sigreturn on sparc
|
||||
|
||||
* Fri Mar 31 2000 Bill Nottingham <notting@redhat.com>
|
||||
- fix stat64 misdef (#10485)
|
||||
|
||||
* Tue Mar 21 2000 Michael K. Johnson <johnsonm@redhat.com>
|
||||
- added ia64 patch
|
||||
|
||||
* Thu Feb 03 2000 Cristian Gafton <gafton@redhat.com>
|
||||
- man pages are compressed
|
||||
- version 4.2 (why are we keeping all these patches around?)
|
||||
|
||||
* Sat Nov 27 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- update to 4.1 (with sparc socketcall patch).
|
||||
|
||||
* Fri Nov 12 1999 Jakub Jelinek <jakub@redhat.com>
|
||||
- fix socketcall on sparc.
|
||||
|
||||
* Thu Sep 02 1999 Cristian Gafton <gafton@redhat.com>
|
||||
- fix KERN_SECURELVL compile problem
|
||||
|
||||
* Tue Aug 31 1999 Cristian Gafton <gafton@redhat.com>
|
||||
- added alpha patch from HJLu to fix the osf_sigprocmask interpretation
|
||||
|
||||
* Sat Jun 12 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- update to 3.99.1.
|
||||
|
||||
* Wed Jun 2 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- add (the other :-) jj's sparc patch.
|
||||
|
||||
* Wed May 26 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- upgrade to 3.99 in order to
|
||||
- add new 2.2.x open flags (#2955).
|
||||
- add new 2.2.x syscalls (#2866).
|
||||
- strace 3.1 patches carried along for now.
|
||||
|
||||
* Sun May 16 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- don't rely on (broken!) rpm %%patch (#2735)
|
||||
|
||||
* Tue Apr 06 1999 Preston Brown <pbrown@redhat.com>
|
||||
- strip binary
|
||||
|
||||
* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com>
|
||||
- auto rebuild in the new build environment (release 16)
|
||||
|
||||
* Tue Feb 9 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- vfork est arrive!
|
||||
|
||||
* Tue Feb 9 1999 Christopher Blizzard <blizzard@redhat.com>
|
||||
- Add patch to follow clone() syscalls, too.
|
||||
|
||||
* Sun Jan 17 1999 Jeff Johnson <jbj@redhat.com>
|
||||
- patch to build alpha/sparc with glibc 2.1.
|
||||
|
||||
* Thu Dec 03 1998 Cristian Gafton <gafton@redhat.com>
|
||||
- patch to build on ARM
|
||||
|
||||
* Wed Sep 30 1998 Jeff Johnson <jbj@redhat.com>
|
||||
- fix typo (printf, not tprintf).
|
||||
|
||||
* Sat Sep 19 1998 Jeff Johnson <jbj@redhat.com>
|
||||
- fix compile problem on sparc.
|
||||
|
||||
* Tue Aug 18 1998 Cristian Gafton <gafton@redhat.com>
|
||||
- buildroot
|
||||
|
||||
* Mon Jul 20 1998 Cristian Gafton <gafton@redhat.com>
|
||||
- added the umoven patch from James Youngman <jay@gnu.org>
|
||||
- fixed build problems on newer glibc releases
|
||||
|
||||
* Mon Jun 08 1998 Prospector System <bugs@redhat.com>
|
||||
- translations modified for de, fr, tr
|
Loading…
Reference in New Issue
Block a user