From 7f3bb8f20dcccaceea8b1ee05f0560b81162037b Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Wed, 26 Apr 2023 14:19:33 +0100 Subject: [PATCH] coredump filter: add mask for 'all' using UINT32_MAX, not UINT64_MAX 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 | 2 +- src/shared/coredump-util.h | 3 +++ src/test/test-coredump-util.c | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/shared/coredump-util.c b/src/shared/coredump-util.c index dc137317a9..805503f366 100644 --- a/src/shared/coredump-util.c +++ b/src/shared/coredump-util.c @@ -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; } diff --git a/src/shared/coredump-util.h b/src/shared/coredump-util.h index 99dbfde730..4f54bb94c0 100644 --- a/src/shared/coredump-util.h +++ b/src/shared/coredump-util.h @@ -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); diff --git a/src/test/test-coredump-util.c b/src/test/test-coredump-util.c index 7a41e0fc29..178e89389b 100644 --- a/src/test/test-coredump-util.c +++ b/src/test/test-coredump-util.c @@ -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); -- 2.25.1