1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 #include "coredump-util.h"
4 #include "extract-word.h"
6 #include "string-table.h"
8 static const char *const coredump_filter_table
[_COREDUMP_FILTER_MAX
] = {
9 [COREDUMP_FILTER_PRIVATE_ANONYMOUS
] = "private-anonymous",
10 [COREDUMP_FILTER_SHARED_ANONYMOUS
] = "shared-anonymous",
11 [COREDUMP_FILTER_PRIVATE_FILE_BACKED
] = "private-file-backed",
12 [COREDUMP_FILTER_SHARED_FILE_BACKED
] = "shared-file-backed",
13 [COREDUMP_FILTER_ELF_HEADERS
] = "elf-headers",
14 [COREDUMP_FILTER_PRIVATE_HUGE
] = "private-huge",
15 [COREDUMP_FILTER_SHARED_HUGE
] = "shared-huge",
16 [COREDUMP_FILTER_PRIVATE_DAX
] = "private-dax",
17 [COREDUMP_FILTER_SHARED_DAX
] = "shared-dax",
20 DEFINE_STRING_TABLE_LOOKUP(coredump_filter
, CoredumpFilter
);
22 int coredump_filter_mask_from_string(const char *s
, uint64_t *ret
) {
29 _cleanup_free_
char *n
= NULL
;
33 r
= extract_first_word(&s
, &n
, NULL
, 0);
39 if (streq(n
, "default")) {
40 m
|= COREDUMP_FILTER_MASK_DEFAULT
;
44 if (streq(n
, "all")) {
49 v
= coredump_filter_from_string(n
);
56 r
= safe_atoux64(n
, &x
);
67 int set_coredump_filter(uint64_t value
) {
68 char t
[STRLEN("0xFFFFFFFF")];
70 sprintf(t
, "0x%"PRIx64
, value
);
72 return write_string_file("/proc/self/coredump_filter", t
,
73 WRITE_STRING_FILE_VERIFY_ON_FAILURE
|WRITE_STRING_FILE_DISABLE_BUFFER
);