analyze security: fix recursive call of syscall_names_in_filter()
When `syscall_names_in_filter()` is called in itself, it is already examined with `whitelist`. Or, in other words, `syscall_names_in_filter()` returns bad or good in boolean. So, the returned value should not be compared with `whitelist` again. This replaces #11302.
This commit is contained in:
committed by
Lennart Poettering
parent
6f61b14d53
commit
95832a0f8c
@@ -485,24 +485,24 @@ static bool syscall_names_in_filter(Set *s, bool whitelist, const SyscallFilterS
|
||||
const char *syscall;
|
||||
|
||||
NULSTR_FOREACH(syscall, f->value) {
|
||||
bool b;
|
||||
int id;
|
||||
|
||||
if (syscall[0] == '@') {
|
||||
const SyscallFilterSet *g;
|
||||
|
||||
assert_se(g = syscall_filter_set_find(syscall));
|
||||
b = syscall_names_in_filter(s, whitelist, g);
|
||||
} else {
|
||||
int id;
|
||||
if (syscall_names_in_filter(s, whitelist, g))
|
||||
return true; /* bad! */
|
||||
|
||||
/* Let's see if the system call actually exists on this platform, before complaining */
|
||||
id = seccomp_syscall_resolve_name(syscall);
|
||||
if (id < 0)
|
||||
continue;
|
||||
|
||||
b = set_contains(s, syscall);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (whitelist == b) {
|
||||
/* Let's see if the system call actually exists on this platform, before complaining */
|
||||
id = seccomp_syscall_resolve_name(syscall);
|
||||
if (id < 0)
|
||||
continue;
|
||||
|
||||
if (set_contains(s, syscall) == whitelist) {
|
||||
log_debug("Offending syscall filter item: %s", syscall);
|
||||
return true; /* bad! */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user