From: Yu Watanabe Date: Fri, 2 Jan 2026 23:23:16 +0000 (+0900) Subject: Bump required minimum version of glibc to 2.34 X-Git-Tag: v260-rc1~307 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=149a8e63068cfc80f408fccb282ad84ecaee7c82;p=thirdparty%2Fsystemd.git Bump required minimum version of glibc to 2.34 Major distributions already have glibc >= 2.34. Let's bump the required minimum version. Note, glibc-2.34 was released on 2021-08-01. --- diff --git a/README b/README index 6d6b5729fcf..1bbcd5f671c 100644 --- a/README +++ b/README @@ -201,7 +201,7 @@ REQUIREMENTS: CONFIG_PSI CONFIG_MEMCG - glibc >= 2.31 + glibc >= 2.34 libxcrypt >= 4.4.0 (optional) libmount >= 2.30 (from util-linux) (util-linux *must* be built without --enable-libmount-support-mtab) diff --git a/meson.build b/meson.build index ec724bd283f..e091631ca82 100644 --- a/meson.build +++ b/meson.build @@ -565,10 +565,6 @@ foreach ident : [ ['renameat2', '''#include '''], # since musl-1.2.6 ['set_mempolicy', '''#include '''], # declared at numaif.h provided by libnuma, which we do not use ['get_mempolicy', '''#include '''], # declared at numaif.h provided by libnuma, which we do not use - ['strerrorname_np', '''#include '''], # since glibc-2.32 - ['mallinfo2', '''#include '''], # since glibc-2.33 - ['execveat', '''#include '''], # since glibc-2.34 - ['close_range', '''#include '''], # since glibc-2.34 ['epoll_pwait2', '''#include '''], # since glibc-2.35 ['fsconfig', '''#include '''], # since glibc-2.36 ['fsmount', '''#include '''], # since glibc-2.36 diff --git a/src/basic/errno-list.c b/src/basic/errno-list.c index a67b6087000..b6662bf05aa 100644 --- a/src/basic/errno-list.c +++ b/src/basic/errno-list.c @@ -24,7 +24,7 @@ int errno_from_name(const char *name) { return sc->id; } -#if HAVE_STRERRORNAME_NP +#ifdef __GLIBC__ const char* errno_name_no_fallback(int id) { if (id == 0) /* To stay in line with our implementation below. */ return NULL; diff --git a/src/include/musl/malloc.h b/src/include/musl/malloc.h index 9d15d4bf911..6e22d7e06f7 100644 --- a/src/include/musl/malloc.h +++ b/src/include/musl/malloc.h @@ -1,27 +1,26 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include_next + #include #include -/* struct mallinfo2 will be defined and struct mallinfo is converted to struct mallinfo2 in - * override/malloc.h. Hence, here we define struct mallinfo. */ - -struct mallinfo { - int arena; /* non-mmapped space allocated from system */ - int ordblks; /* number of free chunks */ - int smblks; /* number of fastbin blocks */ - int hblks; /* number of mmapped regions */ - int hblkhd; /* space in mmapped regions */ - int usmblks; /* always 0, preserved for backwards compatibility */ - int fsmblks; /* space available in freed fastbin blocks */ - int uordblks; /* total allocated space */ - int fordblks; /* total free space */ - int keepcost; /* top-most, releasable (via malloc_trim) space */ +struct mallinfo2 { + size_t arena; /* non-mmapped space allocated from system */ + size_t ordblks; /* number of free chunks */ + size_t smblks; /* number of fastbin blocks */ + size_t hblks; /* number of mmapped regions */ + size_t hblkhd; /* space in mmapped regions */ + size_t usmblks; /* always 0, preserved for backwards compatibility */ + size_t fsmblks; /* space available in freed fastbin blocks */ + size_t uordblks; /* total allocated space */ + size_t fordblks; /* total free space */ + size_t keepcost; /* top-most, releasable (via malloc_trim) space */ }; -static inline struct mallinfo mallinfo(void) { - return (struct mallinfo) {}; +static inline struct mallinfo2 mallinfo2(void) { + return (struct mallinfo2) {}; } static inline int malloc_info(int options, FILE *stream) { @@ -35,5 +34,3 @@ static inline int malloc_info(int options, FILE *stream) { static inline int malloc_trim(size_t pad) { return 0; } - -#include_next diff --git a/src/include/musl/unistd.h b/src/include/musl/unistd.h index 8fbaaf63e37..e58fee356af 100644 --- a/src/include/musl/unistd.h +++ b/src/include/musl/unistd.h @@ -10,3 +10,9 @@ * found. Let's always use getopt_long(). */ int getopt_fix(int argc, char * const *argv, const char *optstring); #define getopt(argc, argv, optstring) getopt_fix(argc, argv, optstring) + +int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags); +#define close_range missing_close_range + +int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags); +#define execveat missing_execveat diff --git a/src/include/override/malloc.h b/src/include/override/malloc.h deleted file mode 100644 index fff5cd61558..00000000000 --- a/src/include/override/malloc.h +++ /dev/null @@ -1,39 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -#pragma once - -#include_next /* IWYU pragma: export */ - -#if !HAVE_MALLINFO2 -struct mallinfo2 { - size_t arena; /* non-mmapped space allocated from system */ - size_t ordblks; /* number of free chunks */ - size_t smblks; /* number of fastbin blocks */ - size_t hblks; /* number of mmapped regions */ - size_t hblkhd; /* space in mmapped regions */ - size_t usmblks; /* always 0, preserved for backwards compatibility */ - size_t fsmblks; /* space available in freed fastbin blocks */ - size_t uordblks; /* total allocated space */ - size_t fordblks; /* total free space */ - size_t keepcost; /* top-most, releasable (via malloc_trim) space */ -}; - -static inline struct mallinfo2 mallinfo2(void) { - _Pragma("GCC diagnostic push"); - _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\""); - struct mallinfo m = mallinfo(); - _Pragma("GCC diagnostic pop"); - - return (struct mallinfo2) { - .arena = m.arena, - .ordblks = m.ordblks, - .smblks = m.smblks, - .hblks = m.hblks, - .hblkhd = m.hblkhd, - .usmblks = 0, - .fsmblks = m.fsmblks, - .uordblks = m.uordblks, - .fordblks = m.fordblks, - .keepcost = m.keepcost, - }; -} -#endif diff --git a/src/include/override/sys/generate-syscall.py b/src/include/override/sys/generate-syscall.py index e5ca9727264..6f449f9dc13 100755 --- a/src/include/override/sys/generate-syscall.py +++ b/src/include/override/sys/generate-syscall.py @@ -6,11 +6,8 @@ import functools # We only generate numbers for a dozen or so syscalls SYSCALLS = [ - 'close_range', # defined in glibc header since glibc-2.33 'fchmodat2', # defined in glibc header since glibc-2.39 - 'mount_setattr', # defined in glibc header since glibc-2.34 'open_tree_attr', - 'openat2', # defined in glibc header since glibc-2.32 'quotactl_fd', # defined in glibc header since glibc-2.35 'removexattrat', 'setxattrat', diff --git a/src/include/override/sys/random.h b/src/include/override/sys/random.h deleted file mode 100644 index 9529dc1f08a..00000000000 --- a/src/include/override/sys/random.h +++ /dev/null @@ -1,13 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -#pragma once - -#include_next /* IWYU pragma: export */ - -#include - -/* Defined since glibc-2.32. */ -#ifndef GRND_INSECURE -# define GRND_INSECURE 0x0004 -#else -static_assert(GRND_INSECURE == 0x0004, ""); -#endif diff --git a/src/include/override/sys/syscall.h b/src/include/override/sys/syscall.h index b6922a052db..da2f780bed3 100644 --- a/src/include/override/sys/syscall.h +++ b/src/include/override/sys/syscall.h @@ -54,76 +54,6 @@ # define missing_arch_template 1 # endif -#ifndef __IGNORE_close_range -# if defined(__aarch64__) -# define systemd_NR_close_range 436 -# elif defined(__alpha__) -# define systemd_NR_close_range 546 -# elif defined(__arc__) || defined(__tilegx__) -# define systemd_NR_close_range 436 -# elif defined(__arm__) -# define systemd_NR_close_range 436 -# elif defined(__i386__) -# define systemd_NR_close_range 436 -# elif defined(__ia64__) -# define systemd_NR_close_range 1460 -# elif defined(__loongarch_lp64) -# define systemd_NR_close_range 436 -# elif defined(__m68k__) -# define systemd_NR_close_range 436 -# elif defined(_MIPS_SIM) -# if _MIPS_SIM == _MIPS_SIM_ABI32 -# define systemd_NR_close_range 4436 -# elif _MIPS_SIM == _MIPS_SIM_NABI32 -# define systemd_NR_close_range 6436 -# elif _MIPS_SIM == _MIPS_SIM_ABI64 -# define systemd_NR_close_range 5436 -# else -# error "Unknown MIPS ABI" -# endif -# elif defined(__hppa__) -# define systemd_NR_close_range 436 -# elif defined(__powerpc__) -# define systemd_NR_close_range 436 -# elif defined(__riscv) -# if __riscv_xlen == 32 -# define systemd_NR_close_range 436 -# elif __riscv_xlen == 64 -# define systemd_NR_close_range 436 -# else -# error "Unknown RISC-V ABI" -# endif -# elif defined(__s390__) -# define systemd_NR_close_range 436 -# elif defined(__sh__) -# define systemd_NR_close_range 436 -# elif defined(__sparc__) -# define systemd_NR_close_range 436 -# elif defined(__x86_64__) -# if defined(__ILP32__) -# define systemd_NR_close_range (436 | /* __X32_SYSCALL_BIT */ 0x40000000) -# else -# define systemd_NR_close_range 436 -# endif -# elif !defined(missing_arch_template) -# warning "close_range() syscall number is unknown for your architecture" -# endif - -/* may be an (invalid) negative number due to libseccomp, see PR 13319 */ -# if defined __NR_close_range && __NR_close_range >= 0 -# if defined systemd_NR_close_range -static_assert(__NR_close_range == systemd_NR_close_range, ""); -# endif -# else -# if defined __NR_close_range -# undef __NR_close_range -# endif -# if defined systemd_NR_close_range && systemd_NR_close_range >= 0 -# define __NR_close_range systemd_NR_close_range -# endif -# endif -#endif - #ifndef __IGNORE_fchmodat2 # if defined(__aarch64__) # define systemd_NR_fchmodat2 452 @@ -194,76 +124,6 @@ static_assert(__NR_fchmodat2 == systemd_NR_fchmodat2, ""); # endif #endif -#ifndef __IGNORE_mount_setattr -# if defined(__aarch64__) -# define systemd_NR_mount_setattr 442 -# elif defined(__alpha__) -# define systemd_NR_mount_setattr 552 -# elif defined(__arc__) || defined(__tilegx__) -# define systemd_NR_mount_setattr 442 -# elif defined(__arm__) -# define systemd_NR_mount_setattr 442 -# elif defined(__i386__) -# define systemd_NR_mount_setattr 442 -# elif defined(__ia64__) -# define systemd_NR_mount_setattr 1466 -# elif defined(__loongarch_lp64) -# define systemd_NR_mount_setattr 442 -# elif defined(__m68k__) -# define systemd_NR_mount_setattr 442 -# elif defined(_MIPS_SIM) -# if _MIPS_SIM == _MIPS_SIM_ABI32 -# define systemd_NR_mount_setattr 4442 -# elif _MIPS_SIM == _MIPS_SIM_NABI32 -# define systemd_NR_mount_setattr 6442 -# elif _MIPS_SIM == _MIPS_SIM_ABI64 -# define systemd_NR_mount_setattr 5442 -# else -# error "Unknown MIPS ABI" -# endif -# elif defined(__hppa__) -# define systemd_NR_mount_setattr 442 -# elif defined(__powerpc__) -# define systemd_NR_mount_setattr 442 -# elif defined(__riscv) -# if __riscv_xlen == 32 -# define systemd_NR_mount_setattr 442 -# elif __riscv_xlen == 64 -# define systemd_NR_mount_setattr 442 -# else -# error "Unknown RISC-V ABI" -# endif -# elif defined(__s390__) -# define systemd_NR_mount_setattr 442 -# elif defined(__sh__) -# define systemd_NR_mount_setattr 442 -# elif defined(__sparc__) -# define systemd_NR_mount_setattr 442 -# elif defined(__x86_64__) -# if defined(__ILP32__) -# define systemd_NR_mount_setattr (442 | /* __X32_SYSCALL_BIT */ 0x40000000) -# else -# define systemd_NR_mount_setattr 442 -# endif -# elif !defined(missing_arch_template) -# warning "mount_setattr() syscall number is unknown for your architecture" -# endif - -/* may be an (invalid) negative number due to libseccomp, see PR 13319 */ -# if defined __NR_mount_setattr && __NR_mount_setattr >= 0 -# if defined systemd_NR_mount_setattr -static_assert(__NR_mount_setattr == systemd_NR_mount_setattr, ""); -# endif -# else -# if defined __NR_mount_setattr -# undef __NR_mount_setattr -# endif -# if defined systemd_NR_mount_setattr && systemd_NR_mount_setattr >= 0 -# define __NR_mount_setattr systemd_NR_mount_setattr -# endif -# endif -#endif - #ifndef __IGNORE_open_tree_attr # if defined(__aarch64__) # define systemd_NR_open_tree_attr 467 @@ -334,76 +194,6 @@ static_assert(__NR_open_tree_attr == systemd_NR_open_tree_attr, ""); # endif #endif -#ifndef __IGNORE_openat2 -# if defined(__aarch64__) -# define systemd_NR_openat2 437 -# elif defined(__alpha__) -# define systemd_NR_openat2 547 -# elif defined(__arc__) || defined(__tilegx__) -# define systemd_NR_openat2 437 -# elif defined(__arm__) -# define systemd_NR_openat2 437 -# elif defined(__i386__) -# define systemd_NR_openat2 437 -# elif defined(__ia64__) -# define systemd_NR_openat2 1461 -# elif defined(__loongarch_lp64) -# define systemd_NR_openat2 437 -# elif defined(__m68k__) -# define systemd_NR_openat2 437 -# elif defined(_MIPS_SIM) -# if _MIPS_SIM == _MIPS_SIM_ABI32 -# define systemd_NR_openat2 4437 -# elif _MIPS_SIM == _MIPS_SIM_NABI32 -# define systemd_NR_openat2 6437 -# elif _MIPS_SIM == _MIPS_SIM_ABI64 -# define systemd_NR_openat2 5437 -# else -# error "Unknown MIPS ABI" -# endif -# elif defined(__hppa__) -# define systemd_NR_openat2 437 -# elif defined(__powerpc__) -# define systemd_NR_openat2 437 -# elif defined(__riscv) -# if __riscv_xlen == 32 -# define systemd_NR_openat2 437 -# elif __riscv_xlen == 64 -# define systemd_NR_openat2 437 -# else -# error "Unknown RISC-V ABI" -# endif -# elif defined(__s390__) -# define systemd_NR_openat2 437 -# elif defined(__sh__) -# define systemd_NR_openat2 437 -# elif defined(__sparc__) -# define systemd_NR_openat2 437 -# elif defined(__x86_64__) -# if defined(__ILP32__) -# define systemd_NR_openat2 (437 | /* __X32_SYSCALL_BIT */ 0x40000000) -# else -# define systemd_NR_openat2 437 -# endif -# elif !defined(missing_arch_template) -# warning "openat2() syscall number is unknown for your architecture" -# endif - -/* may be an (invalid) negative number due to libseccomp, see PR 13319 */ -# if defined __NR_openat2 && __NR_openat2 >= 0 -# if defined systemd_NR_openat2 -static_assert(__NR_openat2 == systemd_NR_openat2, ""); -# endif -# else -# if defined __NR_openat2 -# undef __NR_openat2 -# endif -# if defined systemd_NR_openat2 && systemd_NR_openat2 >= 0 -# define __NR_openat2 systemd_NR_openat2 -# endif -# endif -#endif - #ifndef __IGNORE_quotactl_fd # if defined(__aarch64__) # define systemd_NR_quotactl_fd 443 diff --git a/src/include/override/unistd.h b/src/include/override/unistd.h index b32587417b3..bd558694eeb 100644 --- a/src/include/override/unistd.h +++ b/src/include/override/unistd.h @@ -3,20 +3,6 @@ #include_next /* IWYU pragma: export */ -/* Defined since glibc-2.34. - * Supported since kernel v5.9 (9b4feb630e8e9801603f3cab3a36369e3c1cf88d). */ -#if !HAVE_CLOSE_RANGE -int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags); -# define close_range missing_close_range -#endif - -/* Defined since glibc-2.34. - * Supported since kernel v3.19 (51f39a1f0cea1cacf8c787f652f26dfee9611874). */ -#if !HAVE_EXECVEAT -int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags); -# define execveat missing_execveat -#endif - #if !HAVE_PIVOT_ROOT int missing_pivot_root(const char *new_root, const char *put_old); # define pivot_root missing_pivot_root diff --git a/src/libc/musl/meson.build b/src/libc/musl/meson.build index 4fabac7bcc9..acda973b8d9 100644 --- a/src/libc/musl/meson.build +++ b/src/libc/musl/meson.build @@ -11,4 +11,5 @@ libc_wrapper_sources += files( 'stdio.c', 'stdlib.c', 'string.c', + 'unistd.c', ) diff --git a/src/libc/musl/unistd.c b/src/libc/musl/unistd.c new file mode 100644 index 00000000000..354fb5d016b --- /dev/null +++ b/src/libc/musl/unistd.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include +#include + +int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags) { + /* Kernel-side the syscall expects fds as unsigned integers (just like close() actually), while + * userspace exclusively uses signed integers for fds. glibc chose to expose it 1:1 however, hence we + * do so here too, even if we end up passing signed fds to it most of the time. */ + return syscall(__NR_close_range, first_fd, end_fd, flags); +} + +int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags) { + return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags); +} diff --git a/src/libc/unistd.c b/src/libc/unistd.c index 99777b3316e..81728631c6b 100644 --- a/src/libc/unistd.c +++ b/src/libc/unistd.c @@ -3,21 +3,6 @@ #include #include -#if !HAVE_CLOSE_RANGE -int missing_close_range(unsigned first_fd, unsigned end_fd, unsigned flags) { - /* Kernel-side the syscall expects fds as unsigned integers (just like close() actually), while - * userspace exclusively uses signed integers for fds. glibc chose to expose it 1:1 however, hence we - * do so here too, even if we end up passing signed fds to it most of the time. */ - return syscall(__NR_close_range, first_fd, end_fd, flags); -} -#endif - -#if !HAVE_EXECVEAT -int missing_execveat(int dirfd, const char *pathname, char * const argv[], char * const envp[], int flags) { - return syscall(__NR_execveat, dirfd, pathname, argv, envp, flags); -} -#endif - #if !HAVE_PIVOT_ROOT int missing_pivot_root(const char *new_root, const char *put_old) { return syscall(__NR_pivot_root, new_root, put_old);