From: Lennart Poettering Date: Fri, 24 Mar 2023 10:35:55 +0000 (+0100) Subject: analyze: don't claim "@known" was an unlisted syscall X-Git-Tag: v254-rc1~927^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=950c0ed38935198a67a57c645e499555eaf006eb;p=thirdparty%2Fsystemd.git analyze: don't claim "@known" was an unlisted syscall It's a sycall group of our own definition, and the output is erroneous to claim otherwise. Let's hide it. This adds syscall_set_add() which is nicely symmetric to the existing syscall_set_remove(). Follow-up for: 6d6a08547c03f96dc798cda1ef4a8d3013d292d5 --- diff --git a/src/analyze/analyze-syscall-filter.c b/src/analyze/analyze-syscall-filter.c index 50662da0627..66a52da8976 100644 --- a/src/analyze/analyze-syscall-filter.c +++ b/src/analyze/analyze-syscall-filter.c @@ -58,15 +58,35 @@ static int load_kernel_syscalls(Set **ret) { return 0; } +static int syscall_set_add(Set **s, const SyscallFilterSet *set) { + int r; + + assert(s); + + if (!set) + return 0; + + NULSTR_FOREACH(sc, set->value) { + if (sc[0] == '@') + continue; + + r = set_put_strdup(s, sc); + if (r < 0) + return r; + } + + return 0; +} + static void syscall_set_remove(Set *s, const SyscallFilterSet *set) { if (!set) return; - NULSTR_FOREACH(syscall, set->value) { - if (syscall[0] == '@') + NULSTR_FOREACH(sc, set->value) { + if (sc[0] == '@') continue; - free(set_remove(s, syscall)); + free(set_remove(s, sc)); } } @@ -84,6 +104,7 @@ static void dump_syscall_filter(const SyscallFilterSet *set) { int verb_syscall_filters(int argc, char *argv[], void *userdata) { bool first = true; + int r; pager_open(arg_pager_flags); @@ -91,9 +112,9 @@ int verb_syscall_filters(int argc, char *argv[], void *userdata) { _cleanup_set_free_ Set *kernel = NULL, *known = NULL; int k = 0; /* explicit initialization to appease gcc */ - NULSTR_FOREACH(sys, syscall_filter_sets[SYSCALL_FILTER_SET_KNOWN].value) - if (set_put_strdup(&known, sys) < 0) - return log_oom(); + r = syscall_set_add(&known, syscall_filter_sets + SYSCALL_FILTER_SET_KNOWN); + if (r < 0) + return log_error_errno(r, "Failed to prepare set of known system calls: %m"); if (!arg_quiet) k = load_kernel_syscalls(&kernel);