summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorChristian Brauner <brauner@kernel.org>2025-06-16 17:01:31 +0200
committerChristian Brauner <brauner@kernel.org>2025-07-07 12:24:51 +0200
commita6ed5691b2428cc578908ee050d5d4908a6e065e (patch)
treeb4d2f6d26528178e5fa083b412624419c9191500 /tools
parente04f97c8be29523bae2576fceee84a4b030406fb (diff)
parentda9029b47d790675dcd82a6d9e332bc41e1a17f1 (diff)
Merge patch series "coredump: further cleanups"
Christian Brauner <brauner@kernel.org> says: Continue reworking the coredump code so it's easier to follow and modify in the future. * Each method is moved into a separate helper. * The cleanup code is simplified and unified. * Entangle the dependency between the pipe coredump rate limiting and the common exit path. It's likely that there'll be more. * patches from https://lore.kernel.org/20250612-work-coredump-massage-v1-0-315c0c34ba94@kernel.org: (24 commits) coredump: add coredump_skip() helper coredump: avoid pointless variable coredump: order auto cleanup variables at the top coredump: add coredump_cleanup() coredump: auto cleanup prepare_creds() cred: add auto cleanup method coredump: directly return coredump: auto cleanup argv coredump: add coredump_write() coredump: use a single helper for the socket coredump: move pipe specific file check into coredump_pipe() coredump: split pipe coredumping into coredump_pipe() coredump: move core_pipe_count to global variable coredump: prepare to simplify exit paths coredump: split file coredumping into coredump_file() coredump: rename do_coredump() to vfs_coredump() selftests/coredump: make sure invalid paths are rejected coredump: validate socket path in coredump_parse() coredump: don't allow ".." in coredump socket path fs: move name_contains_dotdot() to header ... Link: https://lore.kernel.org/20250612-work-coredump-massage-v1-0-315c0c34ba94@kernel.org Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/testing/selftests/coredump/stackdump_test.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/tools/testing/selftests/coredump/stackdump_test.c b/tools/testing/selftests/coredump/stackdump_test.c
index 9a789156f27e..a4ac80bb1003 100644
--- a/tools/testing/selftests/coredump/stackdump_test.c
+++ b/tools/testing/selftests/coredump/stackdump_test.c
@@ -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