[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