From 4771699fd97b1e9ee7dc4f7cfe01c8ddd698f682 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Wed, 10 Aug 2022 11:42:52 +0200 Subject: tree-wide: wipe direct or indirect linux/mount.h inclusion It is incompatible with sys/mount.h and causes massive headaches. Signed-off-by: Christian Brauner (Microsoft) --- meson.build | 44 +++++++++++++------------------------- src/lxc/macro.h | 13 +++++++++++ src/lxc/mount_utils.h | 2 +- src/lxc/syscall_wrappers.h | 9 ++------ src/lxc/utils.c | 2 -- 5 files changed, 31 insertions(+), 39 deletions(-) --- a/meson.build +++ b/meson.build @@ -627,7 +627,6 @@ foreach tuple: [ endif endforeach -## Types. decl_headers = ''' #include ''' @@ -640,74 +639,61 @@ else srcconf.set10('HAVE_' + 'struct mount_attr'.underscorify().to_upper(), false) missing_types += 'struct mount_attr (sys/mount.h)' endif -## Types. -decl_headers = ''' -#include -''' - -# We get -1 if the size cannot be determined -if cc.sizeof('struct mount_attr', prefix: decl_headers, args: '-D_GNU_SOURCE') > 0 - srcconf.set10('HAVE_UAPI_' + 'struct mount_attr'.underscorify().to_upper(), true) - found_types += 'struct mount_attr (linux/mount.h)' -else - srcconf.set10('HAVE_UAPI_' + 'struct mount_attr'.underscorify().to_upper(), false) - missing_types += 'struct mount_attr (linux/mount.h)' -endif - +## Check if sys/mount.h defines the fsconfig commands if cc.has_header_symbol('sys/mount.h', 'FSCONFIG_SET_FLAG') srcconf.set10('HAVE_' + 'FSCONFIG_SET_FLAG'.underscorify().to_upper(), true) - found_types += 'FSCONFIG_SET_FLAG' + found_types += 'FSCONFIG_SET_FLAG (sys/mount.h)' else srcconf.set10('HAVE_' + 'FSCONFIG_SET_FLAG'.underscorify().to_upper(), false) - missing_types += 'FSCONFIG_SET_FLAG' + missing_types += 'FSCONFIG_SET_FLAG (sys/mount.h)' endif if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_STRING') srcconf.set10('HAVE_' + 'FS_CONFIG_SET_STRING'.underscorify().to_upper(), true) - found_types += 'FS_CONFIG_SET_STRING' + found_types += 'FS_CONFIG_SET_STRING (sys/mount.h)' else srcconf.set10('HAVE_' + 'FS_CONFIG_SET_STRING'.underscorify().to_upper(), false) - missing_types += 'FS_CONFIG_SET_STRING' + missing_types += 'FS_CONFIG_SET_STRING (sys/mount.h)' endif if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_BINARY') srcconf.set10('HAVE_' + 'FS_CONFIG_SET_BINARY'.underscorify().to_upper(), true) - found_types += 'FS_CONFIG_SET_BINARY' + found_types += 'FS_CONFIG_SET_BINARY (sys/mount.h)' else srcconf.set10('HAVE_' + 'FS_CONFIG_SET_BINARY'.underscorify().to_upper(), false) - missing_types += 'FS_CONFIG_SET_BINARY' + missing_types += 'FS_CONFIG_SET_BINARY (sys/mount.h)' endif if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_PATH_EMPTY') srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_EMPTY'.underscorify().to_upper(), true) - found_types += 'FS_CONFIG_SET_PATH_EMPTY' + found_types += 'FS_CONFIG_SET_PATH_EMPTY (sys/mount.h)' else srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_EMPTY'.underscorify().to_upper(), false) - missing_types += 'FS_CONFIG_SET_PATH_EMPTY' + missing_types += 'FS_CONFIG_SET_PATH_EMPTY (sys/mount.h)' endif if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_PATH_FD') srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_FD'.underscorify().to_upper(), true) - found_types += 'FS_CONFIG_SET_PATH_FD' + found_types += 'FS_CONFIG_SET_PATH_FD (sys/mount.h)' else srcconf.set10('HAVE_' + 'FS_CONFIG_SET_PATH_FD'.underscorify().to_upper(), false) - missing_types += 'FS_CONFIG_SET_PATH_FD' + missing_types += 'FS_CONFIG_SET_PATH_FD (sys/mount.h)' endif if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_CMD_CREATE') srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_CREATE'.underscorify().to_upper(), true) - found_types += 'FS_CONFIG_SET_CMD_CREATE' + found_types += 'FS_CONFIG_SET_CMD_CREAT (sys/mount.h)' else srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_CREATE'.underscorify().to_upper(), false) - missing_types += 'FS_CONFIG_SET_CMD_CREATE' + missing_types += 'FS_CONFIG_SET_CMD_CREATE (sys/mount.h)' endif if cc.has_header_symbol('sys/mount.h', 'FS_CONFIG_SET_CMD_RECONFIGURE') srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_RECONFIGURE'.underscorify().to_upper(), true) - found_types += 'FS_CONFIG_SET_CMD_RECONFIGURE' + found_types += 'FS_CONFIG_SET_CMD_RECONFIGURE (sys/mount.h)' else srcconf.set10('HAVE_' + 'FS_CONFIG_SET_CMD_RECONFIGURE'.underscorify().to_upper(), false) - missing_types += 'FS_CONFIG_SET_CMD_RECONFIGURE' + missing_types += 'FS_CONFIG_SET_CMD_RECONFIGURE (sys/mount.h)' endif ## Headers. --- a/src/lxc/macro.h +++ b/src/lxc/macro.h @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -812,4 +813,16 @@ static inline bool is_set(__u32 bit, __u #define BIT(nr) (1UL << (nr)) +#ifndef FS_IOC_GETFLAGS +#define FS_IOC_GETFLAGS _IOR('f', 1, long) +#endif + +#ifndef FS_IOC_SETFLAGS +#define FS_IOC_SETFLAGS _IOW('f', 2, long) +#endif + +#ifndef FS_IMMUTABLE_FL +#define FS_IMMUTABLE_FL 0x00000010 /* Immutable file */ +#endif + #endif /* __LXC_MACRO_H */ --- a/src/lxc/mount_utils.h +++ b/src/lxc/mount_utils.h @@ -124,7 +124,7 @@ struct lxc_rootfs; #endif #endif -#if !FSCONFIG_CMD_RECONFIGURE +#if !HAVE_FSCONFIG_CMD_RECONFIGURE #ifndef FSCONFIG_CMD_RECONFIGURE #define FSCONFIG_CMD_RECONFIGURE 7 /* Invoke superblock reconfiguration */ #endif --- a/src/lxc/syscall_wrappers.h +++ b/src/lxc/syscall_wrappers.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -18,12 +19,6 @@ #include "macro.h" #include "syscall_numbers.h" -#if HAVE_STRUCT_MOUNT_ATTR -#include -#elif HAVE_UAPI_STRUCT_MOUNT_ATTR -#include -#endif - #ifdef HAVE_LINUX_MEMFD_H #include #endif @@ -216,7 +211,7 @@ extern int fsmount(int fs_fd, unsigned i /* * mount_setattr() */ -#if !HAVE_STRUCT_MOUNT_ATTR && !HAVE_UAPI_STRUCT_MOUNT_ATTR +#if !HAVE_STRUCT_MOUNT_ATTR struct mount_attr { __u64 attr_set; __u64 attr_clr; --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -19,8 +19,6 @@ #include #include #include -/* Needs to be after sys/mount.h header */ -#include #include #include #include