Compare commits

..

No commits in common. "c8" and "c9-beta" have entirely different histories.
c8 ... c9-beta

20 changed files with 278 additions and 3567 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/strace-5.18.tar.xz SOURCES/strace-6.12.tar.xz

View File

@ -1 +1 @@
e038ea9fc29366ce6119cde27d8cf16ac554a353 SOURCES/strace-5.18.tar.xz ef17e67a01a2ea3f4b6930d491d0a53e84768737 SOURCES/strace-6.12.tar.xz

View File

@ -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:

View File

@ -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)?",

View File

@ -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

View File

@ -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

View File

@ -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));
}

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 \

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 \

View File

@ -1,249 +1,145 @@
Summary: Tracks and displays system calls associated with a running process Summary: Tracks and displays system calls associated with a running process
Name: strace Name: strace
Version: 5.18 Version: 6.12
Release: 2.1%{?dist} Release: 1%{?dist}
# The test suite is GPLv2+, all the rest is LGPLv2.1+. # The test suite is GPLv2+, the bundled headers are GPLv2 with Linux syscall
License: LGPL-2.1+ and GPL-2.0+ # exception, all the rest is LGPLv2.1+.
Group: Development/Debuggers # https://docs.fedoraproject.org/en-US/legal/license-field/#_no_effective_license_analysis
URL: https://strace.io/ # BSD-2-Clause:
Source: https://strace.io/files/%{version}/%{name}-%{version}.tar.xz # 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
# 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
BuildRequires: xz
%else
Source: strace-%{version}.tar.gz
%endif
BuildRequires: gcc gzip make
BuildRequires: libacl-devel time 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) BuildRequires: pkgconfig(bluez)
BuildRequires: elfutils-devel binutils-devel %endif
BuildRequires: libselinux-devel
## Reported by covscan # Install elfutils-devel or libdw-devel to enable strace -k option.
## v5.2-3-g7ada13f "evdev: avoid bit vector decoding on non-successful and 0 return codes" # Install binutils-devel to enable symbol demangling.
#Patch30: 0030-evdev-avoid-bit-vector-decoding-on-non-successful-an.patch %if 0%{?fedora} >= 20 || 0%{?centos} >= 6 || 0%{?rhel} >= 6
## v5.2-4-g96194ed "evdev: fix array size calculation in decode_bitset_" %define buildrequires_stacktrace BuildRequires: elfutils-devel binutils-devel
#Patch31: 0031-evdev-fix-array-size-calculation-in-decode_bitset_.patch %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}
### Pre-requisite for "tests: test evdev bitset decoding more thoroughly" # OBS compatibility
## v4.25~89 "tests: check decoding of successful evdev ioctl" %{?!buildroot:BuildRoot: %_tmppath/buildroot-%name-%version-%release}
#Patch32: 0032-tests-check-decoding-of-successful-evdev-ioctl.patch %define maybe_use_defattr %{?suse_version:%%defattr(-,root,root)}
## Test for patches "evdev: avoid bit vector decoding on non-successful and 0
## return codes" and "evdev: fix array size calculation in decode_bitset_"
## v5.2-5-gcdd8206 "tests: test evdev bitset decoding more thoroughly"
#Patch33: 0033-tests-test-evdev-bitset-decoding-more-thoroughly.patch
### https://bugzilla.redhat.com/1747475 https://bugzilla.redhat.com/1747514
## v4.26~65 "s390x: beautify sthyi data tail prints"
#Patch34: 0034-s390x-beautify-sthyi-data-tail-prints.patch
## Reported by covscan (https://bugzilla.redhat.com/1747524
## https://bugzilla.redhat.com/1747526 https://bugzilla.redhat.com/1747530)
## v5.2-84-g91281fec "v4l2: avoid shifting left a signed number by 31 bit"
#Patch35: 0035-v4l2-avoid-shifting-left-a-signed-number-by-31-bit.patch
## v5.2~21 "syscall.c: avoid infinite loop in subcalls parsing"
#Patch36: 0036-syscall.c-avoid-infinite-loop-in-subcalls-parsing.patch
## v5.2~19 "kvm: avoid bogus vcpu_info assignment in vcpu_register"
#Patch37: 0037-kvm-avoid-bogus-vcpu_info-assignment-in-vcpu_registe.patch
## v5.4~97 "xlat: use unsgined type for mount_flags fallback values"
#Patch38: 0038-xlat-use-unsgined-type-for-mount_flags-fallback-valu.patch
## Missing stack traces on attach (https://bugzilla.redhat.com/1788636)
## RHEL 7: https://bugzilla.redhat.com/1790052
## RHEL 8: https://bugzilla.redhat.com/1790053
## RHEL 6 DTS: https://bugzilla.redhat.com/1790058
## RHEL 7 DTS: https://bugzilla.redhat.com/1790057
## RHEL 8 DTS: https://bugzilla.redhat.com/1790054
## v5.4-18-g69b2c33 "unwind-libdw: fix initialization of libdwfl cache"
#Patch39: 0039-unwind-libdw-fix-initialization-of-libdwfl-cache.patch
## v5.4-27-g35e080a "syscall: do not capture stack trace while the tracee executes strace code"
#Patch40: 0040-syscall-do-not-capture-stack-trace-while-the-tracee-.patch
## v5.4-63-g8e515c7 "tests: add strace-k-p test"
#Patch41: 0041-tests-add-strace-k-p-test.patch
## https://bugzilla.redhat.com/1746885
## v5.2-92-gc108f0b "sockaddr: properly decode sockaddr_hci addresses without hci_channel"
#Patch42: 0042-sockaddr-properly-decode-sockaddr_hci-addresses-with.patch
## Some ipc tests from strace internal testsuite occasionally fail
## https://bugzilla.redhat.com/1795251 https://bugzilla.redhat.com/1795261
## https://bugzilla.redhat.com/1794490 https://bugzilla.redhat.com/1795273
## v5.3~102 "tests: fix expected output for some ipc tests"
#Patch43: 0043-tests-fix-expected-output-for-some-ipc-tests.patch
## v5.4~49 "tests: fix -a argument in ipc_msgbuf-Xraw test"
#Patch44: 0044-tests-fix-a-argument-in-ipc_msgbuf-Xraw-test.patch
### Update bpf decoder, as bpf-obj_get_info_by_fd-prog-v.gen.test has started
### to fail after BPF rebase in RHEL 8.2 kernel.
## v5.0~98 "Fix preprocessor indentation", only the bpf_attr.h chunks
#Patch45: 0045-Fix-preprocessor-indentation.patch
## v5.0~24 "bpf: exclude bit fields from the check"
#Patch46: 0046-bpf-exclude-bit-fields-from-the-check.patch
## v5.0~23 "bpf: print struct bpf_prog_info.gpl_compatible"
#Patch47: 0047-bpf-print-struct-bpf_prog_info.gpl_compatible.patch
## v5.0~22 "bpf: add support for btf_* fields in BPF_MAP_CREATE"
#Patch48: 0048-bpf-add-support-for-btf_-fields-in-BPF_MAP_CREATE.patch
## v5.0~21 "bpf: add support for btf_* fields in struct bpf_map_info"
#Patch49: 0049-bpf-add-support-for-btf_-fields-in-struct-bpf_map_in.patch
## v5.0~20 "bpf: add support for *jited_ksyms and *jited_func_lens fields in struct bpf_prog_info"
#Patch50: 0050-bpf-add-support-for-jited_ksyms-and-jited_func_lens-.patch
## v5.0~19 "bpf: add support for new twelve fields in struct bpf_prog_info"
#Patch51: 0051-bpf-add-support-for-new-twelve-fields-in-struct-bpf_.patch
## v5.1~6 "tests: robustify bpf-obj_get_info_by_fd test against future kernels"
#Patch52: 0052-tests-robustify-bpf-obj_get_info_by_fd-test-against-.patch
## Patches 53-86 were on DTS 9 for
## "some devtoolset-9-strace internal tests fail on rhel-alt-7.6"
## https://bugzilla.redhat.com/1758201
## Update io_uring(2) decoder (https://bugzilla.redhat.com/1853011)
## v5.5~65 "io_uring: do not depend on kernel header definitions"
#Patch87: 0087-io_uring-do-not-depend-on-kernel-header-definitions.patch
## v5.5~64 "io_uring: de-indent the switch case statements"
#Patch88: 0088-io_uring-de-indent-the-switch-case-statements.patch
## v5.3~15 "Add support for printing local arrays to print_array"
#Patch89: 0089-Add-support-for-printing-local-arrays-to-print_array.patch
## v5.5~63 "Rework interface for printing local arrays"
#Patch90: 0090-Rework-interface-for-printing-local-arrays.patch
## v5.5~62 "io_uring: decode io_uring_params.resv with IS_ARRAY_ZERO and PRINT_FIELD_ARRAY"
#Patch91: 0091-io_uring-decode-io_uring_params.resv-with-IS_ARRAY_Z.patch
## v5.5~61 "io_uring: print io_sqring_offsets and io_cqring_offsets reserved fields"
#Patch92: 0092-io_uring-print-io_sqring_offsets-and-io_cqring_offse.patch
## v5.5~60 "io_uring: add support for IORING_REGISTER_EVENTFD and IORING_UNREGISTER_EVENTFD"
#Patch93: 0093-io_uring-add-support-for-IORING_REGISTER_EVENTFD-and.patch
## v5.5~59 "io_uring: implement decoding of struct io_uring_params.features"
#Patch94: 0094-io_uring-implement-decoding-of-struct-io_uring_param.patch
## v5.5~58 "xlat: add IORING_SETUP_CQSIZE to uring_setup_flags"
#Patch95: 0095-xlat-add-IORING_SETUP_CQSIZE-to-uring_setup_flags.patch
## v5.5~42 "io_uring: check struct io_* types automatically"
#Patch96: 0096-io_uring-check-struct-io_-types-automatically.patch
## v5.5~41 "io_uring: add support for IORING_REGISTER_FILES_UPDATE"
#Patch97: 0097-io_uring-add-support-for-IORING_REGISTER_FILES_UPDAT.patch
## v5.5~27 "xlat: update uring_setup_features constants"
#Patch98: 0098-xlat-update-uring_setup_features-constants.patch
## v5.5~26 "xlat: add IORING_SETUP_CLAMP to uring_setup_flags"
#Patch99: 0099-xlat-add-IORING_SETUP_CLAMP-to-uring_setup_flags.patch
## v5.5~25 "io_uring: add support of wq_fd field decoding to io_uring_setup"
#Patch100: 0100-io_uring-add-support-of-wq_fd-field-decoding-to-io_u.patch
## v5.6~190 "tests/io_uring_register: properly handle big endian architectures"
#Patch101: 0101-tests-io_uring_register-properly-handle-big-endian-a.patch
## v5.6~157 "io_uring: decode IORING_REGISTER_EVENTFD_ASYNC io_uring_reginster command"
#Patch102: 0102-io_uring-decode-IORING_REGISTER_EVENTFD_ASYNC-io_uri.patch
## v5.6~95 "io_uring: de-indent some code in io_uring_setup decoder"
#Patch103: 0103-io_uring-de-indent-some-code-in-io_uring_setup-decod.patch
## v5.3~29 "defs.h: introduce {opt,dispatch}_{word,klong}size"
#Patch104: 0104-defs.h-introduce-opt-dispatch-_-word-klong-size.patch
## v5.3~9 "Handle xlat verbosity in evdev bitset printing"
#Patch105: 0105-Handle-xlat-verbosity-in-evdev-bitset-printing.patch
## v5.6~94 "io_uring: support IORING_REGISTER_PROBE io_uring_register command"
#Patch106: 0106-io_uring-support-IORING_REGISTER_PROBE-io_uring_regi.patch
## v5.6~93 "io_uring: add support for IORING_{UN,}REGISTER_PERSONALITY commands"
#Patch107: 0107-io_uring-add-support-for-IORING_-UN-REGISTER_PERSONA.patch
## v5.6~17 "tests: fix clang compilation warning"
#Patch108: 0108-tests-fix-clang-compilation-warning.patch
## v5.6~10 "tests: workaround clang compilation warning"
#Patch109: 0109-tests-workaround-clang-compilation-warning.patch
## v5.7~87 "xlat: add IORING_FEAT_FAST_POLL to uring_setup_features"
#Patch110: 0110-xlat-add-IORING_FEAT_FAST_POLL-to-uring_setup_featur.patch
## v5.7~85 "xlat: update uring_ops"
#Patch111: 0111-xlat-update-uring_ops.patch
## v5.7~68 "tests: correct error message in io_uring_register test"
#Patch112: 0112-tests-correct-error-message-in-io_uring_register-tes.patch
## v5.8~58 "io_uring: Remove struct io_cqring_offsets compile time asserts"
#Patch113: 0113-io_uring-Remove-struct-io_cqring_offsets-compile-tim.patch
## v5.8~57 "io_uring: Add io_cqring_offset flags"
#Patch114: 0114-io_uring-Add-io_cqring_offset-flags.patch
## v5.8~47 "xlat: update IORING_* constants"
#Patch115: 0115-xlat-update-IORING_-constants.patch
## v5.5~71 "macros.h: introduce sizeof_field macro"
#Patch116: 0116-macros.h-introduce-sizeof_field-macro.patch
## v5.5~49 "types: new infrastructure for automatic checking of structure types"
#Patch117: 0117-types-new-infrastructure-for-automatic-checking-of-s.patch
## v5.8~59 "types: skip field lines that start with comments"
#Patch118: 0118-types-skip-field-lines-that-start-with-comments.patch
## PID namespace translation support
## https://bugzilla.redhat.com/1035434
## https://bugzilla.redhat.com/1725113 https://bugzilla.redhat.com/1790836
## https://bugzilla.redhat.com/1804334 https://bugzilla.redhat.com/1807458
# v5.8~62 "print_fields.h: add PRINT_FIELD_LEN macro"
#Patch119: 0119-print_fields.h-add-PRINT_FIELD_LEN-macro.patch
## v5.8~61 "Move ilog* functions from util.c to defs.h"
#Patch120: 0120-Move-ilog-functions-from-util.c-to-defs.h.patch
## v5.8~59 "types: skip field lines that start with comments"
#Patch121: 0121-types-skip-field-lines-that-start-with-comments.patch
## v5.8~54 "tests/inject-nf.test: replace getpid with geteuid"
#Patch122: 0122-tests-inject-nf.test-replace-getpid-with-geteuid.patch
## v5.8~18 "fcntl: use print_fields.h macros"
#Patch123: 0123-fcntl-use-print_fields.h-macros.patch
## v5.8~17 "kcmp: fix KCMP_FILE decoding"
#Patch124: 0124-kcmp-fix-KCMP_FILE-decoding.patch
## v5.8~15 "printsiginfo: fix printing of siginfo_t.si_pid and siginfo_t.si_uid"
#Patch125: 0125-printsiginfo-fix-printing-of-siginfo_t.si_pid-and-si.patch
## v5.8~14 "Use PRINT_FIELD_UID instead of printuid where appropriate"
#Patch126: 0126-Use-PRINT_FIELD_UID-instead-of-printuid-where-approp.patch
## v5.8~10 "Consistently print process ids as signed integers"
#Patch127: 0127-Consistently-print-process-ids-as-signed-integers.patch
## v5.8~9 "Remove tcb parameter of read_int_from_file"
#Patch128: 0128-Remove-tcb-parameter-of-read_int_from_file.patch
## v5.8~6 "Add "struct tcb *" parameters to various functions"
#Patch129: 0129-Add-struct-tcb-parameters-to-various-functions.patch
## v5.8~53 "Modify %process class: trace syscalls associated with process lifecycle"
#Patch130: 0130-Modify-process-class-trace-syscalls-associated-with-.patch
## v5.8~5 "Introduce SYS_FUNC(tkill)"
#Patch131: 0131-Introduce-SYS_FUNC-tkill.patch
## v5.8~4 "tests: check decoding of tkill syscall"
#Patch132: 0132-tests-check-decoding-of-tkill-syscall.patch
## v5.8~3 "tests: check decoding of tgkill syscall"
#Patch133: 0133-tests-check-decoding-of-tgkill-syscall.patch
## v5.8-5-gdea0284 "PID namespace translation support"
#Patch134: 0134-PID-namespace-translation-support.patch
## v5.8-6-g173257d "Use printpid in decoders"
#Patch135: 0135-Use-printpid-in-decoders.patch
## v5.8-7-g18c2208 "Use get_proc_pid for /proc paths"
#Patch136: 0136-Use-get_proc_pid-for-proc-paths.patch
## v5.8-8-g7ecee07 "Implement testing framework for pidns"
#Patch137: 0137-Implement-testing-framework-for-pidns.patch
## v5.8-9-gf350ce0 "Add tests for PID namespace translation"
#Patch138: 0138-Add-tests-for-PID-namespace-translation.patch
## v5.12~55 "tests: add fchmod-y test"
#Patch142: 0142-tests-add-fchmod-y-test.patch
## v5.12~54 "tests: introduce create_and_enter_subdir and leave_and_remove_subdir"
#Patch143: 0143-tests-introduce-create_and_enter_subdir-and-leave_an.patch
## v5.8~36 "tests: check decoding of faccessat syscall in -P, -y, and -yy modes"
#Patch144: 0144-tests-check-decoding-of-faccessat-syscall-in-P-y-and.patch
## v5.12~97 "xmalloc: introduce xasprintf"
#Patch145: 0145-xmalloc-introduce-xasprintf.patch
## v5.12~96 "tests: use xasprintf instead of asprintf"
#Patch146: 0146-tests-use-xasprintf-instead-of-asprintf.patch
## v5.12~156 "file_handle: print f_handle as a hexadecimal string"
#Patch147: 0147-file_handle-print-f_handle-as-a-hexadecimal-string.patch
## v5.10~47 "tests: fix execve test with fresh linux kernels"
#Patch148: 0148-tests-fix-execve-test-with-fresh-linux-kernels.patch
## v5.12~49 "Implement --secontext[=full] option to display SELinux contexts"
#Patch149: 0149-Implement-secontext-full-option-to-display-SELinux-c.patch
# v5.13-14-g9623154 "m4/mpers.m4: generate HAVE_*_SELINUX_RUNTIME config defines"
#Patch155: 0155-m4-mpers.m4-generate-HAVE_-_SELINUX_RUNTIME-config-d.patch
## v5.9~28 "Introduce GLIBC_PREREQ_GE and GLIBC_PREREQ_LT macros"
#Patch156: 0156-Introduce-GLIBC_PREREQ_GE-and-GLIBC_PREREQ_LT-macros.patch
## v5.9~27 "tests/ipc_msg.c: disable TEST_MSGCTL_BOGUS_ADDR on glibc >= 2.32"
#Patch157: 0157-tests-ipc_msg.c-disable-TEST_MSGCTL_BOGUS_ADDR-on-gl.patch
## v5.10~46 "tests: disable TEST_MSGCTL_BOGUS_ADDR in ipc_msg test on glibc >= 2.31"
#Patch158: 0158-tests-disable-TEST_MSGCTL_BOGUS_ADDR-in-ipc_msg-test.patch
## v5.10~22 "tests: disable tests for invalid msgctl commands on glibc >= 2.32"
#Patch159: 0159-tests-disable-tests-for-invalid-msgctl-commands-on-g.patch
## v5.9~11 "tests: disable shmctl IPC_STAT test with a bogus address on glibc >= 2.32"
#Patch160: 0160-tests-disable-shmctl-IPC_STAT-test-with-a-bogus-addr.patch
## v5.9~10 "tests: disable tests for invalid shmctl commands on glibc >= 2.32"
#Patch161: 0161-tests-disable-tests-for-invalid-shmctl-commands-on-g.patch
## v5.9~12 "tests: disable tests for invalid semctl commands on glibc >= 2.32"
#Patch162: 0162-tests-disable-tests-for-invalid-semctl-commands-on-g.patch
## v5.13-10-g0211fdc "tests: change sockopt-timestamp test to use syscall(__NR_recvmsg)"
#Patch141: 0141-tests-change-sockopt-timestamp-test-to-use-syscall-_.patch
## v5.13-55-g6b2191f "filter_qualify: free allocated data on the error path exit of parse_poke_token" ## v5.13-55-g6b2191f "filter_qualify: free allocated data on the error path exit of parse_poke_token"
#Patch163: 0163-filter_qualify-free-allocated-data-on-the-error-path.patch #Patch150: 0150-filter_qualify-free-allocated-data-on-the-error-path.patch
## v5.13-56-g80dc60c "macros: expand BIT macros, add MASK macros; add *_SAFE macros" ## v5.13-56-g80dc60c "macros: expand BIT macros, add MASK macros; add *_SAFE macros"
#Patch164: 0164-macros-expand-BIT-macros-add-MASK-macros-add-_SAFE-m.patch #Patch151: 0151-macros-expand-BIT-macros-add-MASK-macros-add-_SAFE-m.patch
## v5.13-58-g94ae5c2 "trie: use BIT* and MASK* macros" ## v5.13-58-g94ae5c2 "trie: use BIT* and MASK* macros"
#Patch165: 0165-trie-use-BIT-and-MASK-macros.patch #Patch152: 0152-trie-use-BIT-and-MASK-macros.patch
## v5.13-65-g41b753e "tee: rewrite num_params access in tee_fetch_buf_data" ## v5.13-65-g41b753e "tee: rewrite num_params access in tee_fetch_buf_data"
#Patch166: 0166-tee-rewrite-num_params-access-in-tee_fetch_buf_data.patch #Patch153: 0153-tee-rewrite-num_params-access-in-tee_fetch_buf_data.patch
## v5.14~12 "tests: call setsockopt directly in sockopt-timestamp"
#Patch154: 0154-tests-call-setsockopt-directly-in-sockopt-timestamp.patch
## v5.15~1 "print_ifindex: fix IFNAME_QUOTED_SZ definition" ## v5.15~1 "print_ifindex: fix IFNAME_QUOTED_SZ definition"
#Patch167: 0167-print_ifindex-fix-IFNAME_QUOTED_SZ-definition.patch #Patch167: 0167-print_ifindex-fix-IFNAME_QUOTED_SZ-definition.patch
@ -258,90 +154,48 @@ BuildRequires: libselinux-devel
#Patch173: 0173-tests-secontext-eliminate-separate-secontext_format-.patch #Patch173: 0173-tests-secontext-eliminate-separate-secontext_format-.patch
#Patch174: 0174-tests-linkat-reset-context-to-the-expected-one-if-a-.patch #Patch174: 0174-tests-linkat-reset-context-to-the-expected-one-if-a-.patch
## https://bugzilla.redhat.com/2103068 covscan fixes ### https://bugzilla.redhat.com/2103068 covscan fixes
# v5.18-5-g2bf0696 "src/xlat: remove remnants of unnecessary idx usage in xlookup" ## v5.18-5-g2bf0696 "src/xlat: remove remnants of unnecessary idx usage in xlookup"
Patch175: 0175-src-xlat-remove-remnants-of-unnecessary-idx-usage-in.patch #Patch175: 0175-src-xlat-remove-remnants-of-unnecessary-idx-usage-in.patch
# v5.18-7-ge604d7b "strauss: tips whitespace and phrasing cleanups" ## v5.18-7-ge604d7b "strauss: tips whitespace and phrasing cleanups"
Patch176: 0176-strauss-tips-whitespace-and-phrasing-cleanups.patch #Patch176: 0176-strauss-tips-whitespace-and-phrasing-cleanups.patch
# v5.18-8-g968789d "strauss: fix off-by-one error in strauss array access" ## v5.18-8-g968789d "strauss: fix off-by-one error in strauss array access"
Patch177: 0177-strauss-fix-off-by-one-error-in-strauss-array-access.patch #Patch177: 0177-strauss-fix-off-by-one-error-in-strauss-array-access.patch
# v5.18-9-g6d3e97e "util: add offs sanity check to print_clock_t" ## v5.18-9-g6d3e97e "util: add offs sanity check to print_clock_t"
Patch178: 0178-util-add-offs-sanity-check-to-print_clock_t.patch #Patch178: 0178-util-add-offs-sanity-check-to-print_clock_t.patch
## https://bugzilla.redhat.com/2087693 ### https://bugzilla.redhat.com/2087693
# v5.18-13-g960e78f "secontext: print context of Unix socket's sun_path field" ## v5.18-13-g960e78f "secontext: print context of Unix socket's sun_path field"
Patch179: 0179-secontext-print-context-of-Unix-socket-s-sun_path-fi.patch #Patch179: 0179-secontext-print-context-of-Unix-socket-s-sun_path-fi.patch
# v5.18-18-g676979f "pathtrace, util: do not print " (deleted)" as part of the path" ## v5.18-18-g676979f "pathtrace, util: do not print " (deleted)" as part of the path"
Patch180: 0180-pathtrace-util-do-not-print-deleted-as-part-of-the-p.patch #Patch180: 0180-pathtrace-util-do-not-print-deleted-as-part-of-the-p.patch
# v5.18-19-g3f0e534 "secontext: fix expected SELinux context check for unlinked FDs" ## v5.18-19-g3f0e534 "secontext: fix expected SELinux context check for unlinked FDs"
Patch181: 0181-secontext-fix-expected-SELinux-context-check-for-unl.patch #Patch181: 0181-secontext-fix-expected-SELinux-context-check-for-unl.patch
## https://bugzilla.redhat.com/2103137 ### https://bugzilla.redhat.com/2103137
# v5.18-21-g5338636 "tests/bpf: fix sloppy low FD number usage" ## v5.18-21-g5338636 "tests/bpf: fix sloppy low FD number usage"
Patch182: 0182-tests-bpf-fix-sloppy-low-FD-number-usage.patch #Patch182: 0182-tests-bpf-fix-sloppy-low-FD-number-usage.patch
## https://issues.redhat.com/browse/RHEL-8570 ### https://issues.redhat.com/browse/RHEL-8570
# v6.11-21-gc7e0ea6d7 "syscall: do not use uninitialized parts of struct ptrace_syscall_info" ## v6.11-21-gc7e0ea6d7 "syscall: do not use uninitialized parts of struct ptrace_syscall_info"
Patch183: 0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch #Patch183: 0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch
# v6.11-22-g2048c136b "startup_tcb: add a comment" ## v6.11-22-g2048c136b "startup_tcb: add a comment"
Patch184: 0184-startup_tcb-add-a-comment.patch #Patch184: 0184-startup_tcb-add-a-comment.patch
# v6.11-23-g3bf08cbb3 "tests: add another test of restart_syscall decoding" ## v6.11-23-g3bf08cbb3 "tests: add another test of restart_syscall decoding"
Patch185: 0185-tests-add-another-test-of-restart_syscall-decoding.patch #Patch185: 0185-tests-add-another-test-of-restart_syscall-decoding.patch
## kernel-5.14.0-417.el9~9 (RHEL 9.4+) has v6.8-rc1~131^2~223 "tcp: Dump bound-only sockets in inet_diag." ### kernel-5.14.0-417.el9~9 (RHEL 9.4+) has v6.8-rc1~131^2~223 "tcp: Dump bound-only sockets in inet_diag."
# v6.9~27 "tests: workaround net-yy-inet* for new kernels" ## v6.9~27 "tests: workaround net-yy-inet* for new kernels"
Patch186: 0186-tests-workaround-net-yy-inet-for-new-kernels.patch #Patch186: 0186-tests-workaround-net-yy-inet-for-new-kernels.patch
## Update linkat--secontext_mismatch test to fix the failures reported by QE ### Update linkat--secontext_mismatch test to fix the failures reported by QE
# v6.11~4 "tests: avoid linkat--secontext_mismatch failures on setfilecon errors" ## v6.11~4 "tests: avoid linkat--secontext_mismatch failures on setfilecon errors"
Patch187: 0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch #Patch187: 0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch
# "linux/s390/get_scno.c: use NT_S390_SYSTEM_CALL if gprs[2] is clobbered" ## "linux/s390/get_scno.c: use NT_S390_SYSTEM_CALL if gprs[2] is clobbered"
Patch188: 0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch #Patch188: 0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch
### Skip these two patches present in RHEL 9/10 as sockopt-sol_socket test doesn't exist in strace-5.18
## "tests: move k_setsockopt definition into a separate" ## "tests: move k_setsockopt definition into a separate"
#Patch189: 0189-tests-move-k_setsockopt-definition-into-a-separate-f.patch #Patch189: 0189-tests-move-k_setsockopt-definition-into-a-separate-f.patch
## "tests/sockopt-timestamp.c: use k_getsockopt and k_setsockopt" ## "tests/sockopt-timestamp.c: use k_getsockopt and k_setsockopt"
#Patch190: 0190-tests-sockopt-timestamp.c-use-k_getsockopt-and-k_set.patch #Patch190: 0190-tests-sockopt-timestamp.c-use-k_getsockopt-and-k_set.patch
## Fix for prctl-sve.gen test failure on aarch64
# v5.19~14 "prctl: improve PR_SVE_[SG]ET_VL decoding"
Patch191: 0191-prctl-improve-PR_SVE_-SG-ET_VL-decoding.patch
# v6.3~32 "tests/prctl-sve: fix prctl(PR_SVE_GET_VL) return expected value printing"
Patch192: 0192-tests-prctl-sve-fix-prctl-PR_SVE_GET_VL-return-expec.patch
### Wire up rseq and kexec_file_load in order to avoid kexec_file_load
### test failure on aarch64. Addresses https://bugzilla.redhat.com/1676045
### ("strace: FTBFS in Fedora rawhide/f30").
## v5.0~62 "Wire up rseq syscall on architectures that use generic unistd.h"
#Patch1000: 1000-Wire-up-rseq-syscall-on-architectures-that-use-gener.patch
## v5.0~61 "Wire up kexec_file_load syscall on architectures that use generic unistd.h"
#Patch1001: 1001-Wire-up-kexec_file_load-syscall-on-architectures-tha.patch
### RHEL7-only: headers on some builders do not provide O_TMPFILE
#Patch2000: 2000-strace-provide-O_TMPFILE-fallback-definition.patch
## RHEL-only: aarch64 brew builders are extremely slow on qual_fault.test
Patch2001: 2001-limit-qual_fault-scope-on-aarch64.patch
### RHEL8.2-only: disable ksysent test due to missing rebase
#Patch2002: 2002-disable-ksysent-on-8.2.patch
### RHEL-only: avoid ARRAY_SIZE macro re-definition in libiberty.h
## No longer needed, since upstream commit v5.14~14
#Patch2003: 2003-undef-ARRAY_SIZE.patch
### RHEL-only: glibc-2.32.9000-147-ga16d2abd496bd974a882,
### glibc-2.32.9000-149-gbe9b0b9a012780a403a2 and
### glibc-2.32.9000-207-g9ebaabeaac1a96b0d91f have been backported in RHEL.
## No longer needed, since upstream commit v5.15~9
#Patch2004: 2004-glibc-msgctl-semctl-shmctl-backport-workaround.patch
# We no longer need to build a separate strace32 binary, but we don't want
# to break existing strace32 users' workflows.
%define strace32_arches ppc64 s390x
%ifarch %{strace32_arches}
%define _isa_compat %{?__isa_name:(%{__isa_name}-32)}%{!?__isa:%{nil}}
%define evr %{?epoch:%{epoch}:}%{version}-%{release}
Provides: strace32 = %{evr}
# strace32 was a real package before strace-4.24 in RHEL
Obsoletes: strace32 < 4.24
%endif
# Fallback definitions for make_build/make_install macros # Fallback definitions for make_build/make_install macros
%{?!__make: %global __make %_bindir/make} %{?!__make: %global __make %_bindir/make}
@ -362,102 +216,15 @@ received by a process.
%prep %prep
%setup -q %setup -q
#%patch30 -p1 #%patch141 -p1
#%patch31 -p1 #%patch150 -p1
#%patch32 -p1 #%patch151 -p1
#%patch33 -p1 #%patch152 -p1
#%patch34 -p1 #%patch153 -p1
#%patch35 -p1 #%patch154 -p1
#%patch36 -p1
#%patch37 -p1
#%patch38 -p1
#%patch39 -p1
#%patch40 -p1
#%patch41 -p1
#%patch42 -p1
#%patch43 -p1
#%patch44 -p1
#%patch45 -p1
#%patch46 -p1
#%patch47 -p1
#%patch48 -p1
#%patch49 -p1
#%patch50 -p1
#%patch51 -p1
#%patch52 -p1
#%patch87 -p1
#%patch88 -p1
#%patch89 -p1
#%patch90 -p1
#%patch91 -p1
#%patch92 -p1
#%patch93 -p1
#%patch94 -p1
#%patch95 -p1
#%patch96 -p1
#%patch97 -p1
#%patch98 -p1
#%patch99 -p1
#%patch100 -p1
#%patch101 -p1
#%patch102 -p1
#%patch103 -p1
#%patch104 -p1
#%patch105 -p1
#%patch106 -p1
#%patch107 -p1
#%patch108 -p1
#%patch109 -p1
#%patch110 -p1
#%patch111 -p1
#%patch112 -p1
#%patch113 -p1
#%patch114 -p1
#%patch115 -p1
#%patch116 -p1
#%patch117 -p1
#%patch118 -p1
#%patch119 -p1
#%patch120 -p1
#%patch121 -p1
#%patch122 -p1
#%patch123 -p1
#%patch124 -p1
#%patch125 -p1
#%patch126 -p1
#%patch127 -p1
#%patch128 -p1
#%patch129 -p1
#%patch130 -p1
#%patch131 -p1
#%patch132 -p1
#%patch133 -p1
#%patch134 -p1
#%patch135 -p1
#%patch136 -p1
#%patch137 -p1
#%patch138 -p1
#%patch142 -p1
#%patch143 -p1
#%patch144 -p1
#%patch145 -p1
#%patch146 -p1
#%patch147 -p1
#%patch148 -p1
#%patch149 -p1
#%patch155 -p1
#%patch156 -p1
#%patch157 -p1
#%patch158 -p1
#%patch159 -p1
#%patch160 -p1
#%patch161 -p1
#%patch162 -p1
#%patch163 -p1
#%patch164 -p1
#%patch165 -p1
#%patch166 -p1
#%patch167 -p1 #%patch167 -p1
#%patch168 -p1 #%patch168 -p1
#%patch169 -p1 #%patch169 -p1
#%patch170 -p1 #%patch170 -p1
@ -466,42 +233,31 @@ received by a process.
#%patch173 -p1 #%patch173 -p1
#%patch174 -p1 #%patch174 -p1
%patch175 -p1 #%patch175 -p1
%patch176 -p1 #%patch176 -p1
%patch177 -p1 #%patch177 -p1
%patch178 -p1 #%patch178 -p1
%patch179 -p1 #%patch179 -p1
%patch180 -p1 #%patch180 -p1
%patch181 -p1 #%patch181 -p1
%patch182 -p1 #%patch182 -p1
%patch183 -p1 #%patch183 -p1
%patch184 -p1 #%patch184 -p1
%patch185 -p1 #%patch185 -p1
%patch186 -p1 #%patch186 -p1
%patch187 -p1 #%patch187 -p1
%patch188 -p1 #%patch188 -p1
#%patch189 -p1 #%patch189 -p1
#%patch190 -p1 #%patch190 -p1
%patch191 -p1
%patch192 -p1
#%patch1000 -p1
#%patch1001 -p1
#%patch2000 -p1
%patch2001 -p1
#%patch2002 -p1
#%patch2003 -p1
#%patch2004 -p1
chmod a+x tests/*.test chmod a+x tests/*.test
echo -n %version-%release > .tarball-version echo -n %version-%release > .tarball-version
echo -n 2022 > .year echo -n 2024 > .year
echo -n 2022-06-22 > doc/.strace.1.in.date echo -n 2024-02-01 > doc/.strace.1.in.date
echo -n 2022-06-22 > doc/.strace-log-merge.1.in.date echo -n 2024-02-01 > doc/.strace-log-merge.1.in.date
%build %build
echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION' echo 'BEGIN OF BUILD ENVIRONMENT INFORMATION'
@ -512,34 +268,26 @@ file -L /bin/sh
gcc --version |head -1 gcc --version |head -1
ld --version |head -1 ld --version |head -1
kver="$(printf '%%s\n%%s\n' '#include <linux/version.h>' 'LINUX_VERSION_CODE' | gcc -E -P -)" 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)) printf 'kernel-headers %%s.%%s.%%s\n' $((kver/65536)) $((kver/256%%256)) $((kver%%256))
echo 'END OF BUILD ENVIRONMENT INFORMATION' echo 'END OF BUILD ENVIRONMENT INFORMATION'
CFLAGS=" $RPM_OPT_FLAGS $LDFLAGS " CFLAGS="$RPM_OPT_FLAGS $LDFLAGS"
# Removing explicit -m64 as it breaks mpers # Removing explicit -m64 as it breaks mpers
[ "x${CFLAGS#* -m64 }" = "x${CFLAGS}" ] || CFLAGS=$(echo "$CFLAGS" | sed 's/ -m64 / /g') [ "x${CFLAGS#*-m64}" = "x${CFLAGS}" ] || CFLAGS=$(echo "$CFLAGS" | sed 's/-m64//g')
export CFLAGS export CFLAGS
CPPFLAGS=" -isystem %{_includedir} %{optflags} " CPPFLAGS="%{optflags}"
# Removing explicit -m64 as it breaks mpers # Removing explicit -m64 as it breaks mpers
[ "x${CPPFLAGS#* -m64 }" = "x${CPPFLAGS}" ] || CPPFLAGS=$(echo "$CPPFLAGS" | sed 's/ -m64 / /g') [ "x${CPPFLAGS#*-m64}" = "x${CPPFLAGS}" ] || CPPFLAGS=$(echo "$CPPFLAGS" | sed 's/-m64//g')
export CPPFLAGS export CPPFLAGS
CFLAGS_FOR_BUILD="$RPM_OPT_FLAGS"; export CFLAGS_FOR_BUILD CFLAGS_FOR_BUILD="$RPM_OPT_FLAGS"; export CFLAGS_FOR_BUILD
%configure --enable-mpers=check --with-libdw --with-libiberty %configure --enable-mpers=check --enable-bundled=yes
%make_build %make_build
%install %install
%make_install %make_install
%ifarch %{strace32_arches}
ln -s ./strace %{buildroot}%{_bindir}/strace32
%endif
# remove unpackaged files from the buildroot
rm -f %{buildroot}%{_bindir}/strace-graph
# some say uncompressed changelog files are too big # some say uncompressed changelog files are too big
for f in ChangeLog ChangeLog-CVS; do for f in ChangeLog ChangeLog-CVS; do
gzip -9n < "$f" > "$f".gz & gzip -9n < "$f" > "$f".gz &
@ -547,141 +295,123 @@ done
wait wait
%check %check
# This is needed since patch does not set x bit to the newly created files width=$(echo __LONG_WIDTH__ |%__cc -E -P -)
chmod u+x tests/*.test tests-m32/*.test tests-mx32/*.test skip_32bit=0
%if 0%{?fedora} >= 35 || 0%{?rhel} > 9
skip_32bit=1
%endif
%{buildroot}%{_bindir}/strace -V if [ "${width}" != 32 ] || [ "${skip_32bit}" != 1 ]; then
%{buildroot}%{_bindir}/strace -V
# We have to limit concurrent execution of tests as some time-sensitive tests %make_build -k check VERBOSE=1
# start to fail if the reported time is way too off from the expected one. echo 'BEGIN OF TEST SUITE INFORMATION'
%make_build -k check VERBOSE=1 V=1 tail -n 99999 -- tests*/test-suite.log tests*/ksysent.gen.log
echo 'BEGIN OF TEST SUITE INFORMATION' find tests* -type f -name '*.log' -print0 |
tail -n 99999 -- tests*/test-suite.log tests*/ksysent.gen.log
find tests* -type f -name '*.log' -print0 |
xargs -r0 grep -H '^KERNEL BUG:' -- ||: xargs -r0 grep -H '^KERNEL BUG:' -- ||:
echo 'END OF TEST SUITE INFORMATION' echo 'END OF TEST SUITE INFORMATION'
fi
%files %files
%defattr(-,root,root) %maybe_use_defattr
%doc CREDITS ChangeLog.gz ChangeLog-CVS.gz COPYING LGPL-2.1-or-later NEWS README %doc CREDITS ChangeLog.gz ChangeLog-CVS.gz COPYING NEWS README
%{_bindir}/strace %{_bindir}/strace
%ifarch %{strace32_arches}
%{_bindir}/strace32
%endif
%{_bindir}/strace-log-merge %{_bindir}/strace-log-merge
%{_mandir}/man1/* %{_mandir}/man1/*
%changelog %changelog
* Tue Oct 29 2024 Eugene Syromiatnikov <esyr@redhat.com> - 5.18-2.1 * Thu Jan 02 2025 Eugene Syromiatnikov <esyr@redhat.com> - 6.12-1
- Rebase to v6.12; drop upstream patches on top of 6.7, drop the harcoded
"-isystem %{_includedir}" from CPPFLAGS (RHEL-8646).
* Tue Oct 29 2024 Eugene Syromiatnikov <esyr@redhat.com> - 6.7-2
- Fix incorrect syscall name reporting in restart_syscall() on attach when - Fix incorrect syscall name reporting in restart_syscall() on attach when
PTRACE_GET_SYSCALL_INFO is in use (RHEL-8570). PTRACE_GET_SYSCALL_INFO is in use (RHEL-65109).
- Update net-yy-inet*, linkat--secontext_mismatch, and prctl-sve tests. - Update net-yy-inet* and linkat--secontext_mismatch tests.
* Thu Feb 01 2024 Eugene Syromiatnikov <esyr@redhat.com> - 6.7-1
- Rebase to v6.7; drop upstream patches on top of 5.18 (RHEL-8646).
- Updated the SPDX license expression.
* Mon Jul 11 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.18-2 * Mon Jul 11 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.18-2
- Fix the issues reported by covscan (#2103068). - Fix the issues reported by covscan (#2103068).
- Fix SELinux context matching for the deleted paths (#2087693). - Fix SELinux context matching for the deleted paths (#2087693).
- Fix sloppy FD usage in the bpf test (#2103137). - Fix sloppy FD usage in the bpf test (#2103137).
- Cater for RHEL 9 license requirement idiosyncrasies (#2103032).
* Wed Jun 22 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.18-1 * Wed Jun 22 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.18-1
- Rebase to v5.18; drop upstream patches on top of 5.13 (#2084000). - Rebase to v5.18; drop upstream patches on top of 5.13 (#2084002).
* Mon Feb 07 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-4 * Mon Feb 07 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-7
- Update tests-m32 and tests-mx32 with --secontext=mismatch option support - Update tests-m32 and tests-mx32 with --secontext=mismatch option support
changes (#2046259). changes (#2046264).
* Wed Jan 19 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-3 * Wed Jan 19 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-6
- Add --secontext=mismatch option support (#2038810). - Add --secontext=mismatch option support (#2038965).
* Wed Jan 05 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-2 * Wed Jan 05 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-5
- Fix incorrect ifname printing buffer size (#2028158). - Fix incorrect ifname printing buffer size (#2028166).
* Wed Oct 20 2021 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-1 * Mon Aug 23 2021 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-3
- Rebase to v5.13; drop upstream patches on top of 5.7 (#2015917). - Address some issues reported by covscan (#1996691).
- Address some issues reported by covscan. - Replace 0141-tests-disable-sockopt-timestamp-on-new-glibc-with-__.patch
with upstream v5.13-10-g0211fdc "tests: change sockopt-timestamp test
to use syscall(__NR_recvmsg)"
and 0154-tests-call-setsockopt-directly-in-sockopt-timestamp.patch.
- Undo forceful injection of -m64 into CFLAGS/CPPFLAGS to avoid breaking
mpers and its tests (#1996676).
* Mon Aug 09 2021 Eugene Syromiatnikov <esyr@redhat.com> - 5.7-3 * Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 5.13-2
- Add SELnux context decoding support (#1946500). - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Mon Nov 09 2020 Eugene Syromiatnikov <esyr@redhat.com> - 5.7-2 * Tue Jul 20 2021 Eugene Syromiatnikov <esyr@redhat.com> - 5.13-1
- Add PID namespace translation support (#1725113). - Rebase to v5.13 (#1925722, #1925967, #1928305, #1973048).
* Mon Nov 09 2020 Eugene Syromiatnikov <esyr@redhat.com> - 5.7-1 * Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 5.10-2
- Rebase to v5.7; drop upstream patches on top of 5.1 (#1873229). - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Mon Aug 24 2020 Eugene Syromiatnikov <esyr@redhat.com> - 5.1-2 * Mon Dec 14 2020 Dmitry V. Levin <ldv@altlinux.org> - 5.10-1
- Update io_uring(2) decoder (#1853011). - v5.9 -> v5.10.
- Fix "Obsoletes:" tag on s390x (#1852960).
* Thu Jan 30 2020 Eugene Syromiatnikov <esyr@redhat.com> - 5.1-1 * Thu Sep 24 2020 Dmitry V. Levin <ldv@altlinux.org> - 5.9-1
- Rebase to strace 5.1 (#1777847). - v5.8 -> v5.9.
* Thu Jan 30 2020 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-9 * Thu Aug 06 2020 Dmitry V. Levin <ldv@altlinux.org> - 5.8-1
- Fix the "extra tokens at end of #ifdef directive" warning: - v5.7 -> v5.8.
579f2702 "bpf: exclude bit fields from the check".
* Mon Jan 27 2020 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-8 * Mon Jun 01 2020 Dmitry V. Levin <ldv@altlinux.org> - 5.7-1
- Fix expected alignment for IPC tests (#1795251): - v5.6 -> v5.7.
4377e3a1 "tests: fix expected output for some ipc tests", and
a75c7c4b "tests: fix -a argument in ipc_msgbuf-Xraw test".
- Update tests-m32/looping_threads.test and tests-mx32/looping_threads.test
in 0025-tests-check-tracing-of-looping-threads.patch.
- Update the bpf syscall decoder:
d6c71dd0 "Fix preprocessor indentation",
cabd6955 "bpf: print struct bpf_prog_info.gpl_compatible",
14a9b6ca "bpf: add support for btf_* fields in BPF_MAP_CREATE",
27bd13d3 "bpf: add support for btf_* fields in struct bpf_map_info",
d1f90bcd "bpf: add support for *jited_ksyms and *jited_func_lens fields
in struct bpf_prog_info", and
940fe50f "bpf: add support for new twelve fields in struct bpf_prog_info".
c661605b "tests: robustify bpf-obj_get_info_by_fd test against future kernels"
* Thu Jan 23 2020 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-7 * Tue Apr 07 2020 Dmitry V. Levin <ldv@altlinux.org> - 5.6-1
- Fix printing stack traces for early syscalls on process attach (#1790053): - v5.5 -> v5.6.
69b2c33a "unwind-libdw: fix initialization of libdwfl cache" and
8e515c74 "tests: add strace-k-p test".
- Properly decode struct sockaddr_hci without hci_channel field.
- Update tests-m32/ioctl_evdev.c and tests-mx32/ioctl_evdev.c
in 0002-evdev-fix-decoding-of-EVIOCGBIT-0.patch.
- Update tests-m32/Makefile.in and tests-mx32/Makefile.in
in 0032-tests-check-decoding-of-successful-evdev-ioctl.patch.
* Mon Dec 02 2019 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-6 * Thu Feb 06 2020 Dmitry V. Levin <ldv@altlinux.org> - 5.5-1
- Pull upstream fix for ioctl evdev bitset decoding, fix the tests (#1747214). - v5.4 -> v5.5.
- Include commit v4.26~65 "s390x: beautify sthyi data tail prints" (#1747514).
- Include upstream patches that fix issues reported by covscan (#1747526):
91281fec "v4l2: avoid shifting left a signed number by 31 bit",
522ad3a0 "syscall.c: avoid infinite loop in subcalls parsing",
9446038e "kvm: avoid bogus vcpu_info assignment in vcpu_register", and
2b64854e "xlat: use unsgined type for mount_flags fallback values".
* Fri Jun 14 2019 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-5 * Thu Nov 28 2019 Dmitry V. Levin <ldv@altlinux.org> - 5.4-1
- Use SPDX abbreviations for licenses. - v5.3 -> v5.4.
* Wed Jun 12 2019 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-4 * Wed Sep 25 2019 Dmitry V. Levin <ldv@altlinux.org> - 5.3-1
- Sync up thread handling unfairness fix with the upstream version. - v5.2 -> v5.3.
- Fix "xlat_idx: Unexpected xlat value 0 at index ..." messages (#1660759).
- Remove "ptrace(SYSCALL): No such process" messages (#1662936).
- Wire up rseq and kexec_file_load on aarch64 (#1676045).
* Mon Dec 17 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-3 * Fri Jul 12 2019 Dmitry V. Levin <ldv@altlinux.org> - 5.2-1
- Add current version of the thread handling unfairness fix. - v5.1 -> v5.2.
* Mon Sep 03 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-2 * Wed May 22 2019 Dmitry V. Levin <ldv@altlinux.org> - 5.1-1
- Add transition for strace32 package pn those architectures that - v5.0 -> v5.1.
provided it in RHEL 7 (ppc64 and s390x).
* Tue Aug 14 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.24-1 * Tue Mar 19 2019 Dmitry V. Levin <ldv@altlinux.org> - 5.0-1
- Rebase to v4.24. - v4.26 -> v5.0 (resolves: #478419, #526740, #851457, #1609318,
#1610774, #1662936, #1676045).
* Sun Aug 05 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.23-4 * Wed Dec 26 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.26-1
- Fix tests build with fresh glibc that now provides struct statx in sys/stat.h. - v4.25 -> v4.26.
- Resolves #1611749.
* Thu Jul 19 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.23-3 * Tue Oct 30 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.25-1
- Wire up io_pgetevents and rseq on hppa, microblaze, mips, powerpc, and s390. - v4.24 -> v4.25.
* Sat Jun 16 2018 Eugene Syromiatnikov <esyr@redhat.com> - 4.23-2 * Tue Aug 14 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.24-1
- Increase test timeout duration. - v4.23 -> v4.24.
* Thu Jun 14 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.23-1 * Thu Jun 14 2018 Dmitry V. Levin <ldv@altlinux.org> - 4.23-1
- v4.22 -> v4.23. - v4.22 -> v4.23.