[PATCH] coredump filter: add mask for 'all' using UINT32_MAX, not UINT64_MAX
authorLuca Boccassi <bluca@debian.org>
Wed, 26 Apr 2023 13:19:33 +0000 (14:19 +0100)
committerCarlos Henrique Lima Melara <charlesmelara@riseup.net>
Thu, 26 Jun 2025 00:44:53 +0000 (21:44 -0300)
The kernel returns ERANGE when UINT64_MAX is passed. Create a mask
and use UINT32_max, which is accepted, so that future bits will also
be set.

Origin: upstream, https://github.com/systemd/systemd/commit/7f3bb8f20dcccaceea8b1ee05f0560b81162037b
Forwarded: not-needed
Last-Update: 2025-07-27

Gbp-Pq: Name fix-stack-overflow-in-coredump-filter-1.patch

src/shared/coredump-util.c
src/shared/coredump-util.h
src/test/test-coredump-util.c

index aaf3e16eff08d917e39e9c16667b80a73cad2a7a..7a448168343b65ddb857e01346eb2ede8a03d99b 100644 (file)
@@ -43,7 +43,7 @@ int coredump_filter_mask_from_string(const char *s, uint64_t *ret) {
                 }
 
                 if (streq(n, "all")) {
-                        m = UINT64_MAX;
+                        m = COREDUMP_FILTER_MASK_ALL;
                         continue;
                 }
 
index a7f3c0e86c838bb7c266b8ba26edaac8ebf7e352..f1d52322685e7641213106f8f87d1d682884a1fb 100644 (file)
@@ -22,6 +22,9 @@ typedef enum CoredumpFilter {
                                       1u << COREDUMP_FILTER_ELF_HEADERS | \
                                       1u << COREDUMP_FILTER_PRIVATE_HUGE)
 
+/* The kernel doesn't like UINT64_MAX and returns ERANGE, use UINT32_MAX to support future new flags */
+#define COREDUMP_FILTER_MASK_ALL UINT32_MAX
+
 const char* coredump_filter_to_string(CoredumpFilter i) _const_;
 CoredumpFilter coredump_filter_from_string(const char *s) _pure_;
 int coredump_filter_mask_from_string(const char *s, uint64_t *ret);
index f9a44b2c6589d843e71b130fef0809de5ee06f03..37c9f44313c62fe1c85d81033a46f3a0d6bf7ea7 100644 (file)
@@ -27,6 +27,8 @@ static void test_coredump_filter_mask_from_string(void) {
         uint64_t f;
         assert_se(coredump_filter_mask_from_string("default", &f) == 0);
         assert_se(f == COREDUMP_FILTER_MASK_DEFAULT);
+        assert_se(coredump_filter_mask_from_string("all", &f) == 0);
+        assert_se(f == COREDUMP_FILTER_MASK_ALL);
 
         assert_se(coredump_filter_mask_from_string("  default\tdefault\tdefault  ", &f) == 0);
         assert_se(f == COREDUMP_FILTER_MASK_DEFAULT);