]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests/coredump: make sure invalid paths are rejected
authorChristian Brauner <brauner@kernel.org>
Thu, 12 Jun 2025 13:25:22 +0000 (15:25 +0200)
committerChristian Brauner <brauner@kernel.org>
Mon, 16 Jun 2025 15:01:22 +0000 (17:01 +0200)
Link: https://lore.kernel.org/20250612-work-coredump-massage-v1-8-315c0c34ba94@kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
tools/testing/selftests/coredump/stackdump_test.c

index 9a789156f27ea30eca88c2abf8c427bb9fcb0105..a4ac80bb10038d7f9ab27b56da6a79f5cc59e8a6 100644 (file)
@@ -241,16 +241,19 @@ out:
 
 static bool set_core_pattern(const char *pattern)
 {
-       FILE *file;
-       int ret;
+       int fd;
+       ssize_t ret;
 
-       file = fopen("/proc/sys/kernel/core_pattern", "w");
-       if (!file)
+       fd = open("/proc/sys/kernel/core_pattern", O_WRONLY | O_CLOEXEC);
+       if (fd < 0)
                return false;
 
-       ret = fprintf(file, "%s", pattern);
-       fclose(file);
+       ret = write(fd, pattern, strlen(pattern));
+       close(fd);
+       if (ret < 0)
+               return false;
 
+       fprintf(stderr, "Set core_pattern to '%s' | %zu == %zu\n", pattern, ret, strlen(pattern));
        return ret == strlen(pattern);
 }
 
@@ -1804,4 +1807,21 @@ out:
        wait_and_check_coredump_server(pid_coredump_server, _metadata, self);
 }
 
+TEST_F(coredump, socket_invalid_paths)
+{
+       ASSERT_FALSE(set_core_pattern("@ /tmp/coredump.socket"));
+       ASSERT_FALSE(set_core_pattern("@/tmp/../coredump.socket"));
+       ASSERT_FALSE(set_core_pattern("@../coredump.socket"));
+       ASSERT_FALSE(set_core_pattern("@/tmp/coredump.socket/.."));
+       ASSERT_FALSE(set_core_pattern("@.."));
+
+       ASSERT_FALSE(set_core_pattern("@@ /tmp/coredump.socket"));
+       ASSERT_FALSE(set_core_pattern("@@/tmp/../coredump.socket"));
+       ASSERT_FALSE(set_core_pattern("@@../coredump.socket"));
+       ASSERT_FALSE(set_core_pattern("@@/tmp/coredump.socket/.."));
+       ASSERT_FALSE(set_core_pattern("@@.."));
+
+       ASSERT_FALSE(set_core_pattern("@@@/tmp/coredump.socket"));
+}
+
 TEST_HARNESS_MAIN