From: Darrick J. Wong Date: Thu, 28 Aug 2025 17:30:38 +0000 (-0700) Subject: libext2fs: don't look for O_EXCL in the F_GETFL output X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4832dc95d2385c4efdec28d4ca95380be8234f49;p=thirdparty%2Fe2fsprogs.git libext2fs: don't look for O_EXCL in the F_GETFL output For decades, Linux has never propagated O_EXCL into the user-visible file flags in do_dentry_open: f->f_flags &= ~(O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC); Therefore, one cannot use F_GETFL to determine if the file was opened with O_EXCL. The unixfd IO manager will have to trust that the caller opened the file in O_EXCL mode. Without this patch, the upcoming flock patch will not work correctly in determining the lock mode to keep other copies of fuse4fs and/or systemd from touching a fuse4fs mounted filesystem. Cc: # v1.43.2 Fixes: 4ccf9e4fe165cf ("libext2fs: add unixfd_io_manager") Signed-off-by: "Darrick J. Wong" --- diff --git a/lib/ext2fs/unix_io.c b/lib/ext2fs/unix_io.c index adbdd5f6..723a5c24 100644 --- a/lib/ext2fs/unix_io.c +++ b/lib/ext2fs/unix_io.c @@ -1090,11 +1090,10 @@ static errcode_t unixfd_open(const char *str_fd, int flags, if (fd_flags == -1) return EBADF; - flags = 0; + /* O_EXCL is cleared by Linux at open and not returned by F_GETFL */ + flags &= IO_FLAG_EXCLUSIVE; if (fd_flags & O_RDWR) flags |= IO_FLAG_RW; - if (fd_flags & O_EXCL) - flags |= IO_FLAG_EXCLUSIVE; #if defined(O_DIRECT) if (fd_flags & O_DIRECT) flags |= IO_FLAG_DIRECT_IO;