]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
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)
committerLuca Boccassi <bluca@debian.org>
Wed, 26 Apr 2023 15:12:00 +0000 (16:12 +0100)
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.

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

index dc137317a90449edb30ee43d15bccf97f1a05be5..805503f366a4a7ace21718bbfa2ae07ecba546f6 100644 (file)
@@ -46,7 +46,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 99dbfde730ecd26eecad9974368a3f06a5c36dde..4f54bb94c003708db65a03ab0e83b1a7cca8b88f 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 7a41e0fc2949b1248d453838d401e8f0616df395..178e89389b1ba9c2bca2e2dc585a9fe6c5d0ebee 100644 (file)
@@ -28,6 +28,8 @@ TEST(coredump_filter_mask_from_string) {
         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);