[glibc/release/2.40/master] include: isolate __O_CLOEXEC flag for sys/mount.h and fcntl.h
Florian Weimer via Glibc-cvs <[email protected]>
| Newsgroups | gmane.comp.lib.glibc.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9c4023b0258d1a47031e45ddc88d37f57f9abd3c commit 9c4023b0258d1a47031e45ddc88d37f57f9abd3c Author: DJ Delorie <[email protected]> Date: Mon Jan 26 22:24:42 2026 -0500 include: isolate __O_CLOEXEC flag for sys/mount.h and fcntl.h Including sys/mount.h should not implicitly include fcntl.h as that causes namespace pollution and conflicts with kernel headers. It only needs O_CLOEXEC for OPEN_TREE_CLOEXEC (although it shouldn't need that, but it's defined that way) so we provide that define (via a private version) separately. Reviewed-by: Adhemerval Zanella <[email protected]> Tested-by: Florian Weimer <[email protected]> (cherry picked from commit 419245719ccbc7dad6a97f24465e7f09c090327a) Diff: --- io/fcntl.c | 4 ++++ sysdeps/unix/sysv/linux/Makefile | 1 + sysdeps/unix/sysv/linux/alpha/bits/cloexec.h | 1 + sysdeps/unix/sysv/linux/bits/cloexec.h | 1 + sysdeps/unix/sysv/linux/bits/fcntl-linux.h | 4 +--- sysdeps/unix/sysv/linux/hppa/bits/cloexec.h | 1 + sysdeps/unix/sysv/linux/sparc/bits/cloexec.h | 1 + sysdeps/unix/sysv/linux/sys/mount.h | 6 +++++- sysdeps/unix/sysv/linux/tst-mount.c | 1 + 9 files changed, 16 insertions(+), 4 deletions(-) diff --git a/io/fcntl.c b/io/fcntl.c index 10960699f2..a221e7658b 100644 --- a/io/fcntl.c +++ b/io/fcntl.c @@ -18,6 +18,10 @@ #include <errno.h> #include <fcntl.h> +#ifndef __O_CLOEXEC +# error __O_CLOEXEC not defined by fcntl.h/cloexec.h +#endif + /* Perform file control operations on FD. */ int __fcntl (int fd, int cmd, ...) diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index b7ff9c5293..37abf487fa 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -127,6 +127,7 @@ CFLAGS-test-errno-linux.c += $(no-fortify-source) sysdep_headers += \ bits/a.out.h \ + bits/cloexec.h \ bits/epoll.h \ bits/eventfd.h \ bits/inotify.h \ diff --git a/sysdeps/unix/sysv/linux/alpha/bits/cloexec.h b/sysdeps/unix/sysv/linux/alpha/bits/cloexec.h new file mode 100644 index 0000000000..f381f28a53 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/bits/cloexec.h @@ -0,0 +1 @@ +#define __O_CLOEXEC 010000000 diff --git a/sysdeps/unix/sysv/linux/bits/cloexec.h b/sysdeps/unix/sysv/linux/bits/cloexec.h new file mode 100644 index 0000000000..3059fb6473 --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/cloexec.h @@ -0,0 +1 @@ +#define __O_CLOEXEC 02000000 diff --git a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h b/sysdeps/unix/sysv/linux/bits/fcntl-linux.h index 628612b885..5b98b47348 100644 --- a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h +++ b/sysdeps/unix/sysv/linux/bits/fcntl-linux.h @@ -81,9 +81,7 @@ #ifndef __O_NOFOLLOW # define __O_NOFOLLOW 0400000 #endif -#ifndef __O_CLOEXEC -# define __O_CLOEXEC 02000000 -#endif +#include <bits/cloexec.h> #ifndef __O_DIRECT # define __O_DIRECT 040000 #endif diff --git a/sysdeps/unix/sysv/linux/hppa/bits/cloexec.h b/sysdeps/unix/sysv/linux/hppa/bits/cloexec.h new file mode 100644 index 0000000000..f381f28a53 --- /dev/null +++ b/sysdeps/unix/sysv/linux/hppa/bits/cloexec.h @@ -0,0 +1 @@ +#define __O_CLOEXEC 010000000 diff --git a/sysdeps/unix/sysv/linux/sparc/bits/cloexec.h b/sysdeps/unix/sysv/linux/sparc/bits/cloexec.h new file mode 100644 index 0000000000..6706eaa7d5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/cloexec.h @@ -0,0 +1 @@ +#define __O_CLOEXEC 0x400000 diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h index e5964b51b1..a12c0b1980 100644 --- a/sysdeps/unix/sysv/linux/sys/mount.h +++ b/sysdeps/unix/sysv/linux/sys/mount.h @@ -21,7 +21,6 @@ #ifndef _SYS_MOUNT_H #define _SYS_MOUNT_H 1 -#include <fcntl.h> #include <features.h> #include <stdint.h> #include <stddef.h> @@ -266,6 +265,11 @@ enum fsconfig_command /* open_tree flags. */ #define OPEN_TREE_CLONE 1 /* Clone the target tree and attach the clone */ +#ifndef O_CLOEXEC +# include <bits/cloexec.h> +# define O_CLOEXEC __O_CLOEXEC +#endif +#undef OPEN_TREE_CLOEXEC #define OPEN_TREE_CLOEXEC O_CLOEXEC /* Close the file on execve() */ diff --git a/sysdeps/unix/sysv/linux/tst-mount.c b/sysdeps/unix/sysv/linux/tst-mount.c index 5eb5548f07..7da0a6fd83 100644 --- a/sysdeps/unix/sysv/linux/tst-mount.c +++ b/sysdeps/unix/sysv/linux/tst-mount.c @@ -20,6 +20,7 @@ #include <support/check.h> #include <support/xunistd.h> #include <support/namespace.h> +#include <fcntl.h> /* For AT_ constants. */ #include <sys/mount.h> _Static_assert (sizeof (struct mount_attr) == MOUNT_ATTR_SIZE_VER0,