Proposing SELinux support in strace

Dmitry V. Levin ldv at altlinux.org
Mon Mar 29 00:50:16 UTC 2021


On Fri, Mar 26, 2021 at 10:16:27AM +0100, Renaud Métrich wrote:
> Thanks, fixed. I additionally handled the buffer too small case, just in 
> case ...
> 
> I didn't merge de commits yet, to keep track of changes, will do once 
> ready to merge.

Thanks.  There are several style issues, see below.

[...]
diff --git a/tests/access--secontext.c b/tests/access--secontext.c
new file mode 100644
index 000000000..01fd12e35
--- /dev/null
+++ b/tests/access--secontext.c
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021 The strace developers.
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "tests.h"
+
+#define TEST_SECONTEXT
+
+#ifndef HAVE_SELINUX_RUNTIME
+
+SKIP_MAIN_UNDEFINED("HAVE_SELINUX_RUNTIME")
+
+#else
+
+#include "access.c"
+
+#endif

There are several minor style issues here (and in other similar files),
I'd prefer if it was written this way:

#include "tests.h"

#ifdef HAVE_SELINUX_RUNTIME

# define TEST_SECONTEXT
# include "access.c"

#else

SKIP_MAIN_UNDEFINED("HAVE_SELINUX_RUNTIME")

#endif

[...]
diff --git a/tests/dirfd.c b/tests/dirfd.c
new file mode 100644
index 000000000..517ddea0c
--- /dev/null
+++ b/tests/dirfd.c
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2021 The strace developers.
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "tests.h"
+
+#include <limits.h>
+#include <unistd.h>
+#include <sys/types.h>

I don't think we need to include <sys/types.h> explicitly here.
Note that in man-pages-5.11 a lot of redundant <sys/types.h> were removed.

+#include <dirent.h>
+
+#include "xmalloc.h"
+
+int
+get_dir_fd(const char *dir_path)
+{
+	DIR *dir = NULL;
+	dir = opendir(dir_path);

Let's merge the last two lines.

+	if (dir == NULL)
+		perror_msg_and_fail("opendir");

Let's mention dir_path in the diagnostics.

+	int dfd = dirfd(dir);
+	if (dfd == -1)
+		perror_msg_and_fail("dirfd");
+	return dfd;
+}
+
+int
+get_curdir_fd(char **curdir)
+{
+	int res = get_dir_fd(".");
+
+	if (curdir != NULL) {
+		char *buf = xmalloc(PATH_MAX);
+		ssize_t n = readlink("/proc/self/cwd", buf, PATH_MAX);
+		if (n == -1)
+			perror_msg_and_skip("/proc is not available");

Let's change the last line to
			perror_msg_and_skip("readlink: %s", "/proc/self/cwd");

+		if (n >= PATH_MAX)
+			perror_msg_and_fail("buffer is too small");

There is no errno defined in this case so perror_* is not suitable,
let's change the last line to
			error_msg_and_fail("readlink: %s: %s",
					   "/proc/self/cwd",
					   "symlink value is too long");

[...]
diff --git a/tests/execve--secontext.c.old b/tests/execve--secontext.c.old
new file mode 100644
index 000000000..64c34c7b9
--- /dev/null
+++ b/tests/execve--secontext.c.old
@@ -0,0 +1,42 @@

This looks as a something unintended.

diff --git a/tests/execve--secontext.test b/tests/execve--secontext.test
new file mode 100755
index 000000000..14c9f33de
--- /dev/null
+++ b/tests/execve--secontext.test
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# Check execve syscall decoding.
+#
+# Copyright (c) 2021 The strace developers.
+# All rights reserved.
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog > /dev/null
+run_strace --secontext -eexecve $args > "$EXP"
+
+# Filter out execve() call made by strace.
+grep -F test.execve < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"

This looks very similar to tests/execve.test, could you parametrize it
instead, see e.g. tests/ioctl.test as an example.

diff --git a/tests/execve--secontext_full.test b/tests/execve--secontext_full.test
new file mode 100755
index 000000000..4f5ac8c54
--- /dev/null
+++ b/tests/execve--secontext_full.test
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# Check execve syscall decoding.
+#
+# Copyright (c) 2021 The strace developers.
+# All rights reserved.
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+. "${srcdir=.}/init.sh"
+
+check_prog grep
+run_prog > /dev/null
+run_strace --secontext=full -eexecve $args > "$EXP"
+
+# Filter out execve() call made by strace.
+grep -F test.execve < "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"

Likewise.


-- 
ldv


More information about the Strace-devel mailing list