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.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
+15
-18
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -11,4 +11,5 @@ libc_wrapper_sources += files(
|
||||
'stdio.c',
|
||||
'stdlib.c',
|
||||
'string.c',
|
||||
'unistd.c',
|
||||
)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user