]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Bump required minimum version of glibc to 2.34
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 2 Jan 2026 23:23:16 +0000 (08:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 28 Jan 2026 01:56:53 +0000 (10:56 +0900)
Major distributions already have glibc >= 2.34.
Let's bump the required minimum version.

Note, glibc-2.34 was released on 2021-08-01.

13 files changed:
README
meson.build
src/basic/errno-list.c
src/include/musl/malloc.h
src/include/musl/unistd.h
src/include/override/malloc.h [deleted file]
src/include/override/sys/generate-syscall.py
src/include/override/sys/random.h [deleted file]
src/include/override/sys/syscall.h
src/include/override/unistd.h
src/libc/musl/meson.build
src/libc/musl/unistd.c [new file with mode: 0644]
src/libc/unistd.c

diff --git a/README b/README
index 6d6b5729fcf1be0fb6bc66113e5aaadffd556c66..1bbcd5f671ccc2ec62a58d79baf5b480807bb637 100644 (file)
--- 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)
index ec724bd283f399092ac3935c7497d8714e893ab9..e091631ca82da018475f647e19b971ad6fb9b2ac 100644 (file)
@@ -565,10 +565,6 @@ foreach ident : [
         ['renameat2',         '''#include <stdio.h>'''],        # since musl-1.2.6
         ['set_mempolicy',     '''#include <sys/syscall.h>'''],  # declared at numaif.h provided by libnuma, which we do not use
         ['get_mempolicy',     '''#include <sys/syscall.h>'''],  # declared at numaif.h provided by libnuma, which we do not use
-        ['strerrorname_np',   '''#include <string.h>'''],       # since glibc-2.32
-        ['mallinfo2',         '''#include <malloc.h>'''],       # since glibc-2.33
-        ['execveat',          '''#include <unistd.h>'''],       # since glibc-2.34
-        ['close_range',       '''#include <unistd.h>'''],       # since glibc-2.34
         ['epoll_pwait2',      '''#include <sys/epoll.h>'''],    # since glibc-2.35
         ['fsconfig',          '''#include <sys/mount.h>'''],    # since glibc-2.36
         ['fsmount',           '''#include <sys/mount.h>'''],    # since glibc-2.36
index a67b6087000ed2807a3e5a1fe3e62d80d15406c3..b6662bf05aad532d6308211baecefcaa2e16cd06 100644 (file)
@@ -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;
index 9d15d4bf9115bb23248869cc4abb7460cbc5d904..6e22d7e06f77569af45b52a7d5fd8727d6a979c0 100644 (file)
@@ -1,27 +1,26 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include_next <malloc.h>
+
 #include <errno.h>
 #include <stdio.h>
 
-/* 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 <malloc.h>
index 8fbaaf63e37222fb20cd4acf5ede66a216e56f12..e58fee356af9126c3d82895e0e215a8ec2eb5bf8 100644 (file)
@@ -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 (file)
index fff5cd6..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include_next <malloc.h>        /* 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
index e5ca97272648e2faec06b7a619757edef767ee88..6f449f9dc13308449731af6e7409fa6393a7ac61 100755 (executable)
@@ -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 (file)
index 9529dc1..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include_next <sys/random.h>    /* IWYU pragma: export */
-
-#include <assert.h>
-
-/* Defined since glibc-2.32. */
-#ifndef GRND_INSECURE
-#  define GRND_INSECURE 0x0004
-#else
-static_assert(GRND_INSECURE == 0x0004, "");
-#endif
index b6922a052db796b31a2ed1210dfac41c443f61f5..da2f780bed39ca954a2f033fd381f0e983482ab6 100644 (file)
 #    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
index b32587417b3443a1d375917e1557f69fa9781ea0..bd558694eebddbcf68f6d90fc66b5306eb7672e0 100644 (file)
@@ -3,20 +3,6 @@
 
 #include_next <unistd.h>        /* 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
index 4fabac7bcc9df8dd643b15aff0425617b1efe2bd..acda973b8d9b25f6ef5d5b3145be33c3628f6657 100644 (file)
@@ -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 (file)
index 0000000..354fb5d
--- /dev/null
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/syscall.h>
+#include <unistd.h>
+
+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);
+}
index 99777b3316e7420b8a933865bc2796c25d110dbf..81728631c6b43260b2eda87a410c4d5b747a6502 100644 (file)
@@ -3,21 +3,6 @@
 #include <sys/syscall.h>
 #include <unistd.h>
 
-#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);