import UBI strace-5.18-2.1.el8_10

This commit is contained in:
eabdullin 2025-01-28 00:18:31 +00:00
parent 63ee62a810
commit f79ea5d554
9 changed files with 1246 additions and 1 deletions

View File

@ -0,0 +1,102 @@
From c7e0ea6d712eb214dafe7e9eae57661d9a427ea7 Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv@strace.io>
Date: Mon, 28 Oct 2024 08:00:00 +0000
Subject: [PATCH 183/185] syscall: do not use uninitialized parts of struct
ptrace_syscall_info
* src/syscall.c (ptrace_syscall_info_is_entry,
ptrace_syscall_info_is_exit): New functions.
(get_scno): Replace ptrace_syscall_info_is_valid() with
ptrace_syscall_info_is_entry().
(get_error): Replace ptrace_syscall_info_is_valid() with
ptrace_syscall_info_is_exit().
(get_syscall_regs): Fall back to get_regs() if strace_get_syscall_info()
succeeded but couldn't obtain the necessary data.
Resolves: https://github.com/strace/strace/issues/322
---
src/syscall.c | 40 +++++++++++++++++++++++++++++++++++-----
1 file changed, 35 insertions(+), 5 deletions(-)
diff --git a/src/syscall.c b/src/syscall.c
index a6692721a..1f4d86dc1 100644
--- a/src/syscall.c
+++ b/src/syscall.c
@@ -1082,6 +1082,21 @@ ptrace_syscall_info_is_valid(void)
ptrace_sci.op <= PTRACE_SYSCALL_INFO_SECCOMP;
}
+static bool
+ptrace_syscall_info_is_entry(void)
+{
+ return ptrace_get_syscall_info_supported &&
+ (ptrace_sci.op == PTRACE_SYSCALL_INFO_ENTRY ||
+ ptrace_sci.op == PTRACE_SYSCALL_INFO_SECCOMP);
+}
+
+static bool
+ptrace_syscall_info_is_exit(void)
+{
+ return ptrace_get_syscall_info_supported &&
+ ptrace_sci.op == PTRACE_SYSCALL_INFO_EXIT;
+}
+
#define XLAT_MACROS_ONLY
#include "xlat/nt_descriptor_types.h"
#undef XLAT_MACROS_ONLY
@@ -1376,8 +1391,23 @@ get_syscall_regs(struct tcb *tcp)
if (get_regs_error != -1)
return get_regs_error;
- if (ptrace_get_syscall_info_supported)
- return strace_get_syscall_info(tcp) ? 0 : get_regs_error;
+ if (ptrace_get_syscall_info_supported) {
+ if (!strace_get_syscall_info(tcp))
+ return get_regs_error;
+
+ if ((entering(tcp) && ptrace_syscall_info_is_entry()) ||
+ (exiting(tcp) && ptrace_syscall_info_is_exit()))
+ return 0;
+
+ /*
+ * PTRACE_GET_SYSCALL_INFO succeeded but didn't help,
+ * falling back to get_regs().
+ *
+ * This can happen when get_syscall_regs() is called
+ * from startup_tcb() via get_scno().
+ */
+ debug_func_msg("ptrace_sci.op = %d", ptrace_sci.op);
+ }
return get_regs(tcp);
}
@@ -1408,7 +1438,7 @@ get_scno(struct tcb *tcp)
if (get_syscall_regs(tcp) < 0)
return -1;
- if (ptrace_syscall_info_is_valid()) {
+ if (ptrace_syscall_info_is_entry()) {
/* Apply arch-specific workarounds. */
int rc = arch_check_scno(tcp);
if (rc != 1)
@@ -1456,7 +1486,7 @@ get_scno(struct tcb *tcp)
static int
get_syscall_args(struct tcb *tcp)
{
- if (ptrace_syscall_info_is_valid()) {
+ if (ptrace_syscall_info_is_entry()) {
const unsigned int n =
MIN(ARRAY_SIZE(tcp->u_arg),
ARRAY_SIZE(ptrace_sci.entry.args));
@@ -1507,7 +1537,7 @@ get_syscall_result(struct tcb *tcp)
static void
get_error(struct tcb *tcp, const bool check_errno)
{
- if (ptrace_syscall_info_is_valid()) {
+ if (ptrace_syscall_info_is_exit()) {
if (ptrace_sci.exit.is_error) {
tcp->u_rval = -1;
tcp->u_error = -ptrace_sci.exit.rval;
--
2.13.6

View File

@ -0,0 +1,37 @@
From 2048c136ba6edc4282dbc976c499e038d5b60c03 Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv@strace.io>
Date: Mon, 28 Oct 2024 08:00:00 +0000
Subject: [PATCH 184/185] startup_tcb: add a comment
* src/strace.c (startup_tcb): Add a comment explaining why it is safe
to call get_scno().
---
src/strace.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/strace.c b/src/strace.c
index 45ab48c43..1a9d53bc8 100644
--- a/src/strace.c
+++ b/src/strace.c
@@ -3549,8 +3549,16 @@ startup_tcb(struct tcb *tcp)
}
}
- if ((tcp->flags & TCB_GRABBED) && (get_scno(tcp) == 1))
- tcp->s_prev_ent = tcp->s_ent;
+ if (tcp->flags & TCB_GRABBED) {
+ /*
+ * There is no guarantee the state of the tracee is such that
+ * would allow get_scno() to obtain meaningful information.
+ * However, if the tracee is not in a syscall, then the garbage
+ * obtained by get_scno() is not going to be used.
+ */
+ if (get_scno(tcp) == 1)
+ tcp->s_prev_ent = tcp->s_ent;
+ }
if (cflag) {
tcp->atime = tcp->stime;
--
2.13.6

View File

@ -0,0 +1,129 @@
From 3bf08cbb388a89014252bdfe5143324bdaa4dc46 Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv@strace.io>
Date: Mon, 28 Oct 2024 08:00:00 +0000
Subject: [PATCH 185/185] tests: add another test of restart_syscall decoding
* tests/restart_syscall-p.test: New test.
* tests/restart_syscall-p.expected: New file.
* tests/Makefile.am (DECODER_TESTS): Add restart_syscall-p.test.
(check_DATA): Add restart_syscall-p.expected.
---
tests/Makefile.am | 2 ++
tests/restart_syscall-p.expected | 2 ++
tests/restart_syscall-p.test | 20 ++++++++++++++++++++
3 files changed, 24 insertions(+)
create mode 100644 tests/restart_syscall-p.expected
create mode 100755 tests/restart_syscall-p.test
Index: strace-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

@ -0,0 +1,108 @@
From e9d784ecd3ef0c5af9f8c74a830e797d773d71cb Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv@strace.io>
Date: Sun, 21 Apr 2024 08:00:00 +0000
Subject: [PATCH] tests: workaround net-yy-inet* for new kernels
Starting with Linux kernel commit v6.8-rc1~131^2~223, NETLINK_INET_DIAG
works also for bound-only sockets. As there is no easy way to tell
whether the running kernel contains that commit, the test cannot easily
predict the kernel behavior in case of sockets in bound-only state.
Workaround this by skipping the corresponding part of the test.
* tests/net-yy-inet.test: Filter out listen() calls.
* tests/net-yy-inet.c (main): Do not print expected output for listen()
syscall.
Resolves: https://github.com/strace/strace/issues/299
---
tests/net-yy-inet.c | 2 --
tests/net-yy-inet.test | 6 +++++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/tests/net-yy-inet.c b/tests/net-yy-inet.c
index 1a83548bf..7f8e05783 100644
--- a/tests/net-yy-inet.c
+++ b/tests/net-yy-inet.c
@@ -63,8 +63,6 @@ main(void)
if (listen(listen_fd, 1))
perror_msg_and_skip("listen");
- printf("listen(%d<" TCP_STR ":[%lu]>, 1) = 0\n",
- listen_fd, listen_inode);
memset(listen_sa, 0, sizeof(addr));
*len = sizeof(addr);
diff --git a/tests/net-yy-inet.test b/tests/net-yy-inet.test
index 9a3f851bf..d45414bcb 100755
--- a/tests/net-yy-inet.test
+++ b/tests/net-yy-inet.test
@@ -17,5 +17,9 @@ run_prog > /dev/null
run_strace -a22 -yy -eclose,network $args > "$EXP"
# Filter out close() calls made by ld.so and libc.
-sed -n '/socket/,$p' < "$LOG" > "$OUT"
+#
+# Filter out listen() call as we cannot easily predict the kernel
+# behaviour because there is no easy way to tell whether the Linux kernel
+# contains commit v6.8-rc1~131^2~223.
+sed -n '/^listen/d;/^socket/,$p' < "$LOG" > "$OUT"
match_diff "$OUT" "$EXP"
diff --git a/tests-m32/net-yy-inet.c b/tests-m32/net-yy-inet.c
index 1a83548bf..7f8e05783 100644
--- a/tests-m32/net-yy-inet.c
+++ b/tests-m32/net-yy-inet.c
@@ -63,8 +63,6 @@ main(void)
if (listen(listen_fd, 1))
perror_msg_and_skip("listen");
- printf("listen(%d<" TCP_STR ":[%lu]>, 1) = 0\n",
- listen_fd, listen_inode);
memset(listen_sa, 0, sizeof(addr));
*len = sizeof(addr);
diff --git a/tests-m32/net-yy-inet.test b/tests-m32/net-yy-inet.test
index 9a3f851bf..d45414bcb 100755
--- a/tests-m32/net-yy-inet.test
+++ b/tests-m32/net-yy-inet.test
@@ -17,5 +17,9 @@ run_prog > /dev/null
run_strace -a22 -yy -eclose,network $args > "$EXP"
# Filter out close() calls made by ld.so and libc.
-sed -n '/socket/,$p' < "$LOG" > "$OUT"
+#
+# Filter out listen() call as we cannot easily predict the kernel
+# behaviour because there is no easy way to tell whether the Linux kernel
+# contains commit v6.8-rc1~131^2~223.
+sed -n '/^listen/d;/^socket/,$p' < "$LOG" > "$OUT"
match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/net-yy-inet.c b/tests-mx32/net-yy-inet.c
index 1a83548bf..7f8e05783 100644
--- a/tests-mx32/net-yy-inet.c
+++ b/tests-mx32/net-yy-inet.c
@@ -63,8 +63,6 @@ main(void)
if (listen(listen_fd, 1))
perror_msg_and_skip("listen");
- printf("listen(%d<" TCP_STR ":[%lu]>, 1) = 0\n",
- listen_fd, listen_inode);
memset(listen_sa, 0, sizeof(addr));
*len = sizeof(addr);
diff --git a/tests-mx32/net-yy-inet.test b/tests-mx32/net-yy-inet.test
index 9a3f851bf..d45414bcb 100755
--- a/tests-mx32/net-yy-inet.test
+++ b/tests-mx32/net-yy-inet.test
@@ -17,5 +17,9 @@ run_prog > /dev/null
run_strace -a22 -yy -eclose,network $args > "$EXP"
# Filter out close() calls made by ld.so and libc.
-sed -n '/socket/,$p' < "$LOG" > "$OUT"
+#
+# Filter out listen() call as we cannot easily predict the kernel
+# behaviour because there is no easy way to tell whether the Linux kernel
+# contains commit v6.8-rc1~131^2~223.
+sed -n '/^listen/d;/^socket/,$p' < "$LOG" > "$OUT"
match_diff "$OUT" "$EXP"
--
2.13.6

View File

@ -0,0 +1,530 @@
From 660186018897b386fb05d7951aec57a81211a1a4 Mon Sep 17 00:00:00 2001
From: Eugene Syromyatnikov <evgsyr@gmail.com>
Date: Wed, 21 Aug 2024 15:32:42 +0200
Subject: [PATCH] tests: avoid linkat--secontext_mismatch failures on
setfilecon errors
linkat--secontext_mismatch can fail if setfilecon cannot update SELinux
context (for example, that happens when the test is run under
an unprivileged user and tries to change the type to unconfined_t).
Avoid it by actually checking the return code and skipping the test
if there are errors reported by reset_secontext_file
or update_secontext_field calls.
* tests/secontext.h: Include <errno.h>.
(reset_secontext_file, update_secontext_field): Change the return type
from void to int.
[!(TEST_SECONTEXT && HAVE_SELINUX_RUNTIME)] (reset_secontext_file,
update_secontext_field): Return -ENOSYS.
* tests/secontext.c: (reset_secontext_file): Change the return type
to int; save the setfilecon return value to ret and reset it to -errno
if the latter is non-zero; return ret.
(update_secontext_field): Change the return type to int; return -1
if ctx is NULL; save the setfilecon return value to ret and reset
it to -errno if the latter is non-zero; return ret.
* tests/linkat.c: Include "xlat.h".
(secontext_types_data, secontext_types): New constants.
(mangle_secontext_field): Store the new field value in the new variable;
store the update_secontext_field return value to the ret variable, error
and skip if it is non-zero.
(main): Error and skip if reset_secontext_file returns non-zero.
Reported-by: Edjunior Machado <emachado@redhat.com>
---
tests/linkat.c | 34 ++++++++++++++++++++++++++++++----
tests/secontext.c | 19 ++++++++++++++-----
tests/secontext.h | 14 +++++++++-----
3 files changed, 53 insertions(+), 14 deletions(-)
diff --git a/tests/linkat.c b/tests/linkat.c
index 1d0ee3c9f..832392ca0 100644
--- a/tests/linkat.c
+++ b/tests/linkat.c
@@ -19,8 +19,20 @@
#include <string.h>
#include "secontext.h"
+#include "xlat.h"
#include "xmalloc.h"
+struct xlat_data secontext_types_data[] = {
+ [SECONTEXT_USER] = XLAT_PAIR(SECONTEXT_USER, "user"),
+ [SECONTEXT_ROLE] = XLAT_PAIR(SECONTEXT_ROLE, "role"),
+ [SECONTEXT_TYPE] = XLAT_PAIR(SECONTEXT_TYPE, "type"),
+};
+struct xlat secontext_types = {
+ .data = secontext_types_data,
+ .size = ARRAY_SIZE(secontext_types_data),
+ .type = XT_INDEXED,
+};
+
static void
mangle_secontext_field(const char *path, enum secontext_field field,
const char *new_val, const char *fallback_val)
@@ -29,10 +41,18 @@ mangle_secontext_field(const char *path, enum secontext_field field,
if (!orig)
return;
- update_secontext_field(path, field,
- strcmp(new_val, orig) ? new_val : fallback_val);
+ const char *new = strcmp(new_val, orig) ? new_val : fallback_val;
free(orig);
+
+ int ret = update_secontext_field(path, field, new);
+ if (ret) {
+ error_msg_and_skip("Failed to mangle secontext %s for "
+ "'%s' to %s: %d",
+ sprintxval_abbrev(&secontext_types, field,
+ "SECONTEXT_???"),
+ path, new, ret);
+ }
}
int
@@ -103,8 +123,14 @@ main(void)
if (close(fd_sample_2))
perror_msg_and_fail("close");
- if (*sample_1_secontext && strstr(sample_1_secontext, "!!"))
- reset_secontext_file(sample_1);
+ if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) {
+ int ret;
+ if ((ret = reset_secontext_file(sample_1))) {
+ errno = -ret;
+ perror_msg_and_skip("Reset secontext for '%s'",
+ sample_1);
+ }
+ }
free(sample_1_secontext);
diff --git a/tests/secontext.c b/tests/secontext.c
index 84c682869..a0463c467 100644
--- a/tests/secontext.c
+++ b/tests/secontext.c
@@ -284,14 +284,19 @@ secontext_short_pid(pid_t pid)
return FORMAT_SPACE_AFTER(raw_secontext_short_pid(pid));
}
-void reset_secontext_file(const char *file)
+int
+reset_secontext_file(const char *file)
{
char *proper_ctx = raw_expected_secontext_full_file(file);
- (void) setfilecon(file, proper_ctx);
+ int ret = setfilecon(file, proper_ctx);
+ if (ret && errno)
+ ret = -errno;
free(proper_ctx);
+
+ return ret;
}
-void
+int
update_secontext_field(const char *file, enum secontext_field field,
const char *newvalue)
{
@@ -300,7 +305,7 @@ update_secontext_field(const char *file, enum secontext_field field,
char *ctx = raw_secontext_full_file(file);
if (ctx == NULL)
- return;
+ return -1;
char *saveptr = NULL;
char *token;
@@ -319,11 +324,15 @@ update_secontext_field(const char *file, enum secontext_field field,
char *newcontext = xasprintf("%s:%s:%s:%s", split[0], split[1],
split[2], split[3]);
- (void) setfilecon(file, newcontext);
+ int ret = setfilecon(file, newcontext);
+ if (ret && errno)
+ ret = -errno;
free(newcontext);
free(ctx);
errno = saved_errno;
+
+ return ret;
}
#endif /* HAVE_SELINUX_RUNTIME */
diff --git a/tests/secontext.h b/tests/secontext.h
index b5bba2272..dab33e6a5 100644
--- a/tests/secontext.h
+++ b/tests/secontext.h
@@ -7,6 +7,8 @@
#include "tests.h"
#include "xmalloc.h"
+
+#include <errno.h>
#include <unistd.h>
char *secontext_full_fd(int) ATTRIBUTE_MALLOC;
@@ -35,10 +37,10 @@ char *get_secontext_field(const char *full_context, enum secontext_field field);
char *get_secontext_field_fd(int fd, enum secontext_field field);
char *get_secontext_field_file(const char *file, enum secontext_field field);
-void reset_secontext_file(const char *file);
+int reset_secontext_file(const char *file);
-void update_secontext_field(const char *file, enum secontext_field field,
- const char *newvalue);
+int update_secontext_field(const char *file, enum secontext_field field,
+ const char *newvalue);
# ifdef PRINT_SECONTEXT_FULL
@@ -81,15 +83,17 @@ get_secontext_field_file(const char *file, enum secontext_field field)
return NULL;
}
-static inline void
+static inline int
reset_secontext_file(const char *file)
{
+ return -ENOSYS;
}
-static inline void
+static inline int
update_secontext_field(const char *file, enum secontext_field field,
const char *newvalue)
{
+ return -ENOSYS;
}
# define SECONTEXT_FD(fd) xstrdup("")
diff --git a/tests-m32/linkat.c b/tests-m32/linkat.c
index 1d0ee3c9f..832392ca0 100644
--- a/tests-m32/linkat.c
+++ b/tests-m32/linkat.c
@@ -19,8 +19,20 @@
#include <string.h>
#include "secontext.h"
+#include "xlat.h"
#include "xmalloc.h"
+struct xlat_data secontext_types_data[] = {
+ [SECONTEXT_USER] = XLAT_PAIR(SECONTEXT_USER, "user"),
+ [SECONTEXT_ROLE] = XLAT_PAIR(SECONTEXT_ROLE, "role"),
+ [SECONTEXT_TYPE] = XLAT_PAIR(SECONTEXT_TYPE, "type"),
+};
+struct xlat secontext_types = {
+ .data = secontext_types_data,
+ .size = ARRAY_SIZE(secontext_types_data),
+ .type = XT_INDEXED,
+};
+
static void
mangle_secontext_field(const char *path, enum secontext_field field,
const char *new_val, const char *fallback_val)
@@ -29,10 +41,18 @@ mangle_secontext_field(const char *path, enum secontext_field field,
if (!orig)
return;
- update_secontext_field(path, field,
- strcmp(new_val, orig) ? new_val : fallback_val);
+ const char *new = strcmp(new_val, orig) ? new_val : fallback_val;
free(orig);
+
+ int ret = update_secontext_field(path, field, new);
+ if (ret) {
+ error_msg_and_skip("Failed to mangle secontext %s for "
+ "'%s' to %s: %d",
+ sprintxval_abbrev(&secontext_types, field,
+ "SECONTEXT_???"),
+ path, new, ret);
+ }
}
int
@@ -103,8 +123,14 @@ main(void)
if (close(fd_sample_2))
perror_msg_and_fail("close");
- if (*sample_1_secontext && strstr(sample_1_secontext, "!!"))
- reset_secontext_file(sample_1);
+ if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) {
+ int ret;
+ if ((ret = reset_secontext_file(sample_1))) {
+ errno = -ret;
+ perror_msg_and_skip("Reset secontext for '%s'",
+ sample_1);
+ }
+ }
free(sample_1_secontext);
diff --git a/tests-m32/secontext.c b/tests-m32/secontext.c
index 84c682869..a0463c467 100644
--- a/tests-m32/secontext.c
+++ b/tests-m32/secontext.c
@@ -284,14 +284,19 @@ secontext_short_pid(pid_t pid)
return FORMAT_SPACE_AFTER(raw_secontext_short_pid(pid));
}
-void reset_secontext_file(const char *file)
+int
+reset_secontext_file(const char *file)
{
char *proper_ctx = raw_expected_secontext_full_file(file);
- (void) setfilecon(file, proper_ctx);
+ int ret = setfilecon(file, proper_ctx);
+ if (ret && errno)
+ ret = -errno;
free(proper_ctx);
+
+ return ret;
}
-void
+int
update_secontext_field(const char *file, enum secontext_field field,
const char *newvalue)
{
@@ -300,7 +305,7 @@ update_secontext_field(const char *file, enum secontext_field field,
char *ctx = raw_secontext_full_file(file);
if (ctx == NULL)
- return;
+ return -1;
char *saveptr = NULL;
char *token;
@@ -319,11 +324,15 @@ update_secontext_field(const char *file, enum secontext_field field,
char *newcontext = xasprintf("%s:%s:%s:%s", split[0], split[1],
split[2], split[3]);
- (void) setfilecon(file, newcontext);
+ int ret = setfilecon(file, newcontext);
+ if (ret && errno)
+ ret = -errno;
free(newcontext);
free(ctx);
errno = saved_errno;
+
+ return ret;
}
#endif /* HAVE_SELINUX_RUNTIME */
diff --git a/tests-m32/secontext.h b/tests-m32/secontext.h
index b5bba2272..dab33e6a5 100644
--- a/tests-m32/secontext.h
+++ b/tests-m32/secontext.h
@@ -7,6 +7,8 @@
#include "tests.h"
#include "xmalloc.h"
+
+#include <errno.h>
#include <unistd.h>
char *secontext_full_fd(int) ATTRIBUTE_MALLOC;
@@ -35,10 +37,10 @@ char *get_secontext_field(const char *full_context, enum secontext_field field);
char *get_secontext_field_fd(int fd, enum secontext_field field);
char *get_secontext_field_file(const char *file, enum secontext_field field);
-void reset_secontext_file(const char *file);
+int reset_secontext_file(const char *file);
-void update_secontext_field(const char *file, enum secontext_field field,
- const char *newvalue);
+int update_secontext_field(const char *file, enum secontext_field field,
+ const char *newvalue);
# ifdef PRINT_SECONTEXT_FULL
@@ -81,15 +83,17 @@ get_secontext_field_file(const char *file, enum secontext_field field)
return NULL;
}
-static inline void
+static inline int
reset_secontext_file(const char *file)
{
+ return -ENOSYS;
}
-static inline void
+static inline int
update_secontext_field(const char *file, enum secontext_field field,
const char *newvalue)
{
+ return -ENOSYS;
}
# define SECONTEXT_FD(fd) xstrdup("")
diff --git a/tests-mx32/linkat.c b/tests-mx32/linkat.c
index 1d0ee3c9f..832392ca0 100644
--- a/tests-mx32/linkat.c
+++ b/tests-mx32/linkat.c
@@ -19,8 +19,20 @@
#include <string.h>
#include "secontext.h"
+#include "xlat.h"
#include "xmalloc.h"
+struct xlat_data secontext_types_data[] = {
+ [SECONTEXT_USER] = XLAT_PAIR(SECONTEXT_USER, "user"),
+ [SECONTEXT_ROLE] = XLAT_PAIR(SECONTEXT_ROLE, "role"),
+ [SECONTEXT_TYPE] = XLAT_PAIR(SECONTEXT_TYPE, "type"),
+};
+struct xlat secontext_types = {
+ .data = secontext_types_data,
+ .size = ARRAY_SIZE(secontext_types_data),
+ .type = XT_INDEXED,
+};
+
static void
mangle_secontext_field(const char *path, enum secontext_field field,
const char *new_val, const char *fallback_val)
@@ -29,10 +41,18 @@ mangle_secontext_field(const char *path, enum secontext_field field,
if (!orig)
return;
- update_secontext_field(path, field,
- strcmp(new_val, orig) ? new_val : fallback_val);
+ const char *new = strcmp(new_val, orig) ? new_val : fallback_val;
free(orig);
+
+ int ret = update_secontext_field(path, field, new);
+ if (ret) {
+ error_msg_and_skip("Failed to mangle secontext %s for "
+ "'%s' to %s: %d",
+ sprintxval_abbrev(&secontext_types, field,
+ "SECONTEXT_???"),
+ path, new, ret);
+ }
}
int
@@ -103,8 +123,14 @@ main(void)
if (close(fd_sample_2))
perror_msg_and_fail("close");
- if (*sample_1_secontext && strstr(sample_1_secontext, "!!"))
- reset_secontext_file(sample_1);
+ if (*sample_1_secontext && strstr(sample_1_secontext, "!!")) {
+ int ret;
+ if ((ret = reset_secontext_file(sample_1))) {
+ errno = -ret;
+ perror_msg_and_skip("Reset secontext for '%s'",
+ sample_1);
+ }
+ }
free(sample_1_secontext);
diff --git a/tests-mx32/secontext.c b/tests-mx32/secontext.c
index 84c682869..a0463c467 100644
--- a/tests-mx32/secontext.c
+++ b/tests-mx32/secontext.c
@@ -284,14 +284,19 @@ secontext_short_pid(pid_t pid)
return FORMAT_SPACE_AFTER(raw_secontext_short_pid(pid));
}
-void reset_secontext_file(const char *file)
+int
+reset_secontext_file(const char *file)
{
char *proper_ctx = raw_expected_secontext_full_file(file);
- (void) setfilecon(file, proper_ctx);
+ int ret = setfilecon(file, proper_ctx);
+ if (ret && errno)
+ ret = -errno;
free(proper_ctx);
+
+ return ret;
}
-void
+int
update_secontext_field(const char *file, enum secontext_field field,
const char *newvalue)
{
@@ -300,7 +305,7 @@ update_secontext_field(const char *file, enum secontext_field field,
char *ctx = raw_secontext_full_file(file);
if (ctx == NULL)
- return;
+ return -1;
char *saveptr = NULL;
char *token;
@@ -319,11 +324,15 @@ update_secontext_field(const char *file, enum secontext_field field,
char *newcontext = xasprintf("%s:%s:%s:%s", split[0], split[1],
split[2], split[3]);
- (void) setfilecon(file, newcontext);
+ int ret = setfilecon(file, newcontext);
+ if (ret && errno)
+ ret = -errno;
free(newcontext);
free(ctx);
errno = saved_errno;
+
+ return ret;
}
#endif /* HAVE_SELINUX_RUNTIME */
diff --git a/tests-mx32/secontext.h b/tests-mx32/secontext.h
index b5bba2272..dab33e6a5 100644
--- a/tests-mx32/secontext.h
+++ b/tests-mx32/secontext.h
@@ -7,6 +7,8 @@
#include "tests.h"
#include "xmalloc.h"
+
+#include <errno.h>
#include <unistd.h>
char *secontext_full_fd(int) ATTRIBUTE_MALLOC;
@@ -35,10 +37,10 @@ char *get_secontext_field(const char *full_context, enum secontext_field field);
char *get_secontext_field_fd(int fd, enum secontext_field field);
char *get_secontext_field_file(const char *file, enum secontext_field field);
-void reset_secontext_file(const char *file);
+int reset_secontext_file(const char *file);
-void update_secontext_field(const char *file, enum secontext_field field,
- const char *newvalue);
+int update_secontext_field(const char *file, enum secontext_field field,
+ const char *newvalue);
# ifdef PRINT_SECONTEXT_FULL
@@ -81,15 +83,17 @@ get_secontext_field_file(const char *file, enum secontext_field field)
return NULL;
}
-static inline void
+static inline int
reset_secontext_file(const char *file)
{
+ return -ENOSYS;
}
-static inline void
+static inline int
update_secontext_field(const char *file, enum secontext_field field,
const char *newvalue)
{
+ return -ENOSYS;
}
# define SECONTEXT_FD(fd) xstrdup("")
--
2.13.6

View File

@ -0,0 +1,76 @@
From d08dfdebb381427cbd8565994868926ba9bc4b40 Mon Sep 17 00:00:00 2001
From: Eugene Syromyatnikov <evgsyr@gmail.com>
Date: Wed, 30 Oct 2024 15:16:47 +0100
Subject: [PATCH 188/190] linux/s390/get_scno.c: use NT_S390_SYSTEM_CALL if
gprs[2] is clobbered
The way the syscall number is retrieved currently relies on the kernel
propagating it properly into gprs[2], which is not however always the case;
apart of the situation where scno > NR_syscalls, there is also an issue
of inspecting it during syscall restart (as it happens on attach, for
example), when it is already clobbered by a ERESTART* errno. Luckily
for strace, this issue has been already foreseen by the kernel
developers, and support for retrieving syscall number on s390
via a separate ptrace regset has been added by the Linux commit
v3.2-rc1~109^2~34; 13 years later, it is time for it to fulfill
its purpose and finally get utilised.
* src/linux/s390/get_scno.c (arch_get_scno): Try to retrieve the syscall
number by querying NT_S390_SYSTEM_CALL regset if gprs[2] contains an errno.
Complements: v6.11-21-gc7e0ea6d712e "syscall: do not use uninitialized parts of struct ptrace_syscall_info"
---
src/linux/s390/get_scno.c | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/src/linux/s390/get_scno.c b/src/linux/s390/get_scno.c
index f0863e26d701..fdc94d025280 100644
--- a/src/linux/s390/get_scno.c
+++ b/src/linux/s390/get_scno.c
@@ -9,11 +9,41 @@
# define ARCH_REGSET s390_regset
#endif
+#ifndef NT_ARM_SYSTEM_CALL
+# define NT_S390_SYSTEM_CALL 0x307
+#endif
+
/* Return codes: 1 - ok, 0 - ignore, other - error. */
static int
arch_get_scno(struct tcb *tcp)
{
- tcp->scno = ARCH_REGSET.gprs[2] ?
- ARCH_REGSET.gprs[2] : ARCH_REGSET.gprs[1];
+ typeof(ARCH_REGSET.gprs[2]) gpr2 = ARCH_REGSET.gprs[2];
+
+ if (gpr2 > (typeof(gpr2)) (-4095ULL)) {
+ /*
+ * We are in restart_syscall and gprs[2] is clobbered
+ * by the errno, using pulling the syscall number
+ * via NT_S390_SYSTEM_CALL regset.
+ */
+ unsigned int scno;
+ const struct iovec io = {
+ .iov_base = &scno,
+ .iov_len = sizeof(scno)
+ };
+ int rc = ptrace(PTRACE_GETREGSET, tcp->pid, NT_S390_SYSTEM_CALL,
+ &io);
+ if (rc && errno != ESRCH) {
+ perror_func_msg("NT_S390_SYSTEM_CALL pid:%d", tcp->pid);
+ return -1;
+ }
+ /*
+ * The ptrace call returns thread.system_call, that stores raw
+ * int_code, and the syscall number part is the lowest 16 bits
+ * of it.
+ */
+ tcp->scno = scno & 0xffff;
+ } else {
+ tcp->scno = gpr2 ?: ARCH_REGSET.gprs[1];
+ }
return 1;
}
--
2.28.0

View File

@ -0,0 +1,89 @@
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

@ -0,0 +1,130 @@
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,7 +1,7 @@
Summary: Tracks and displays system calls associated with a running process
Name: strace
Version: 5.18
Release: 2%{?dist}
Release: 2.1%{?dist}
# The test suite is GPLv2+, all the rest is LGPLv2.1+.
License: LGPL-2.1+ and GPL-2.0+
Group: Development/Debuggers
@ -280,6 +280,33 @@ Patch181: 0181-secontext-fix-expected-SELinux-context-check-for-unl.patch
# v5.18-21-g5338636 "tests/bpf: fix sloppy low FD number usage"
Patch182: 0182-tests-bpf-fix-sloppy-low-FD-number-usage.patch
## https://issues.redhat.com/browse/RHEL-8570
# v6.11-21-gc7e0ea6d7 "syscall: do not use uninitialized parts of struct ptrace_syscall_info"
Patch183: 0183-syscall-do-not-use-uninitialized-parts-of-struct-ptr.patch
# v6.11-22-g2048c136b "startup_tcb: add a comment"
Patch184: 0184-startup_tcb-add-a-comment.patch
# v6.11-23-g3bf08cbb3 "tests: add another test of restart_syscall decoding"
Patch185: 0185-tests-add-another-test-of-restart_syscall-decoding.patch
## kernel-5.14.0-417.el9~9 (RHEL 9.4+) has v6.8-rc1~131^2~223 "tcp: Dump bound-only sockets in inet_diag."
# v6.9~27 "tests: workaround net-yy-inet* for new kernels"
Patch186: 0186-tests-workaround-net-yy-inet-for-new-kernels.patch
## Update linkat--secontext_mismatch test to fix the failures reported by QE
# v6.11~4 "tests: avoid linkat--secontext_mismatch failures on setfilecon errors"
Patch187: 0187-tests-avoid-linkat-secontext_mismatch-failures-on-se.patch
# "linux/s390/get_scno.c: use NT_S390_SYSTEM_CALL if gprs[2] is clobbered"
Patch188: 0188-linux-s390-get_scno.c-use-NT_S390_SYSTEM_CALL-if-gpr.patch
### Skip these two patches present in RHEL 9/10 as sockopt-sol_socket test doesn't exist in strace-5.18
## "tests: move k_setsockopt definition into a separate"
#Patch189: 0189-tests-move-k_setsockopt-definition-into-a-separate-f.patch
## "tests/sockopt-timestamp.c: use k_getsockopt and k_setsockopt"
#Patch190: 0190-tests-sockopt-timestamp.c-use-k_getsockopt-and-k_set.patch
## Fix for prctl-sve.gen test failure on aarch64
# v5.19~14 "prctl: improve PR_SVE_[SG]ET_VL decoding"
Patch191: 0191-prctl-improve-PR_SVE_-SG-ET_VL-decoding.patch
# v6.3~32 "tests/prctl-sve: fix prctl(PR_SVE_GET_VL) return expected value printing"
Patch192: 0192-tests-prctl-sve-fix-prctl-PR_SVE_GET_VL-return-expec.patch
### Wire up rseq and kexec_file_load in order to avoid kexec_file_load
### test failure on aarch64. Addresses https://bugzilla.redhat.com/1676045
### ("strace: FTBFS in Fedora rawhide/f30").
@ -448,6 +475,18 @@ received by a process.
%patch181 -p1
%patch182 -p1
%patch183 -p1
%patch184 -p1
%patch185 -p1
%patch186 -p1
%patch187 -p1
%patch188 -p1
#%patch189 -p1
#%patch190 -p1
%patch191 -p1
%patch192 -p1
#%patch1000 -p1
#%patch1001 -p1
@ -533,6 +572,11 @@ echo 'END OF TEST SUITE INFORMATION'
%{_mandir}/man1/*
%changelog
* Tue Oct 29 2024 Eugene Syromiatnikov <esyr@redhat.com> - 5.18-2.1
- Fix incorrect syscall name reporting in restart_syscall() on attach when
PTRACE_GET_SYSCALL_INFO is in use (RHEL-8570).
- Update net-yy-inet*, linkat--secontext_mismatch, and prctl-sve tests.
* Mon Jul 11 2022 Eugene Syromiatnikov <esyr@redhat.com> - 5.18-2
- Fix the issues reported by covscan (#2103068).
- Fix SELinux context matching for the deleted paths (#2087693).