From a51a9684c926af917ad1b8e2f34538aee3c7ce2d Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 10 Dec 2022 11:25:28 +0900 Subject: [PATCH] binfmt-util: split out binfmt_mounted() No functional changes, just refactoring and preparation for later commits. --- src/shared/binfmt-util.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/shared/binfmt-util.c b/src/shared/binfmt-util.c index 724d7f27d9..e813c3ebcb 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)