[glibc/release/2.37/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=e2aae832170ee060dda386a647e5fb242bbb6eec commit e2aae832170ee060dda386a647e5fb242bbb6eec 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 0d36a3caef..18f314c329 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 6acfd2cc48..3782c6c63b 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -119,6 +119,7 @@ CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=(0x80000000-sysconf(_SC_PAGESIZE))" 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 1babbdc84e..54915dad4c 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 c6da841d99..600ac455bc 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> @@ -263,6 +262,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 abf9761d4a..6ec433b62b 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,