[patch v1] include: isolate __O_CLOEXEC flag for sys/mount.h and fcntl.h
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Tue Feb 10 16:36:01 GMT 2026
On 07/02/26 02:19, DJ Delorie wrote:
>
> 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.
Look ok to me, although I haven't rebuild all the ABIs to check if this
break anything.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> diff --git a/io/fcntl.c b/io/fcntl.c
> index c13546e4fd..4fbc522624 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 955d316362..c6bd97abf1 100644
> --- a/sysdeps/unix/sysv/linux/Makefile
> +++ b/sysdeps/unix/sysv/linux/Makefile
> @@ -129,6 +129,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 ad7f7c98c6..221a71aa62 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 457d8dcff2..5e496caf2f 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 8e3ffbd56f..84dcd448d4 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,
>
More information about the Libc-alpha
mailing list