]> git.ipfire.org Git - thirdparty/libvirt.git/commit
vircommand: Make sysconf(_SC_OPEN_MAX) failure non-fatal
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 29 Aug 2023 07:22:09 +0000 (09:22 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 13 Sep 2024 12:50:43 +0000 (14:50 +0200)
commit4df8dc576fd14fcb7b3203622fbf3f733d97dff6
treeb2c9c5d34227786ab42ef22fb076073cded07af6
parent6ded014ba3c9cb977763b0d5c88b7604c07c3fdd
vircommand: Make sysconf(_SC_OPEN_MAX) failure non-fatal

The point of calling sysconf(_SC_OPEN_MAX) is to allocate big
enough bitmap so that subsequent call to
virCommandMassCloseGetFDsDir() can just set the bit instead of
expanding memory (this code runs in a forked off child and thus
using async-signal-unsafe functions like malloc() is a bit
tricky).

But on some systems the limit for opened FDs is virtually
non-existent (typically macOS Ventura started reporting EINVAL).

But with both glibc and musl using malloc() after fork() is safe.
And with sufficiently new glib too, as it's using malloc() with
newer releases instead of their own allocator.

Therefore, pick a sufficiently large value (glibc falls back to
256, [1], Darwin to 10240 [2] so 10240 should be good enough) to
fall back to and make the error non-fatal.

1: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/getdtsz.c;h=4c5a6208067d2f9eaaac6dba652702fb4af9b7e3;hb=HEAD
2  https://github.com/apple/darwin-xnu/blob/main/bsd/sys/syslimits.h#L104

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
src/util/vircommand.c