From 6ae77472bffa9bd1956f2be2c723aad64fddba2c Mon Sep 17 00:00:00 2001 From: liqingqing Date: Mon, 15 Aug 2022 19:54:22 +0800 Subject: [PATCH] linux: Fix sys/mount.h usage with kernel headers --- glibc.spec | 7 +- ...ys-mount.h-usage-with-kernel-headers.patch | 336 ++++++++++++++++++ ...Mimic-kernel-defition-for-BLOCK_SIZE.patch | 30 ++ 3 files changed, 372 insertions(+), 1 deletion(-) create mode 100644 linux-Fix-sys-mount.h-usage-with-kernel-headers.patch create mode 100644 linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch diff --git a/glibc.spec b/glibc.spec index 783b2d5..92f0351 100644 --- a/glibc.spec +++ b/glibc.spec @@ -65,7 +65,7 @@ ############################################################################## Name: glibc Version: 2.36 -Release: 3 +Release: 4 Summary: The GNU libc libraries License: %{all_license} URL: http://www.gnu.org/software/glibc/ @@ -84,6 +84,8 @@ Source8: testsuite_whitelist %endif Patch0: glibc-1070416.patch +Patch1: linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch +Patch2: linux-Fix-sys-mount.h-usage-with-kernel-headers.patch Patch9000: turn-default-value-of-x86_rep_stosb_threshold_form_2K_to_1M.patch Patch9001: locale-delete-no-hard-link-to-avoid-all_language-pac.patch @@ -1258,6 +1260,9 @@ fi %endif %changelog +* Mon Aug 15 2022 Qingqing Li - 2.36-4 +- linux: Fix sys/mount.h usage with kernel headers + * Mon Aug 15 2022 Qingqing Li - 2.36-3 - refactoring testsuite whitelist diff --git a/linux-Fix-sys-mount.h-usage-with-kernel-headers.patch b/linux-Fix-sys-mount.h-usage-with-kernel-headers.patch new file mode 100644 index 0000000..9bad177 --- /dev/null +++ b/linux-Fix-sys-mount.h-usage-with-kernel-headers.patch @@ -0,0 +1,336 @@ +From 774058d72942249f71d74e7f2b639f77184160a6 Mon Sep 17 00:00:00 2001 +From: Adhemerval Zanella +Date: Wed, 10 Aug 2022 14:24:47 -0300 +Subject: [PATCH] linux: Fix sys/mount.h usage with kernel headers + +Now that kernel exports linux/mount.h and includes it on linux/fs.h, +its definitions might clash with glibc exports sys/mount.h. To avoid +the need to rearrange the Linux header to be always after glibc one, +the glibc sys/mount.h is changed to: + + 1. Undefine the macros also used as enum constants. This covers prior + inclusion of (for instance MS_RDONLY). + + 2. Include based on the usual __has_include check + (needs to use __has_include ("linux/mount.h") to paper over GCC + bugs. + + 3. Define enum fsconfig_command only if FSOPEN_CLOEXEC is not defined. + (FSOPEN_CLOEXEC should be a very close proxy.) + + 4. Define struct mount_attr if MOUNT_ATTR_SIZE_VER0 is not defined. + (Added in the same commit on the Linux side.) + +This patch also adds some tests to check if including linux/fs.h and +linux/mount.h after and before sys/mount.h does work. + +Checked on x86_64-linux-gnu. + +Reviewed-by: Florian Weimer +--- + sysdeps/unix/sysv/linux/Makefile | 8 +++ + sysdeps/unix/sysv/linux/sys/mount.h | 71 +++++++++++++++++--- + sysdeps/unix/sysv/linux/tst-mount-compile.py | 66 ++++++++++++++++++ + 3 files changed, 137 insertions(+), 8 deletions(-) + create mode 100755 sysdeps/unix/sysv/linux/tst-mount-compile.py + +diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile +index 3f31c19e4a6..60e4cb15211 100644 +--- a/sysdeps/unix/sysv/linux/Makefile ++++ b/sysdeps/unix/sysv/linux/Makefile +@@ -265,6 +265,14 @@ $(objpfx)tst-mount-consts.out: ../sysdeps/unix/sysv/linux/tst-mount-consts.py + < /dev/null > $@ 2>&1; $(evaluate-test) + $(objpfx)tst-mount-consts.out: $(sysdeps-linux-python-deps) + ++tests-special += $(objpfx)tst-mount-compile.out ++$(objpfx)tst-mount-compile.out: ../sysdeps/unix/sysv/linux/tst-mount-compile.py ++ $(sysdeps-linux-python) \ ++ ../sysdeps/unix/sysv/linux/tst-mount-compile.py \ ++ $(sysdeps-linux-python-cc) \ ++ < /dev/null > $@ 2>&1; $(evaluate-test) ++$(objpfx)tst-mount-compile.out: $(sysdeps-linux-python-deps) ++ + tst-rseq-disable-ENV = GLIBC_TUNABLES=glibc.pthread.rseq=0 + + endif # $(subdir) == misc +diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h +index df6b0dbb425..2e3fd6a7fe6 100644 +--- a/sysdeps/unix/sysv/linux/sys/mount.h ++++ b/sysdeps/unix/sysv/linux/sys/mount.h +@@ -27,6 +27,13 @@ + #include + #include + ++#ifdef __has_include ++# if __has_include ("linux/mount.h") ++# include "linux/mount.h" ++# endif ++#endif ++ ++ + #define BLOCK_SIZE_BITS 10 + #define BLOCK_SIZE (1<. ++ ++import argparse ++import sys ++ ++import glibcextract ++ ++ ++def main(): ++ """The main entry point.""" ++ parser = argparse.ArgumentParser( ++ description='Check if glibc provided sys/mount.h can be ' ++ ' used along related kernel headers.') ++ parser.add_argument('--cc', metavar='CC', ++ help='C compiler (including options) to use') ++ args = parser.parse_args() ++ ++ if glibcextract.compile_c_snippet( ++ '#include ', ++ args.cc).returncode != 0: ++ sys.exit (77) ++ ++ def check(testname, snippet): ++ # Add -Werror to catch macro redefinitions and _ISOMAC to avoid ++ # internal glibc definitions. ++ r = glibcextract.compile_c_snippet(snippet, args.cc, ++ '-Werror -D_ISOMAC') ++ if r.returncode != 0: ++ print('error: test {}:\n{}'.format(testname, r.output.decode())) ++ return r.returncode ++ ++ status = max( ++ check("sys/mount.h + linux/mount.h", ++ "#include \n" ++ "#include "), ++ check("sys/mount.h + linux/fs.h", ++ "#include \n" ++ "#include "), ++ check("linux/mount.h + sys/mount.h", ++ "#include \n" ++ "#include "), ++ check("linux/fs.h + sys/mount.h", ++ "#include \n" ++ "#include ")) ++ sys.exit(status) ++ ++if __name__ == '__main__': ++ main() +-- +2.23.0.windows.1 + diff --git a/linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch b/linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch new file mode 100644 index 0000000..9024795 --- /dev/null +++ b/linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch @@ -0,0 +1,30 @@ +From c68b6044bc7945716431f1adc091b17c39b80a06 Mon Sep 17 00:00:00 2001 +From: Adhemerval Zanella +Date: Wed, 10 Aug 2022 14:24:45 -0300 +Subject: [PATCH] linux: Mimic kernel defition for BLOCK_SIZE + +To avoid possible warnings if the kernel header is included before +sys/mount.h. + +Reviewed-by: Florian Weimer +--- + sysdeps/unix/sysv/linux/sys/mount.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h +index f965986ba87..df6b0dbb425 100644 +--- a/sysdeps/unix/sysv/linux/sys/mount.h ++++ b/sysdeps/unix/sysv/linux/sys/mount.h +@@ -27,8 +27,8 @@ + #include + #include + +-#define BLOCK_SIZE 1024 + #define BLOCK_SIZE_BITS 10 ++#define BLOCK_SIZE (1<