From: Yu Watanabe Date: Sat, 10 Dec 2022 02:25:28 +0000 (+0900) Subject: binfmt-util: split out binfmt_mounted() X-Git-Tag: v253-rc1~283^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a51a9684c926af917ad1b8e2f34538aee3c7ce2d;p=thirdparty%2Fsystemd.git binfmt-util: split out binfmt_mounted() No functional changes, just refactoring and preparation for later commits. --- diff --git a/src/shared/binfmt-util.c b/src/shared/binfmt-util.c index 724d7f27d99..e813c3ebcb4 100644 --- a/src/shared/binfmt-util.c +++ b/src/shared/binfmt-util.c @@ -5,10 +5,29 @@ #include #include "binfmt-util.h" +#include "errno-util.h" +#include "fd-util.h" #include "fileio.h" #include "missing_magic.h" #include "stat-util.h" +static int binfmt_mounted(void) { + _cleanup_close_ int fd = -EBADF; + int r; + + fd = RET_NERRNO(open("/proc/sys/fs/binfmt_misc", O_CLOEXEC | O_DIRECTORY | O_PATH)); + if (fd == -ENOENT) + return false; + if (fd < 0) + return fd; + + r = fd_is_fs_type(fd, BINFMTFS_MAGIC); + if (r <= 0) + return r; + + return true; +} + int disable_binfmt(void) { int r; @@ -18,13 +37,13 @@ int disable_binfmt(void) { * We are a bit careful here, since binfmt_misc might still be an autofs which we don't want to * trigger. */ - r = path_is_fs_type("/proc/sys/fs/binfmt_misc", BINFMTFS_MAGIC); - if (r == 0 || r == -ENOENT) { + r = binfmt_mounted(); + if (r < 0) + return log_warning_errno(r, "Failed to determine whether binfmt_misc is mounted: %m"); + if (r == 0) { log_debug("binfmt_misc is not mounted, not detaching entries."); return 0; } - if (r < 0) - return log_warning_errno(r, "Failed to determine whether binfmt_misc is mounted: %m"); r = write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER); if (r < 0)