backport patches from upstream 2.34 branch
This commit is contained in:
parent
def4b16e2e
commit
5bb3b84187
399
Fix-glibc-2.34-ABI-omission-missing-GLIBC_2.34-in-dy.patch
Normal file
399
Fix-glibc-2.34-ABI-omission-missing-GLIBC_2.34-in-dy.patch
Normal file
@ -0,0 +1,399 @@
|
||||
From 948ebc098ed3cd928ea10997f990115e7770bda3 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Thu, 27 Jan 2022 16:03:58 +0100
|
||||
Subject: [PATCH] Fix glibc 2.34 ABI omission (missing GLIBC_2.34 in dynamic
|
||||
loader)
|
||||
|
||||
The glibc 2.34 release really should have added a GLIBC_2.34
|
||||
symbol to the dynamic loader. With it, we could move functions such
|
||||
as dlopen or pthread_key_create that work on process-global state
|
||||
into the dynamic loader (once we have fixed a longstanding issue
|
||||
with static linking). Without the GLIBC_2.34 symbol, yet another
|
||||
new symbol version would be needed because old glibc will fail to
|
||||
load binaries due to the missing symbol version in ld.so that newly
|
||||
linked programs will require.
|
||||
|
||||
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||
(cherry picked from commit af121ae3e7cd12628c91ecfc46a9d65313a6e972)
|
||||
---
|
||||
elf/Makefile | 1 +
|
||||
elf/Versions | 3 ++
|
||||
elf/dl-compat.c | 32 +++++++++++++++++++
|
||||
sysdeps/mach/hurd/i386/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/aarch64/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/alpha/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/arc/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/arm/be/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/arm/le/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/csky/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/hppa/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/i386/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/ia64/ld.abilist | 1 +
|
||||
.../unix/sysv/linux/m68k/coldfire/ld.abilist | 1 +
|
||||
.../unix/sysv/linux/m68k/m680x0/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/microblaze/ld.abilist | 1 +
|
||||
.../unix/sysv/linux/mips/mips32/ld.abilist | 1 +
|
||||
.../sysv/linux/mips/mips64/n32/ld.abilist | 1 +
|
||||
.../sysv/linux/mips/mips64/n64/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/nios2/ld.abilist | 1 +
|
||||
.../sysv/linux/powerpc/powerpc32/ld.abilist | 1 +
|
||||
.../linux/powerpc/powerpc64/be/ld.abilist | 1 +
|
||||
.../linux/powerpc/powerpc64/le/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist | 1 +
|
||||
.../unix/sysv/linux/s390/s390-32/ld.abilist | 1 +
|
||||
.../unix/sysv/linux/s390/s390-64/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/sh/be/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/sh/le/ld.abilist | 1 +
|
||||
.../unix/sysv/linux/sparc/sparc32/ld.abilist | 1 +
|
||||
.../unix/sysv/linux/sparc/sparc64/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/x86_64/64/ld.abilist | 1 +
|
||||
sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist | 1 +
|
||||
33 files changed, 66 insertions(+)
|
||||
create mode 100644 elf/dl-compat.c
|
||||
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index f930e04e27..af4ccb978c 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -115,6 +115,7 @@ elide-routines.os = \
|
||||
# interpreter and operating independent of libc.
|
||||
rtld-routines = \
|
||||
$(all-dl-routines) \
|
||||
+ dl-compat \
|
||||
dl-conflict \
|
||||
dl-diagnostics \
|
||||
dl-diagnostics-cpu \
|
||||
diff --git a/elf/Versions b/elf/Versions
|
||||
index 775aab62af..2af210b8f7 100644
|
||||
--- a/elf/Versions
|
||||
+++ b/elf/Versions
|
||||
@@ -48,6 +48,9 @@ ld {
|
||||
# stack canary
|
||||
__stack_chk_guard;
|
||||
}
|
||||
+ GLIBC_2.34 {
|
||||
+ __rtld_version_placeholder;
|
||||
+ }
|
||||
GLIBC_PRIVATE {
|
||||
# Those are in the dynamic linker, but used by libc.so.
|
||||
__libc_enable_secure;
|
||||
diff --git a/elf/dl-compat.c b/elf/dl-compat.c
|
||||
new file mode 100644
|
||||
index 0000000000..cc560c5159
|
||||
--- /dev/null
|
||||
+++ b/elf/dl-compat.c
|
||||
@@ -0,0 +1,32 @@
|
||||
+/* Placeholder compatibility symbols.
|
||||
+ Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <shlib-compat.h>
|
||||
+#include <sys/cdefs.h>
|
||||
+
|
||||
+/* GLIBC_2.34 placeholder for future symbol moves. */
|
||||
+
|
||||
+void
|
||||
+attribute_compat_text_section
|
||||
+__attribute_used__
|
||||
+__rtld_version_placeholder_1 (void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+compat_symbol (ld, __rtld_version_placeholder_1,
|
||||
+ __rtld_version_placeholder, GLIBC_2_34);
|
||||
diff --git a/sysdeps/mach/hurd/i386/ld.abilist b/sysdeps/mach/hurd/i386/ld.abilist
|
||||
index 7e20c5e7ce..ebba31f770 100644
|
||||
--- a/sysdeps/mach/hurd/i386/ld.abilist
|
||||
+++ b/sysdeps/mach/hurd/i386/ld.abilist
|
||||
@@ -16,3 +16,4 @@ GLIBC_2.2.6 _r_debug D 0x14
|
||||
GLIBC_2.2.6 abort F
|
||||
GLIBC_2.3 ___tls_get_addr F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/aarch64/ld.abilist b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
|
||||
index 80b2fe6725..b7196a80e2 100644
|
||||
--- a/sysdeps/unix/sysv/linux/aarch64/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.17 __stack_chk_guard D 0x8
|
||||
GLIBC_2.17 __tls_get_addr F
|
||||
GLIBC_2.17 _dl_mcount F
|
||||
GLIBC_2.17 _r_debug D 0x28
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/alpha/ld.abilist b/sysdeps/unix/sysv/linux/alpha/ld.abilist
|
||||
index 98a03f611f..13f7fc74af 100644
|
||||
--- a/sysdeps/unix/sysv/linux/alpha/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/alpha/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.0 _r_debug D 0x28
|
||||
GLIBC_2.1 __libc_stack_end D 0x8
|
||||
GLIBC_2.1 _dl_mcount F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x8
|
||||
diff --git a/sysdeps/unix/sysv/linux/arc/ld.abilist b/sysdeps/unix/sysv/linux/arc/ld.abilist
|
||||
index 048f17c848..7284383a6b 100644
|
||||
--- a/sysdeps/unix/sysv/linux/arc/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/arc/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.32 __stack_chk_guard D 0x4
|
||||
GLIBC_2.32 __tls_get_addr F
|
||||
GLIBC_2.32 _dl_mcount F
|
||||
GLIBC_2.32 _r_debug D 0x14
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/arm/be/ld.abilist b/sysdeps/unix/sysv/linux/arm/be/ld.abilist
|
||||
index cc8825c3bc..7987bbae11 100644
|
||||
--- a/sysdeps/unix/sysv/linux/arm/be/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/arm/be/ld.abilist
|
||||
@@ -1,3 +1,4 @@
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __libc_stack_end D 0x4
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
GLIBC_2.4 __tls_get_addr F
|
||||
diff --git a/sysdeps/unix/sysv/linux/arm/le/ld.abilist b/sysdeps/unix/sysv/linux/arm/le/ld.abilist
|
||||
index cc8825c3bc..7987bbae11 100644
|
||||
--- a/sysdeps/unix/sysv/linux/arm/le/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/arm/le/ld.abilist
|
||||
@@ -1,3 +1,4 @@
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __libc_stack_end D 0x4
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
GLIBC_2.4 __tls_get_addr F
|
||||
diff --git a/sysdeps/unix/sysv/linux/csky/ld.abilist b/sysdeps/unix/sysv/linux/csky/ld.abilist
|
||||
index 564ac09737..4939b20631 100644
|
||||
--- a/sysdeps/unix/sysv/linux/csky/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/csky/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.29 __stack_chk_guard D 0x4
|
||||
GLIBC_2.29 __tls_get_addr F
|
||||
GLIBC_2.29 _dl_mcount F
|
||||
GLIBC_2.29 _r_debug D 0x14
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/hppa/ld.abilist b/sysdeps/unix/sysv/linux/hppa/ld.abilist
|
||||
index d155a59843..7cc9ebd792 100644
|
||||
--- a/sysdeps/unix/sysv/linux/hppa/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/hppa/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.2 __libc_stack_end D 0x4
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.2 _r_debug D 0x14
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
diff --git a/sysdeps/unix/sysv/linux/i386/ld.abilist b/sysdeps/unix/sysv/linux/i386/ld.abilist
|
||||
index 0478e22071..e8d187b14d 100644
|
||||
--- a/sysdeps/unix/sysv/linux/i386/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/i386/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.1 __libc_stack_end D 0x4
|
||||
GLIBC_2.1 _dl_mcount F
|
||||
GLIBC_2.3 ___tls_get_addr F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/ia64/ld.abilist b/sysdeps/unix/sysv/linux/ia64/ld.abilist
|
||||
index 33f91199bf..be5122650a 100644
|
||||
--- a/sysdeps/unix/sysv/linux/ia64/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/ia64/ld.abilist
|
||||
@@ -2,3 +2,4 @@ GLIBC_2.2 __libc_stack_end D 0x8
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.2 _r_debug D 0x28
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist
|
||||
index cc8825c3bc..7987bbae11 100644
|
||||
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/ld.abilist
|
||||
@@ -1,3 +1,4 @@
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __libc_stack_end D 0x4
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
GLIBC_2.4 __tls_get_addr F
|
||||
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist
|
||||
index 3ba474c27f..4f2854edf7 100644
|
||||
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.0 _r_debug D 0x14
|
||||
GLIBC_2.1 __libc_stack_end D 0x4
|
||||
GLIBC_2.1 _dl_mcount F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
diff --git a/sysdeps/unix/sysv/linux/microblaze/ld.abilist b/sysdeps/unix/sysv/linux/microblaze/ld.abilist
|
||||
index a4933c3541..9f0fdeca38 100644
|
||||
--- a/sysdeps/unix/sysv/linux/microblaze/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/microblaze/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.18 __stack_chk_guard D 0x4
|
||||
GLIBC_2.18 __tls_get_addr F
|
||||
GLIBC_2.18 _dl_mcount F
|
||||
GLIBC_2.18 _r_debug D 0x14
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist
|
||||
index be09641a48..f750067d5c 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/mips32/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.0 _r_debug D 0x14
|
||||
GLIBC_2.2 __libc_stack_end D 0x4
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist
|
||||
index be09641a48..f750067d5c 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.0 _r_debug D 0x14
|
||||
GLIBC_2.2 __libc_stack_end D 0x4
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
|
||||
index 1ea36e13f2..2fba6a9b6e 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.0 _r_debug D 0x28
|
||||
GLIBC_2.2 __libc_stack_end D 0x8
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x8
|
||||
diff --git a/sysdeps/unix/sysv/linux/nios2/ld.abilist b/sysdeps/unix/sysv/linux/nios2/ld.abilist
|
||||
index 52178802dd..57dfad5a53 100644
|
||||
--- a/sysdeps/unix/sysv/linux/nios2/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/nios2/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.21 __stack_chk_guard D 0x4
|
||||
GLIBC_2.21 __tls_get_addr F
|
||||
GLIBC_2.21 _dl_mcount F
|
||||
GLIBC_2.21 _r_debug D 0x14
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist
|
||||
index 4bbfba7a61..e896607392 100644
|
||||
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/ld.abilist
|
||||
@@ -4,3 +4,4 @@ GLIBC_2.1 _dl_mcount F
|
||||
GLIBC_2.22 __tls_get_addr_opt F
|
||||
GLIBC_2.23 __parse_hwcap_and_convert_at_platform F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
|
||||
index 283fb4510b..ce0bc63959 100644
|
||||
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
|
||||
@@ -4,3 +4,4 @@ GLIBC_2.3 __libc_stack_end D 0x8
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
GLIBC_2.3 _dl_mcount F
|
||||
GLIBC_2.3 _r_debug D 0x28
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
|
||||
index b1f313c7cd..65b22674d2 100644
|
||||
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
|
||||
@@ -4,3 +4,4 @@ GLIBC_2.17 _dl_mcount F
|
||||
GLIBC_2.17 _r_debug D 0x28
|
||||
GLIBC_2.22 __tls_get_addr_opt F
|
||||
GLIBC_2.23 __parse_hwcap_and_convert_at_platform F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist
|
||||
index 94ca64c43d..5ad4c81d12 100644
|
||||
--- a/sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.33 __stack_chk_guard D 0x4
|
||||
GLIBC_2.33 __tls_get_addr F
|
||||
GLIBC_2.33 _dl_mcount F
|
||||
GLIBC_2.33 _r_debug D 0x14
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
|
||||
index 845f356c3c..479efdea9b 100644
|
||||
--- a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
|
||||
@@ -3,3 +3,4 @@ GLIBC_2.27 __stack_chk_guard D 0x8
|
||||
GLIBC_2.27 __tls_get_addr F
|
||||
GLIBC_2.27 _dl_mcount F
|
||||
GLIBC_2.27 _r_debug D 0x28
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist
|
||||
index b56f005beb..d5ecb636bb 100644
|
||||
--- a/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/ld.abilist
|
||||
@@ -2,3 +2,4 @@ GLIBC_2.0 _r_debug D 0x14
|
||||
GLIBC_2.1 __libc_stack_end D 0x4
|
||||
GLIBC_2.1 _dl_mcount F
|
||||
GLIBC_2.3 __tls_get_offset F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
|
||||
index 6f788a086d..62a5e1d99a 100644
|
||||
--- a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
|
||||
@@ -2,3 +2,4 @@ GLIBC_2.2 __libc_stack_end D 0x8
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.2 _r_debug D 0x28
|
||||
GLIBC_2.3 __tls_get_offset F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/sh/be/ld.abilist b/sysdeps/unix/sysv/linux/sh/be/ld.abilist
|
||||
index d155a59843..7cc9ebd792 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sh/be/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/sh/be/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.2 __libc_stack_end D 0x4
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.2 _r_debug D 0x14
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
diff --git a/sysdeps/unix/sysv/linux/sh/le/ld.abilist b/sysdeps/unix/sysv/linux/sh/le/ld.abilist
|
||||
index d155a59843..7cc9ebd792 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sh/le/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/sh/le/ld.abilist
|
||||
@@ -2,4 +2,5 @@ GLIBC_2.2 __libc_stack_end D 0x4
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.2 _r_debug D 0x14
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
GLIBC_2.4 __stack_chk_guard D 0x4
|
||||
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist
|
||||
index 0c6610e3c2..2e60543498 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/ld.abilist
|
||||
@@ -2,3 +2,4 @@ GLIBC_2.0 _r_debug D 0x14
|
||||
GLIBC_2.1 __libc_stack_end D 0x4
|
||||
GLIBC_2.1 _dl_mcount F
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
|
||||
index 33f91199bf..be5122650a 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
|
||||
@@ -2,3 +2,4 @@ GLIBC_2.2 __libc_stack_end D 0x8
|
||||
GLIBC_2.2 _dl_mcount F
|
||||
GLIBC_2.2 _r_debug D 0x28
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
|
||||
index d3cdf7611e..afddaec57c 100644
|
||||
--- a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
|
||||
@@ -2,3 +2,4 @@ GLIBC_2.2.5 __libc_stack_end D 0x8
|
||||
GLIBC_2.2.5 _dl_mcount F
|
||||
GLIBC_2.2.5 _r_debug D 0x28
|
||||
GLIBC_2.3 __tls_get_addr F
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist
|
||||
index c70bccf782..defc488d13 100644
|
||||
--- a/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist
|
||||
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/ld.abilist
|
||||
@@ -2,3 +2,4 @@ GLIBC_2.16 __libc_stack_end D 0x4
|
||||
GLIBC_2.16 __tls_get_addr F
|
||||
GLIBC_2.16 _dl_mcount F
|
||||
GLIBC_2.16 _r_debug D 0x14
|
||||
+GLIBC_2.34 __rtld_version_placeholder F
|
||||
--
|
||||
2.27.0
|
||||
|
||||
498
Linux-Only-generate-64-bit-timestamps-for-64-bit-tim.patch
Normal file
498
Linux-Only-generate-64-bit-timestamps-for-64-bit-tim.patch
Normal file
@ -0,0 +1,498 @@
|
||||
From 489d0b8b32548bc569cd3067aebf98b030720753 Mon Sep 17 00:00:00 2001
|
||||
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Thu, 27 Jan 2022 16:45:18 -0300
|
||||
Subject: [PATCH] Linux: Only generate 64 bit timestamps for 64 bit time_t
|
||||
recvmsg/recvmmsg
|
||||
|
||||
The timestamps created by __convert_scm_timestamps only make sense for
|
||||
64 bit time_t programs, 32 bit time_t programs will ignore 64 bit time_t
|
||||
timestamps since SO_TIMESTAMP will be defined to old values (either by
|
||||
glibc or kernel headers).
|
||||
|
||||
Worse, if the buffer is not suffice MSG_CTRUNC is set to indicate it
|
||||
(which breaks some programs [1]).
|
||||
|
||||
This patch makes only 64 bit time_t recvmsg and recvmmsg to call
|
||||
__convert_scm_timestamps. Also, the assumption to called it is changed
|
||||
from __ASSUME_TIME64_SYSCALLS to __TIMESIZE != 64 since the setsockopt
|
||||
might be called by libraries built without __TIME_BITS=64. The
|
||||
MSG_CTRUNC is only set for the 64 bit symbols, it should happen only
|
||||
if 64 bit time_t programs run older kernels.
|
||||
|
||||
Checked on x86_64-linux-gnu and i686-linux-gnu.
|
||||
|
||||
[1] https://github.com/systemd/systemd/pull/20567
|
||||
|
||||
Reviewed-by: Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
(cherry picked from commit 948ce73b31fdb0860bcec4b8e62b14e88234f98a)
|
||||
---
|
||||
include/sys/socket.h | 10 +-
|
||||
sysdeps/unix/sysv/linux/Makefile | 10 +-
|
||||
sysdeps/unix/sysv/linux/recvmmsg.c | 36 ++-
|
||||
sysdeps/unix/sysv/linux/recvmsg.c | 34 ++-
|
||||
.../tst-socket-timestamp-compat-time64.c | 1 +
|
||||
.../sysv/linux/tst-socket-timestamp-compat.c | 265 ++++++++++++++++++
|
||||
6 files changed, 330 insertions(+), 26 deletions(-)
|
||||
create mode 100644 sysdeps/unix/sysv/linux/tst-socket-timestamp-compat-time64.c
|
||||
create mode 100644 sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
|
||||
|
||||
diff --git a/include/sys/socket.h b/include/sys/socket.h
|
||||
index a1d749f9fa..6e4cf5077f 100644
|
||||
--- a/include/sys/socket.h
|
||||
+++ b/include/sys/socket.h
|
||||
@@ -98,15 +98,21 @@ extern int __sendmmsg (int __fd, struct mmsghdr *__vmessages,
|
||||
libc_hidden_proto (__sendmmsg)
|
||||
#endif
|
||||
|
||||
-/* Receive a message as described by MESSAGE from socket FD.
|
||||
- Returns the number of bytes read or -1 for errors. */
|
||||
extern ssize_t __libc_recvmsg (int __fd, struct msghdr *__message,
|
||||
int __flags);
|
||||
extern ssize_t __recvmsg (int __fd, struct msghdr *__message,
|
||||
int __flags) attribute_hidden;
|
||||
#if __TIMESIZE == 64
|
||||
+# define __libc_recvmsg64 __libc_recvmsg
|
||||
+# define __recvmsg64 __recvmsg
|
||||
# define __recvmmsg64 __recvmmsg
|
||||
#else
|
||||
+extern ssize_t __libc_recvmsg64 (int __fd, struct msghdr *__message,
|
||||
+ int __flags);
|
||||
+extern ssize_t __recvmsg64 (int __fd, struct msghdr *__message,
|
||||
+ int __flags);
|
||||
+/* Receive a message as described by MESSAGE from socket FD.
|
||||
+ Returns the number of bytes read or -1 for errors. */
|
||||
extern int __recvmmsg64 (int __fd, struct mmsghdr *vmessages,
|
||||
unsigned int vlen, int flags,
|
||||
struct __timespec64 *timeout);
|
||||
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
|
||||
index 964f641ef9..c34774806f 100644
|
||||
--- a/sysdeps/unix/sysv/linux/Makefile
|
||||
+++ b/sysdeps/unix/sysv/linux/Makefile
|
||||
@@ -262,8 +262,14 @@ sysdep_routines += cmsg_nxthdr
|
||||
CFLAGS-recvmmsg.c = -fexceptions -fasynchronous-unwind-tables
|
||||
CFLAGS-sendmmsg.c = -fexceptions -fasynchronous-unwind-tables
|
||||
|
||||
-tests += tst-socket-timestamp
|
||||
-tests-time64 += tst-socket-timestamp-time64
|
||||
+tests += \
|
||||
+ tst-socket-timestamp \
|
||||
+ tst-socket-timestamp-compat \
|
||||
+ # tests
|
||||
+tests-time64 += \
|
||||
+ tst-socket-timestamp-time64 \
|
||||
+ tst-socket-timestamp-compat-time64
|
||||
+ # tests-time64
|
||||
|
||||
tests-special += $(objpfx)tst-socket-consts.out
|
||||
$(objpfx)tst-socket-consts.out: ../sysdeps/unix/sysv/linux/tst-socket-consts.py
|
||||
diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c
|
||||
index 5cd107ffa9..fca9f6582d 100644
|
||||
--- a/sysdeps/unix/sysv/linux/recvmmsg.c
|
||||
+++ b/sysdeps/unix/sysv/linux/recvmmsg.c
|
||||
@@ -20,9 +20,9 @@
|
||||
#include <sysdep.h>
|
||||
#include <socketcall.h>
|
||||
|
||||
-int
|
||||
-__recvmmsg64 (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
|
||||
- struct __timespec64 *timeout)
|
||||
+static int
|
||||
+recvmmsg_syscall (int fd, struct mmsghdr *vmessages, unsigned int vlen,
|
||||
+ int flags, struct __timespec64 *timeout)
|
||||
{
|
||||
#ifndef __NR_recvmmsg_time64
|
||||
# define __NR_recvmmsg_time64 __NR_recvmmsg
|
||||
@@ -45,12 +45,6 @@ __recvmmsg64 (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
|
||||
pts32 = &ts32;
|
||||
}
|
||||
|
||||
- socklen_t csize[IOV_MAX];
|
||||
- if (vlen > IOV_MAX)
|
||||
- vlen = IOV_MAX;
|
||||
- for (int i = 0; i < vlen; i++)
|
||||
- csize[i] = vmessages[i].msg_hdr.msg_controllen;
|
||||
-
|
||||
# ifdef __ASSUME_RECVMMSG_SYSCALL
|
||||
r = SYSCALL_CANCEL (recvmmsg, fd, vmessages, vlen, flags, pts32);
|
||||
# else
|
||||
@@ -60,11 +54,31 @@ __recvmmsg64 (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
|
||||
{
|
||||
if (timeout != NULL)
|
||||
*timeout = valid_timespec_to_timespec64 (ts32);
|
||||
+ }
|
||||
+#endif
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+__recvmmsg64 (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
|
||||
+ struct __timespec64 *timeout)
|
||||
+{
|
||||
+#if __TIMESIZE != 64
|
||||
+ socklen_t csize[IOV_MAX];
|
||||
+ if (vlen > IOV_MAX)
|
||||
+ vlen = IOV_MAX;
|
||||
+ for (int i = 0; i < vlen; i++)
|
||||
+ csize[i] = vmessages[i].msg_hdr.msg_controllen;
|
||||
+#endif
|
||||
|
||||
+ int r = recvmmsg_syscall (fd, vmessages, vlen, flags, timeout);
|
||||
+#if __TIMESIZE != 64
|
||||
+ if (r > 0)
|
||||
+ {
|
||||
for (int i=0; i < r; i++)
|
||||
__convert_scm_timestamps (&vmessages[i].msg_hdr, csize[i]);
|
||||
}
|
||||
-#endif /* __ASSUME_TIME64_SYSCALLS */
|
||||
+#endif
|
||||
return r;
|
||||
}
|
||||
#if __TIMESIZE != 64
|
||||
@@ -80,7 +94,7 @@ __recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
|
||||
ts64 = valid_timespec_to_timespec64 (*timeout);
|
||||
pts64 = &ts64;
|
||||
}
|
||||
- int r = __recvmmsg64 (fd, vmessages, vlen, flags, pts64);
|
||||
+ int r = recvmmsg_syscall (fd, vmessages, vlen, flags, pts64);
|
||||
if (r >= 0 && timeout != NULL)
|
||||
/* The remanining timeout will be always less the input TIMEOUT. */
|
||||
*timeout = valid_timespec64_to_timespec (ts64);
|
||||
diff --git a/sysdeps/unix/sysv/linux/recvmsg.c b/sysdeps/unix/sysv/linux/recvmsg.c
|
||||
index 07212f7c86..c4b4704fd6 100644
|
||||
--- a/sysdeps/unix/sysv/linux/recvmsg.c
|
||||
+++ b/sysdeps/unix/sysv/linux/recvmsg.c
|
||||
@@ -20,29 +20,41 @@
|
||||
#include <sysdep-cancel.h>
|
||||
#include <socketcall.h>
|
||||
|
||||
+static int
|
||||
+__recvmsg_syscall (int fd, struct msghdr *msg, int flags)
|
||||
+{
|
||||
+#ifdef __ASSUME_RECVMSG_SYSCALL
|
||||
+ return SYSCALL_CANCEL (recvmsg, fd, msg, flags);
|
||||
+#else
|
||||
+ return SOCKETCALL_CANCEL (recvmsg, fd, msg, flags);
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
ssize_t
|
||||
-__libc_recvmsg (int fd, struct msghdr *msg, int flags)
|
||||
+__libc_recvmsg64 (int fd, struct msghdr *msg, int flags)
|
||||
{
|
||||
ssize_t r;
|
||||
-#ifndef __ASSUME_TIME64_SYSCALLS
|
||||
+#if __TIMESIZE != 64
|
||||
socklen_t orig_controllen = msg != NULL ? msg->msg_controllen : 0;
|
||||
#endif
|
||||
|
||||
-#ifdef __ASSUME_RECVMSG_SYSCALL
|
||||
- r = SYSCALL_CANCEL (recvmsg, fd, msg, flags);
|
||||
-#else
|
||||
- r = SOCKETCALL_CANCEL (recvmsg, fd, msg, flags);
|
||||
-#endif
|
||||
+ r = __recvmsg_syscall (fd, msg, flags);
|
||||
|
||||
-#ifndef __ASSUME_TIME64_SYSCALLS
|
||||
+#if __TIMESIZE != 64
|
||||
if (r >= 0 && orig_controllen != 0)
|
||||
__convert_scm_timestamps (msg, orig_controllen);
|
||||
#endif
|
||||
|
||||
return r;
|
||||
}
|
||||
-weak_alias (__libc_recvmsg, recvmsg)
|
||||
-weak_alias (__libc_recvmsg, __recvmsg)
|
||||
#if __TIMESIZE != 64
|
||||
-weak_alias (__recvmsg, __recvmsg64)
|
||||
+weak_alias (__libc_recvmsg64, __recvmsg64)
|
||||
+
|
||||
+ssize_t
|
||||
+__libc_recvmsg (int fd, struct msghdr *msg, int flags)
|
||||
+{
|
||||
+ return __recvmsg_syscall (fd, msg, flags);
|
||||
+}
|
||||
#endif
|
||||
+weak_alias (__libc_recvmsg, recvmsg)
|
||||
+weak_alias (__libc_recvmsg, __recvmsg)
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat-time64.c b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat-time64.c
|
||||
new file mode 100644
|
||||
index 0000000000..96a0bef0bf
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat-time64.c
|
||||
@@ -0,0 +1 @@
|
||||
+#include "tst-socket-timestamp-compat.c"
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
|
||||
new file mode 100644
|
||||
index 0000000000..de261dae5a
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
|
||||
@@ -0,0 +1,265 @@
|
||||
+/* Check recvmsg/recvmmsg 64-bit timestamp support.
|
||||
+ Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <arpa/inet.h>
|
||||
+#include <string.h>
|
||||
+#include <support/check.h>
|
||||
+#include <support/xsocket.h>
|
||||
+#include <support/xunistd.h>
|
||||
+#include <stdbool.h>
|
||||
+
|
||||
+/* AF_INET socket and address used to receive data. */
|
||||
+static int srv;
|
||||
+static struct sockaddr_in srv_addr;
|
||||
+
|
||||
+static int
|
||||
+do_sendto (const struct sockaddr_in *addr, int payload)
|
||||
+{
|
||||
+ int s = xsocket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
|
||||
+ xconnect (s, (const struct sockaddr *) addr, sizeof (*addr));
|
||||
+
|
||||
+ xsendto (s, &payload, sizeof (payload), 0, (const struct sockaddr *) addr,
|
||||
+ sizeof (*addr));
|
||||
+
|
||||
+ xclose (s);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+do_recvmsg_ancillary (bool use_multi_call, struct mmsghdr *mmhdr,
|
||||
+ void *msgbuf, size_t msgbuflen, int exp_payload)
|
||||
+{
|
||||
+ int payload;
|
||||
+ struct iovec iov =
|
||||
+ {
|
||||
+ .iov_base = &payload,
|
||||
+ .iov_len = sizeof (payload)
|
||||
+ };
|
||||
+ mmhdr->msg_hdr.msg_name = NULL;
|
||||
+ mmhdr->msg_hdr.msg_iov = &iov;
|
||||
+ mmhdr->msg_hdr.msg_iovlen = 1;
|
||||
+ mmhdr->msg_hdr.msg_control = msgbuf;
|
||||
+ mmhdr->msg_hdr.msg_controllen = msgbuflen;
|
||||
+
|
||||
+ int r;
|
||||
+ if (use_multi_call)
|
||||
+ {
|
||||
+ r = recvmmsg (srv, mmhdr, 1, 0, NULL);
|
||||
+ if (r >= 0)
|
||||
+ r = mmhdr->msg_len;
|
||||
+ }
|
||||
+ else
|
||||
+ r = recvmsg (srv, &mmhdr->msg_hdr, 0);
|
||||
+ TEST_COMPARE (r, sizeof (int));
|
||||
+ TEST_COMPARE (payload, exp_payload);
|
||||
+}
|
||||
+
|
||||
+/* Check if recvmsg create the additional 64 bit timestamp if only 32 bit
|
||||
+ is enabled for 64 bit recvmsg symbol. */
|
||||
+static void
|
||||
+do_test_large_buffer (bool mc)
|
||||
+{
|
||||
+ struct mmsghdr mmhdr = { 0 };
|
||||
+ /* It should be large enought for either timeval/timespec and the
|
||||
+ 64 time type as well. */
|
||||
+
|
||||
+ union
|
||||
+ {
|
||||
+ struct cmsghdr cmsghdr;
|
||||
+ char msgbuf[512];
|
||||
+ } control;
|
||||
+
|
||||
+ /* Enable 32 bit timeval precision and check if no 64 bit timeval stamp
|
||||
+ is created. */
|
||||
+ {
|
||||
+ int r = setsockopt (srv, SOL_SOCKET, SO_TIMESTAMP_OLD, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+
|
||||
+ do_sendto (&srv_addr, 42);
|
||||
+ do_recvmsg_ancillary (mc, &mmhdr, &control, sizeof control, 42);
|
||||
+
|
||||
+ bool found_timestamp = false;
|
||||
+ for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mmhdr.msg_hdr);
|
||||
+ cmsg != NULL;
|
||||
+ cmsg = CMSG_NXTHDR (&mmhdr.msg_hdr, cmsg))
|
||||
+ {
|
||||
+ if (cmsg->cmsg_level != SOL_SOCKET)
|
||||
+ continue;
|
||||
+
|
||||
+ if (sizeof (time_t) > 4 && cmsg->cmsg_type == SO_TIMESTAMP_NEW)
|
||||
+ found_timestamp = true;
|
||||
+ else
|
||||
+ TEST_VERIFY (cmsg->cmsg_type != SO_TIMESTAMP_NEW);
|
||||
+ }
|
||||
+
|
||||
+ TEST_COMPARE (found_timestamp, sizeof (time_t) > 4);
|
||||
+ }
|
||||
+
|
||||
+ /* Same as before, but for timespec. */
|
||||
+ {
|
||||
+ int r = setsockopt (srv, SOL_SOCKET, SO_TIMESTAMPNS_OLD, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+
|
||||
+ do_sendto (&srv_addr, 42);
|
||||
+ do_recvmsg_ancillary (mc, &mmhdr, &control, sizeof control, 42);
|
||||
+
|
||||
+ bool found_timestamp = false;
|
||||
+ for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mmhdr.msg_hdr);
|
||||
+ cmsg != NULL;
|
||||
+ cmsg = CMSG_NXTHDR (&mmhdr.msg_hdr, cmsg))
|
||||
+ {
|
||||
+ if (cmsg->cmsg_level != SOL_SOCKET)
|
||||
+ continue;
|
||||
+
|
||||
+ if (sizeof (time_t) > 4 && cmsg->cmsg_type == SO_TIMESTAMPNS_NEW)
|
||||
+ found_timestamp = true;
|
||||
+ else
|
||||
+ TEST_VERIFY (cmsg->cmsg_type != SO_TIMESTAMPNS_NEW);
|
||||
+ }
|
||||
+
|
||||
+ TEST_COMPARE (found_timestamp, sizeof (time_t) > 4);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/* Check if recvmsg does not create the additional 64 bit timestamp if
|
||||
+ only 32 bit timestamp is enabled if the ancillary buffer is not large
|
||||
+ enought. Also checks if MSG_CTRUNC is set iff for 64 bit recvmsg
|
||||
+ symbol. */
|
||||
+static void
|
||||
+do_test_small_buffer (bool mc)
|
||||
+{
|
||||
+ struct mmsghdr mmhdr = { 0 };
|
||||
+
|
||||
+ /* Enable 32 bit timeval precision and check if no 64 bit timeval stamp
|
||||
+ is created. */
|
||||
+ {
|
||||
+ int r = setsockopt (srv, SOL_SOCKET, SO_TIMESTAMP_OLD, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+
|
||||
+ union
|
||||
+ {
|
||||
+ struct cmsghdr cmsghdr;
|
||||
+ char msgbuf[CMSG_SPACE (sizeof (struct timeval))];
|
||||
+ } control;
|
||||
+
|
||||
+ do_sendto (&srv_addr, 42);
|
||||
+ do_recvmsg_ancillary (mc, &mmhdr, &control, sizeof control, 42);
|
||||
+
|
||||
+ bool found_timestamp = false;
|
||||
+ for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mmhdr.msg_hdr);
|
||||
+ cmsg != NULL;
|
||||
+ cmsg = CMSG_NXTHDR (&mmhdr.msg_hdr, cmsg))
|
||||
+ {
|
||||
+ if (cmsg->cmsg_level != SOL_SOCKET)
|
||||
+ continue;
|
||||
+
|
||||
+ if (sizeof (time_t) > 4 && cmsg->cmsg_type == SO_TIMESTAMP_NEW)
|
||||
+ found_timestamp = true;
|
||||
+ else
|
||||
+ TEST_VERIFY (cmsg->cmsg_type != SO_TIMESTAMP_NEW);
|
||||
+ }
|
||||
+
|
||||
+ if (sizeof (time_t) > 4)
|
||||
+ {
|
||||
+ TEST_VERIFY ((mmhdr.msg_hdr.msg_flags & MSG_CTRUNC));
|
||||
+ TEST_COMPARE (found_timestamp, 0);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ TEST_VERIFY (!(mmhdr.msg_hdr.msg_flags & MSG_CTRUNC));
|
||||
+ TEST_COMPARE (found_timestamp, 0);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Same as before, but for timespec. */
|
||||
+ {
|
||||
+ int r = setsockopt (srv, SOL_SOCKET, SO_TIMESTAMPNS_OLD, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+
|
||||
+ union
|
||||
+ {
|
||||
+ struct cmsghdr cmsghdr;
|
||||
+ char msgbuf[CMSG_SPACE (sizeof (struct timespec))];
|
||||
+ } control;
|
||||
+
|
||||
+ do_sendto (&srv_addr, 42);
|
||||
+ do_recvmsg_ancillary (mc, &mmhdr, &control, sizeof control, 42);
|
||||
+
|
||||
+ bool found_timestamp = false;
|
||||
+ for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mmhdr.msg_hdr);
|
||||
+ cmsg != NULL;
|
||||
+ cmsg = CMSG_NXTHDR (&mmhdr.msg_hdr, cmsg))
|
||||
+ {
|
||||
+ if (cmsg->cmsg_level != SOL_SOCKET)
|
||||
+ continue;
|
||||
+
|
||||
+ if (sizeof (time_t) > 4 && cmsg->cmsg_type == SO_TIMESTAMPNS_NEW)
|
||||
+ found_timestamp = true;
|
||||
+ else
|
||||
+ TEST_VERIFY (cmsg->cmsg_type != SO_TIMESTAMPNS_NEW);
|
||||
+ }
|
||||
+
|
||||
+ if (sizeof (time_t) > 4)
|
||||
+ {
|
||||
+ TEST_VERIFY ((mmhdr.msg_hdr.msg_flags & MSG_CTRUNC));
|
||||
+ TEST_COMPARE (found_timestamp, 0);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ TEST_VERIFY ((mmhdr.msg_hdr.msg_flags & MSG_CTRUNC) == 0);
|
||||
+ TEST_COMPARE (found_timestamp, 0);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ /* This test only make sense for ABIs that support 32 bit time_t socket
|
||||
+ timestampss. */
|
||||
+ if (sizeof (time_t) > 4 && __WORDSIZE == 64)
|
||||
+ return 0;
|
||||
+
|
||||
+ srv = xsocket (AF_INET, SOCK_DGRAM, 0);
|
||||
+ srv_addr = (struct sockaddr_in) {
|
||||
+ .sin_family = AF_INET,
|
||||
+ .sin_addr = {.s_addr = htonl (INADDR_LOOPBACK) },
|
||||
+ };
|
||||
+ xbind (srv, (struct sockaddr *) &srv_addr, sizeof (srv_addr));
|
||||
+ {
|
||||
+ socklen_t sa_len = sizeof (srv_addr);
|
||||
+ xgetsockname (srv, (struct sockaddr *) &srv_addr, &sa_len);
|
||||
+ TEST_VERIFY (sa_len == sizeof (srv_addr));
|
||||
+ }
|
||||
+
|
||||
+ /* Check recvmsg; */
|
||||
+ do_test_large_buffer (false);
|
||||
+ do_test_small_buffer (false);
|
||||
+ /* Check recvmmsg. */
|
||||
+ do_test_large_buffer (true);
|
||||
+ do_test_small_buffer (true);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
--
|
||||
2.27.0
|
||||
|
||||
49
elf-Add-a-comment-after-trailing-backslashes.patch
Normal file
49
elf-Add-a-comment-after-trailing-backslashes.patch
Normal file
@ -0,0 +1,49 @@
|
||||
From 511b244cc55074dc7f8476c39598d5d00811963e Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Tue, 4 Jan 2022 06:58:34 -0800
|
||||
Subject: [PATCH] elf: Add a comment after trailing backslashes
|
||||
|
||||
(cherry picked from commit f4f70c2895e3d325188a42c10eb7bb4335be6773)
|
||||
---
|
||||
elf/Makefile | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index ec1cd49bb3..5859d47fc7 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -318,6 +318,7 @@ tests-cxx = \
|
||||
tst-nodelete \
|
||||
tst-unique3 \
|
||||
tst-unique4 \
|
||||
+# tests-cxx
|
||||
|
||||
tests += $(if $(CXX),$(tests-cxx))
|
||||
tests-internal += loadtest unload unload2 circleload1 \
|
||||
@@ -582,6 +583,7 @@ modules-names = \
|
||||
vismod1 \
|
||||
vismod2 \
|
||||
vismod3 \
|
||||
+# modules-names
|
||||
|
||||
modules-names-cxx = \
|
||||
tst-dlopen-nodelete-reloc-mod1 \
|
||||
@@ -607,6 +609,7 @@ modules-names-cxx = \
|
||||
tst-unique3lib \
|
||||
tst-unique3lib2 \
|
||||
tst-unique4lib \
|
||||
+# modules-names-cxx
|
||||
|
||||
modules-names += \
|
||||
$(if $(CXX),$(modules-names-cxx)) \
|
||||
@@ -616,6 +619,7 @@ modules-names += \
|
||||
$(tst-tls-many-dynamic-modules-dep-bad) \
|
||||
$(tlsmod17a-modules) \
|
||||
$(tlsmod18a-modules) \
|
||||
+# modules-names
|
||||
|
||||
# Most modules build with _ISOMAC defined, but those filtered out
|
||||
# depend on internal headers.
|
||||
--
|
||||
2.27.0
|
||||
|
||||
544
elf-Makefile-Reflow-and-sort-most-variable-assignmen.patch
Normal file
544
elf-Makefile-Reflow-and-sort-most-variable-assignmen.patch
Normal file
@ -0,0 +1,544 @@
|
||||
From de6cdd68753ed126a3ecf105d98e8c0ee8cb6ec4 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Fri, 14 Jan 2022 20:16:05 +0100
|
||||
Subject: [PATCH] elf/Makefile: Reflow and sort most variable assignments
|
||||
|
||||
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
|
||||
(cherry picked from commit 7de01e60c200c431d3469deb784da8fd4508fc15)
|
||||
---
|
||||
elf/Makefile | 386 +++++++++++++++++++++++++++++++++++++++------------
|
||||
1 file changed, 294 insertions(+), 92 deletions(-)
|
||||
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index 5859d47fc7..f930e04e27 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -21,21 +21,62 @@ subdir := elf
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
-headers = elf.h bits/elfclass.h link.h bits/link.h
|
||||
-routines = $(all-dl-routines) dl-support dl-iteratephdr \
|
||||
- dl-addr dl-addr-obj enbl-secure dl-profstub \
|
||||
- dl-origin dl-libc dl-sym dl-sysdep dl-error \
|
||||
- dl-reloc-static-pie libc_early_init rtld_static_init
|
||||
+headers = \
|
||||
+ bits/elfclass.h \
|
||||
+ bits/link.h \
|
||||
+ elf.h \
|
||||
+ link.h \
|
||||
+ # headers
|
||||
+
|
||||
+routines = \
|
||||
+ $(all-dl-routines) \
|
||||
+ dl-addr \
|
||||
+ dl-addr-obj \
|
||||
+ dl-error \
|
||||
+ dl-iteratephdr \
|
||||
+ dl-libc \
|
||||
+ dl-origin \
|
||||
+ dl-profstub \
|
||||
+ dl-reloc-static-pie \
|
||||
+ dl-support \
|
||||
+ dl-sym \
|
||||
+ dl-sysdep \
|
||||
+ enbl-secure \
|
||||
+ libc_early_init \
|
||||
+ rtld_static_init \
|
||||
+ # routines
|
||||
|
||||
# The core dynamic linking functions are in libc for the static and
|
||||
# profiled libraries.
|
||||
-dl-routines = $(addprefix dl-,load lookup object reloc deps \
|
||||
- runtime init fini debug misc \
|
||||
- version profile tls origin scope \
|
||||
- execstack open close trampoline \
|
||||
- exception sort-maps lookup-direct \
|
||||
- call-libc-early-init write \
|
||||
- thread_gscope_wait tls_init_tp)
|
||||
+dl-routines = \
|
||||
+ dl-call-libc-early-init \
|
||||
+ dl-close \
|
||||
+ dl-debug \
|
||||
+ dl-deps \
|
||||
+ dl-exception \
|
||||
+ dl-execstack \
|
||||
+ dl-fini \
|
||||
+ dl-init \
|
||||
+ dl-load \
|
||||
+ dl-lookup \
|
||||
+ dl-lookup-direct \
|
||||
+ dl-misc \
|
||||
+ dl-object \
|
||||
+ dl-open \
|
||||
+ dl-origin \
|
||||
+ dl-profile \
|
||||
+ dl-reloc \
|
||||
+ dl-runtime \
|
||||
+ dl-scope \
|
||||
+ dl-sort-maps \
|
||||
+ dl-thread_gscope_wait \
|
||||
+ dl-tls \
|
||||
+ dl-tls_init_tp \
|
||||
+ dl-trampoline \
|
||||
+ dl-version \
|
||||
+ dl-write \
|
||||
+ # dl-routines
|
||||
+
|
||||
ifeq (yes,$(use-ldconfig))
|
||||
dl-routines += dl-cache
|
||||
endif
|
||||
@@ -58,16 +99,38 @@ endif
|
||||
|
||||
all-dl-routines = $(dl-routines) $(sysdep-dl-routines)
|
||||
# But they are absent from the shared libc, because that code is in ld.so.
|
||||
-elide-routines.os = $(all-dl-routines) dl-support enbl-secure dl-origin \
|
||||
- dl-sysdep dl-exception dl-reloc-static-pie \
|
||||
- thread_gscope_wait rtld_static_init
|
||||
+elide-routines.os = \
|
||||
+ $(all-dl-routines) \
|
||||
+ dl-exception \
|
||||
+ dl-origin \
|
||||
+ dl-reloc-static-pie \
|
||||
+ dl-support \
|
||||
+ dl-sysdep \
|
||||
+ enbl-secure \
|
||||
+ rtld_static_init \
|
||||
+ thread_gscope_wait \
|
||||
+ # elide-routines.os
|
||||
|
||||
# ld.so uses those routines, plus some special stuff for being the program
|
||||
# interpreter and operating independent of libc.
|
||||
-rtld-routines = rtld $(all-dl-routines) dl-sysdep dl-environ dl-minimal \
|
||||
- dl-error-minimal dl-conflict dl-hwcaps dl-hwcaps_split dl-hwcaps-subdirs \
|
||||
- dl-usage dl-diagnostics dl-diagnostics-kernel dl-diagnostics-cpu \
|
||||
- dl-mutex
|
||||
+rtld-routines = \
|
||||
+ $(all-dl-routines) \
|
||||
+ dl-conflict \
|
||||
+ dl-diagnostics \
|
||||
+ dl-diagnostics-cpu \
|
||||
+ dl-diagnostics-kernel \
|
||||
+ dl-environ \
|
||||
+ dl-error-minimal \
|
||||
+ dl-hwcaps \
|
||||
+ dl-hwcaps-subdirs \
|
||||
+ dl-hwcaps_split \
|
||||
+ dl-minimal \
|
||||
+ dl-mutex \
|
||||
+ dl-sysdep \
|
||||
+ dl-usage \
|
||||
+ rtld \
|
||||
+ # rtld-routines
|
||||
+
|
||||
all-rtld-routines = $(rtld-routines) $(sysdep-rtld-routines)
|
||||
|
||||
CFLAGS-dl-runtime.c += -fexceptions -fasynchronous-unwind-tables
|
||||
@@ -102,8 +165,16 @@ ld-map = $(common-objpfx)ld.map
|
||||
endif
|
||||
|
||||
ifeq (yes,$(build-shared))
|
||||
-extra-objs = $(all-rtld-routines:%=%.os) sofini.os interp.os
|
||||
-generated += librtld.os dl-allobjs.os ld.so ldd
|
||||
+extra-objs = \
|
||||
+ $(all-rtld-routines:%=%.os) \
|
||||
+ sofini.os \
|
||||
+ interp.os \
|
||||
+ # extra-objs
|
||||
+generated += \
|
||||
+ dl-allobjs.os \
|
||||
+ ld.so ldd \
|
||||
+ librtld.os \
|
||||
+ # generated
|
||||
install-others = $(inst_rtlddir)/$(rtld-installed-name)
|
||||
install-bin-script = ldd
|
||||
endif
|
||||
@@ -121,8 +192,15 @@ others-static += ldconfig
|
||||
others += ldconfig
|
||||
install-rootsbin += ldconfig
|
||||
|
||||
-ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon static-stubs \
|
||||
- stringtable
|
||||
+ldconfig-modules := \
|
||||
+ cache \
|
||||
+ chroot_canon \
|
||||
+ readlib \
|
||||
+ static-stubs \
|
||||
+ stringtable \
|
||||
+ xmalloc \
|
||||
+ xstrdup \
|
||||
+ # ldconfig-modules
|
||||
extra-objs += $(ldconfig-modules:=.o)
|
||||
others-extras = $(ldconfig-modules)
|
||||
endif
|
||||
@@ -156,23 +234,35 @@ $(inst_auditdir)/sotruss-lib.so: $(objpfx)sotruss-lib.so $(+force)
|
||||
$(do-install-program)
|
||||
endif
|
||||
|
||||
-tests-static-normal := tst-array1-static tst-array5-static \
|
||||
- tst-dl-iter-static \
|
||||
- tst-tlsalign-static tst-tlsalign-extern-static \
|
||||
- tst-linkall-static tst-env-setuid tst-env-setuid-tunables \
|
||||
- tst-single_threaded-static tst-single_threaded-pthread-static \
|
||||
- tst-dst-static tst-getauxval-static
|
||||
-
|
||||
-tests-static-internal := tst-tls1-static \
|
||||
- tst-ptrguard1-static tst-stackguard1-static \
|
||||
- tst-tls1-static-non-pie
|
||||
+tests-static-normal := \
|
||||
+ tst-array1-static \
|
||||
+ tst-array5-static \
|
||||
+ tst-dl-iter-static \
|
||||
+ tst-dst-static \
|
||||
+ tst-env-setuid \
|
||||
+ tst-env-setuid-tunables \
|
||||
+ tst-getauxval-static \
|
||||
+ tst-linkall-static \
|
||||
+ tst-single_threaded-pthread-static \
|
||||
+ tst-single_threaded-static \
|
||||
+ tst-tlsalign-extern-static \
|
||||
+ tst-tlsalign-static \
|
||||
+ # tests-static-normal
|
||||
+
|
||||
+tests-static-internal := \
|
||||
+ tst-ptrguard1-static \
|
||||
+ tst-stackguard1-static \
|
||||
+ tst-tls1-static \
|
||||
+ tst-tls1-static-non-pie \
|
||||
+ # tests-static-internal
|
||||
|
||||
CRT-tst-tls1-static-non-pie := $(csu-objpfx)crt1.o
|
||||
tst-tls1-static-non-pie-no-pie = yes
|
||||
|
||||
tests-container := \
|
||||
- tst-ldconfig-bad-aux-cache \
|
||||
- tst-ldconfig-ld_so_conf-update
|
||||
+ tst-ldconfig-bad-aux-cache \
|
||||
+ tst-ldconfig-ld_so_conf-update \
|
||||
+ # tests-container
|
||||
|
||||
ifeq (no,$(build-hardcoded-path-in-tests))
|
||||
# This is an ld.so.cache test, and RPATH/RUNPATH in the executable
|
||||
@@ -180,14 +271,31 @@ ifeq (no,$(build-hardcoded-path-in-tests))
|
||||
tests-container += tst-glibc-hwcaps-prepend-cache
|
||||
endif
|
||||
|
||||
-tests := tst-tls9 tst-leaks1 \
|
||||
- tst-array1 tst-array2 tst-array3 tst-array4 tst-array5 \
|
||||
- tst-auxv tst-stringtable
|
||||
-tests-internal := tst-tls1 $(tests-static-internal)
|
||||
+tests := \
|
||||
+ tst-array1 \
|
||||
+ tst-array2 \
|
||||
+ tst-array3 \
|
||||
+ tst-array4 \
|
||||
+ tst-array5 \
|
||||
+ tst-auxv \
|
||||
+ tst-leaks1 \
|
||||
+ tst-stringtable \
|
||||
+ tst-tls9 \
|
||||
+ # tests
|
||||
+
|
||||
+tests-internal := \
|
||||
+ $(tests-static-internal) \
|
||||
+ tst-tls1 \
|
||||
+ # tests-internal
|
||||
+
|
||||
tests-static := $(tests-static-normal) $(tests-static-internal)
|
||||
|
||||
ifeq (yes,$(build-shared))
|
||||
-tests-static += tst-tls9-static tst-single_threaded-static-dlopen
|
||||
+tests-static += \
|
||||
+ tst-single_threaded-static-dlopen \
|
||||
+ tst-tls9-static \
|
||||
+ # tests-static
|
||||
+
|
||||
static-dlopen-environment = \
|
||||
LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx)dlfcn
|
||||
tst-tls9-static-ENV = $(static-dlopen-environment)
|
||||
@@ -312,33 +421,65 @@ tests += \
|
||||
unload6 \
|
||||
unload7 \
|
||||
unload8 \
|
||||
-# reldep9
|
||||
+ # tests
|
||||
tests-cxx = \
|
||||
tst-dlopen-nodelete-reloc \
|
||||
tst-nodelete \
|
||||
tst-unique3 \
|
||||
tst-unique4 \
|
||||
-# tests-cxx
|
||||
+ # tests-cxx
|
||||
|
||||
tests += $(if $(CXX),$(tests-cxx))
|
||||
-tests-internal += loadtest unload unload2 circleload1 \
|
||||
- neededtest neededtest2 neededtest3 neededtest4 \
|
||||
- tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
|
||||
- tst-ptrguard1 tst-stackguard1 \
|
||||
- tst-create_format1 tst-tls-surplus tst-dl-hwcaps_split
|
||||
-tests-container += tst-pldd tst-dlopen-tlsmodid-container \
|
||||
- tst-dlopen-self-container tst-preload-pthread-libc
|
||||
-test-srcs = tst-pathopt
|
||||
+tests-internal += \
|
||||
+ circleload1 \
|
||||
+ loadtest \
|
||||
+ neededtest \
|
||||
+ neededtest2 \
|
||||
+ neededtest3 \
|
||||
+ neededtest4 \
|
||||
+ tst-create_format1 \
|
||||
+ tst-dl-hwcaps_split \
|
||||
+ tst-dlmopen2 \
|
||||
+ tst-ptrguard1 \
|
||||
+ tst-stackguard1 \
|
||||
+ tst-tls-surplus \
|
||||
+ tst-tls3 \
|
||||
+ tst-tls6 \
|
||||
+ tst-tls7 \
|
||||
+ tst-tls8 \
|
||||
+ unload \
|
||||
+ unload2 \
|
||||
+ # tests-internal
|
||||
+
|
||||
+tests-container += \
|
||||
+ tst-dlopen-self-container \
|
||||
+ tst-dlopen-tlsmodid-container \
|
||||
+ tst-pldd \
|
||||
+ tst-preload-pthread-libc \
|
||||
+ # tests-container
|
||||
+
|
||||
+test-srcs = \
|
||||
+ tst-pathopt \
|
||||
+ # tests-srcs
|
||||
+
|
||||
selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
|
||||
+
|
||||
ifneq ($(selinux-enabled),1)
|
||||
-tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
|
||||
+tests-execstack-yes = \
|
||||
+ tst-execstack \
|
||||
+ tst-execstack-needed \
|
||||
+ tst-execstack-prog \
|
||||
+ # tests-execstack-yes
|
||||
endif
|
||||
endif
|
||||
tests += $(tests-execstack-$(have-z-execstack))
|
||||
ifeq ($(run-built-tests),yes)
|
||||
-tests-special += $(objpfx)tst-leaks1-mem.out \
|
||||
- $(objpfx)noload-mem.out \
|
||||
- $(objpfx)tst-ldconfig-X.out $(objpfx)tst-rtld-help.out
|
||||
+tests-special += \
|
||||
+ $(objpfx)noload-mem.out \
|
||||
+ $(objpfx)tst-ldconfig-X.out \
|
||||
+ $(objpfx)tst-leaks1-mem.out \
|
||||
+ $(objpfx)tst-rtld-help.out \
|
||||
+ # tests-special
|
||||
endif
|
||||
tlsmod17a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
||||
tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
||||
@@ -355,9 +496,16 @@ tst-tls-many-dynamic-modules-dep = \
|
||||
tst-tls-many-dynamic-modules-dep-bad-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||
tst-tls-many-dynamic-modules-dep-bad = \
|
||||
$(foreach n,$(tst-tls-many-dynamic-modules-dep-bad-suffixes),tst-tls-manydynamic$(n)mod-dep-bad)
|
||||
-extra-test-objs += $(tlsmod17a-modules:=.os) $(tlsmod18a-modules:=.os) \
|
||||
- tst-tlsalign-vars.o
|
||||
-test-extras += tst-tlsmod17a tst-tlsmod18a tst-tlsalign-vars
|
||||
+extra-test-objs += \
|
||||
+ $(tlsmod17a-modules:=.os) \
|
||||
+ $(tlsmod18a-modules:=.os) \
|
||||
+ tst-tlsalign-vars.o \
|
||||
+ # extra-test-objs
|
||||
+test-extras += \
|
||||
+ tst-tlsalign-vars \
|
||||
+ tst-tlsmod17a \
|
||||
+ tst-tlsmod18a \
|
||||
+ # test-extras
|
||||
modules-names = \
|
||||
circlemod1 \
|
||||
circlemod1a \
|
||||
@@ -609,17 +757,17 @@ modules-names-cxx = \
|
||||
tst-unique3lib \
|
||||
tst-unique3lib2 \
|
||||
tst-unique4lib \
|
||||
-# modules-names-cxx
|
||||
+ # modules-names-cxx
|
||||
|
||||
modules-names += \
|
||||
$(if $(CXX),$(modules-names-cxx)) \
|
||||
$(modules-execstack-$(have-z-execstack)) \
|
||||
+ $(tlsmod17a-modules) \
|
||||
+ $(tlsmod18a-modules) \
|
||||
$(tst-tls-many-dynamic-modules) \
|
||||
$(tst-tls-many-dynamic-modules-dep) \
|
||||
$(tst-tls-many-dynamic-modules-dep-bad) \
|
||||
- $(tlsmod17a-modules) \
|
||||
- $(tlsmod18a-modules) \
|
||||
-# modules-names
|
||||
+ # modules-names
|
||||
|
||||
# Most modules build with _ISOMAC defined, but those filtered out
|
||||
# depend on internal headers.
|
||||
@@ -668,35 +816,70 @@ modules-names-nobuild := filtmod1 tst-big-note-lib tst-ro-dynamic-mod
|
||||
tests += $(tests-static)
|
||||
|
||||
ifeq (yes,$(have-ifunc))
|
||||
-tests-ifuncstatic := ifuncmain1static ifuncmain1picstatic \
|
||||
- ifuncmain2static ifuncmain2picstatic \
|
||||
- ifuncmain4static ifuncmain4picstatic \
|
||||
- ifuncmain5static ifuncmain5picstatic \
|
||||
- ifuncmain7static ifuncmain7picstatic
|
||||
+tests-ifuncstatic := \
|
||||
+ ifuncmain1static \
|
||||
+ ifuncmain1picstatic \
|
||||
+ ifuncmain2static \
|
||||
+ ifuncmain2picstatic \
|
||||
+ ifuncmain4static \
|
||||
+ ifuncmain4picstatic \
|
||||
+ ifuncmain5static \
|
||||
+ ifuncmain5picstatic \
|
||||
+ ifuncmain7static \
|
||||
+ ifuncmain7picstatic \
|
||||
+ # tests-ifuncstatic
|
||||
ifeq (yes,$(have-gcc-ifunc))
|
||||
tests-ifuncstatic += ifuncmain9static ifuncmain9picstatic
|
||||
endif
|
||||
tests-static += $(tests-ifuncstatic)
|
||||
tests-internal += $(tests-ifuncstatic)
|
||||
ifeq (yes,$(build-shared))
|
||||
-tests += tst-ifunc-fault-lazy tst-ifunc-fault-bindnow
|
||||
+tests += \
|
||||
+ tst-ifunc-fault-bindnow \
|
||||
+ tst-ifunc-fault-lazy \
|
||||
+ # tests
|
||||
# Note: sysdeps/x86_64/ifuncmain8.c uses ifuncmain8.
|
||||
tests-internal += \
|
||||
- ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
|
||||
- ifuncmain1staticpic \
|
||||
- ifuncmain2 ifuncmain2pic ifuncmain3 ifuncmain4 \
|
||||
- ifuncmain5 ifuncmain5pic ifuncmain5staticpic \
|
||||
- ifuncmain7 ifuncmain7pic
|
||||
+ ifuncmain1 \
|
||||
+ ifuncmain1pic \
|
||||
+ ifuncmain1staticpic \
|
||||
+ ifuncmain1vis \
|
||||
+ ifuncmain1vispic \
|
||||
+ ifuncmain2 \
|
||||
+ ifuncmain2pic \
|
||||
+ ifuncmain3 \
|
||||
+ ifuncmain4 \
|
||||
+ ifuncmain5 \
|
||||
+ ifuncmain5pic \
|
||||
+ ifuncmain5staticpic \
|
||||
+ ifuncmain7 \
|
||||
+ ifuncmain7pic \
|
||||
+ # tests-internal
|
||||
ifeq (yes,$(have-gcc-ifunc))
|
||||
-tests-internal += ifuncmain9 ifuncmain9pic
|
||||
+tests-internal += \
|
||||
+ ifuncmain9 \
|
||||
+ ifuncmain9pic \
|
||||
+ # tests-internal
|
||||
endif
|
||||
-ifunc-test-modules = ifuncdep1 ifuncdep1pic ifuncdep2 ifuncdep2pic \
|
||||
- ifuncdep5 ifuncdep5pic
|
||||
+ifunc-test-modules = \
|
||||
+ ifuncdep1 \
|
||||
+ ifuncdep1pic \
|
||||
+ ifuncdep2 \
|
||||
+ ifuncdep2pic \
|
||||
+ ifuncdep5 \
|
||||
+ ifuncdep5pic \
|
||||
+ # ifunc-test-modules
|
||||
extra-test-objs += $(ifunc-test-modules:=.o)
|
||||
test-internal-extras += $(ifunc-test-modules)
|
||||
ifeq (yes,$(have-fpie))
|
||||
-ifunc-pie-tests = ifuncmain1pie ifuncmain1vispie ifuncmain1staticpie \
|
||||
- ifuncmain5pie ifuncmain6pie ifuncmain7pie
|
||||
+ifunc-pie-tests = \
|
||||
+ ifuncmain1pie \
|
||||
+ ifuncmain1staticpie \
|
||||
+ ifuncmain1vispie \
|
||||
+ ifuncmain5pie \
|
||||
+ ifuncmain6pie \
|
||||
+ ifuncmain7pie \
|
||||
+ # ifunc-pie-tests
|
||||
ifeq (yes,$(have-gcc-ifunc))
|
||||
ifunc-pie-tests += ifuncmain9pie
|
||||
endif
|
||||
@@ -706,30 +889,50 @@ endif
|
||||
tests-internal += $(ifunc-pie-tests)
|
||||
tests-pie += $(ifunc-pie-tests)
|
||||
endif
|
||||
-modules-names += ifuncmod1 ifuncmod3 ifuncmod5 ifuncmod6
|
||||
+modules-names += \
|
||||
+ ifuncmod1 \
|
||||
+ ifuncmod3 \
|
||||
+ ifuncmod5 \
|
||||
+ ifuncmod6 \
|
||||
+ # module-names
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq (yes,$(build-shared))
|
||||
ifeq ($(run-built-tests),yes)
|
||||
-tests-special += $(objpfx)tst-pathopt.out $(objpfx)tst-rtld-load-self.out \
|
||||
- $(objpfx)tst-rtld-preload.out $(objpfx)argv0test.out \
|
||||
- $(objpfx)tst-rtld-help.out
|
||||
+tests-special += \
|
||||
+ $(objpfx)argv0test.out \
|
||||
+ $(objpfx)tst-pathopt.out \
|
||||
+ $(objpfx)tst-rtld-help.out \
|
||||
+ $(objpfx)tst-rtld-load-self.out \
|
||||
+ $(objpfx)tst-rtld-preload.out \
|
||||
+ # tests-special
|
||||
endif
|
||||
-tests-special += $(objpfx)check-textrel.out $(objpfx)check-execstack.out \
|
||||
- $(objpfx)check-wx-segment.out \
|
||||
- $(objpfx)check-localplt.out $(objpfx)check-initfini.out
|
||||
+tests-special += \
|
||||
+ $(objpfx)check-execstack.out \
|
||||
+ $(objpfx)check-initfini.out \
|
||||
+ $(objpfx)check-localplt.out \
|
||||
+ $(objpfx)check-textrel.out \
|
||||
+ $(objpfx)check-wx-segment.out \
|
||||
+ # tests-special
|
||||
endif
|
||||
|
||||
ifeq ($(run-built-tests),yes)
|
||||
-tests-special += $(objpfx)order-cmp.out $(objpfx)tst-array1-cmp.out \
|
||||
- $(objpfx)tst-array1-static-cmp.out \
|
||||
- $(objpfx)tst-array2-cmp.out $(objpfx)tst-array3-cmp.out \
|
||||
- $(objpfx)tst-array4-cmp.out $(objpfx)tst-array5-cmp.out \
|
||||
- $(objpfx)tst-array5-static-cmp.out $(objpfx)order2-cmp.out \
|
||||
- $(objpfx)tst-initorder-cmp.out \
|
||||
- $(objpfx)tst-initorder2-cmp.out $(objpfx)tst-unused-dep.out \
|
||||
- $(objpfx)tst-unused-dep-cmp.out
|
||||
+tests-special += \
|
||||
+ $(objpfx)order-cmp.out \
|
||||
+ $(objpfx)order2-cmp.out \
|
||||
+ $(objpfx)tst-array1-cmp.out \
|
||||
+ $(objpfx)tst-array1-static-cmp.out \
|
||||
+ $(objpfx)tst-array2-cmp.out \
|
||||
+ $(objpfx)tst-array3-cmp.out \
|
||||
+ $(objpfx)tst-array4-cmp.out \
|
||||
+ $(objpfx)tst-array5-cmp.out \
|
||||
+ $(objpfx)tst-array5-static-cmp.out \
|
||||
+ $(objpfx)tst-initorder-cmp.out \
|
||||
+ $(objpfx)tst-initorder2-cmp.out \
|
||||
+ $(objpfx)tst-unused-dep-cmp.out \
|
||||
+ $(objpfx)tst-unused-dep.out \
|
||||
+ # tests-special
|
||||
endif
|
||||
|
||||
check-abi: $(objpfx)check-abi-ld.out
|
||||
@@ -811,6 +1014,7 @@ rtld-stubbed-symbols = \
|
||||
free \
|
||||
malloc \
|
||||
realloc \
|
||||
+ # rtld-stubbed-symbols
|
||||
|
||||
ifeq ($(have-ssp),yes)
|
||||
# rtld is not built with the stack protector, so these references will
|
||||
--
|
||||
2.27.0
|
||||
|
||||
546
elf-Sort-tests-and-modules-names.patch
Normal file
546
elf-Sort-tests-and-modules-names.patch
Normal file
@ -0,0 +1,546 @@
|
||||
From 31186e2cb74b2403726060276512c39cc89a1478 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Mon, 13 Dec 2021 09:43:52 -0800
|
||||
Subject: [PATCH] elf: Sort tests and modules-names
|
||||
|
||||
Sort tests and modules-names to reduce future conflicts.
|
||||
|
||||
(cherry picked from commit 28713c06129f8f64f88c423266e6ff2880216509)
|
||||
---
|
||||
elf/Makefile | 512 ++++++++++++++++++++++++++++++++++++++-------------
|
||||
1 file changed, 385 insertions(+), 127 deletions(-)
|
||||
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index 118d579c42..ec1cd49bb3 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -193,39 +193,133 @@ static-dlopen-environment = \
|
||||
tst-tls9-static-ENV = $(static-dlopen-environment)
|
||||
tst-single_threaded-static-dlopen-ENV = $(static-dlopen-environment)
|
||||
|
||||
-tests += restest1 preloadtest loadfail multiload origtest resolvfail \
|
||||
- constload1 order noload filter \
|
||||
- reldep reldep2 reldep3 reldep4 nodelete nodelete2 \
|
||||
- nodlopen nodlopen2 lateglobal initfirst global \
|
||||
- restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
|
||||
- tst-tls4 tst-tls5 \
|
||||
- tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-tls15 \
|
||||
- tst-tls16 tst-tls17 tst-tls18 tst-tls19 tst-tls-dlinfo \
|
||||
- tst-align tst-align2 \
|
||||
- tst-dlmodcount tst-dlopenrpath tst-deep1 \
|
||||
- tst-dlmopen1 tst-dlmopen3 \
|
||||
- unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
|
||||
- tst-audit1 tst-audit2 tst-audit8 tst-audit9 \
|
||||
- tst-addr1 tst-thrlock \
|
||||
- tst-unique1 tst-unique2 $(if $(CXX),tst-unique3 tst-unique4 \
|
||||
- tst-nodelete tst-dlopen-nodelete-reloc) \
|
||||
- tst-initorder tst-initorder2 tst-relsort1 tst-null-argv \
|
||||
- tst-tlsalign tst-tlsalign-extern tst-nodelete-opened \
|
||||
- tst-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error tst-noload \
|
||||
- tst-latepthread tst-tls-manydynamic tst-nodelete-dlclose \
|
||||
- tst-debug1 tst-main1 tst-absolute-sym tst-absolute-zero tst-big-note \
|
||||
- tst-unwind-ctor tst-unwind-main tst-audit13 \
|
||||
- tst-sonamemove-link tst-sonamemove-dlopen tst-dlopen-tlsmodid \
|
||||
- tst-dlopen-self tst-auditmany tst-initfinilazyfail tst-dlopenfail \
|
||||
- tst-dlopenfail-2 \
|
||||
- tst-filterobj tst-filterobj-dlopen tst-auxobj tst-auxobj-dlopen \
|
||||
- tst-audit14 tst-audit15 tst-audit16 tst-audit17 \
|
||||
- tst-single_threaded tst-single_threaded-pthread \
|
||||
- tst-tls-ie tst-tls-ie-dlmopen argv0test \
|
||||
- tst-glibc-hwcaps tst-glibc-hwcaps-prepend tst-glibc-hwcaps-mask \
|
||||
- tst-tls20 tst-tls21 tst-dlmopen-dlerror tst-dlmopen-gethostbyname \
|
||||
- tst-dl-is_dso tst-ro-dynamic
|
||||
+tests += \
|
||||
+ argv0test \
|
||||
+ constload1 \
|
||||
+ dblload \
|
||||
+ dblunload \
|
||||
+ filter \
|
||||
+ global \
|
||||
+ initfirst \
|
||||
+ lateglobal \
|
||||
+ loadfail \
|
||||
+ multiload \
|
||||
+ next \
|
||||
+ nodelete \
|
||||
+ nodelete2 \
|
||||
+ nodlopen \
|
||||
+ nodlopen2 \
|
||||
+ noload \
|
||||
+ order \
|
||||
+ order2 \
|
||||
+ origtest \
|
||||
+ preloadtest \
|
||||
+ reldep \
|
||||
+ reldep2 \
|
||||
+ reldep3 \
|
||||
+ reldep4 \
|
||||
+ reldep5 \
|
||||
+ reldep6 \
|
||||
+ reldep7 \
|
||||
+ reldep8 \
|
||||
+ resolvfail \
|
||||
+ restest1 \
|
||||
+ restest2 \
|
||||
+ tst-absolute-sym \
|
||||
+ tst-absolute-zero \
|
||||
+ tst-addr1 \
|
||||
+ tst-align \
|
||||
+ tst-align2 \
|
||||
+ tst-audit1 \
|
||||
+ tst-audit2 \
|
||||
+ tst-audit8 \
|
||||
+ tst-audit9 \
|
||||
+ tst-audit11 \
|
||||
+ tst-audit12 \
|
||||
+ tst-audit13 \
|
||||
+ tst-audit14 \
|
||||
+ tst-audit15 \
|
||||
+ tst-audit16 \
|
||||
+ tst-audit17 \
|
||||
+ tst-auditmany \
|
||||
+ tst-auxobj \
|
||||
+ tst-auxobj-dlopen \
|
||||
+ tst-big-note \
|
||||
+ tst-debug1 \
|
||||
+ tst-deep1 \
|
||||
+ tst-dl-is_dso \
|
||||
+ tst-dlmodcount \
|
||||
+ tst-dlmopen1 \
|
||||
+ tst-dlmopen3 \
|
||||
+ tst-dlmopen-dlerror \
|
||||
+ tst-dlmopen-gethostbyname \
|
||||
+ tst-dlopenfail \
|
||||
+ tst-dlopenfail-2 \
|
||||
+ tst-dlopenrpath \
|
||||
+ tst-dlopen-self \
|
||||
+ tst-dlopen-tlsmodid \
|
||||
+ tst-dlsym-error \
|
||||
+ tst-filterobj \
|
||||
+ tst-filterobj-dlopen \
|
||||
+ tst-glibc-hwcaps \
|
||||
+ tst-glibc-hwcaps-mask \
|
||||
+ tst-glibc-hwcaps-prepend \
|
||||
+ tst-global1 \
|
||||
+ tst-initfinilazyfail \
|
||||
+ tst-initorder \
|
||||
+ tst-initorder2 \
|
||||
+ tst-latepthread \
|
||||
+ tst-main1 \
|
||||
+ tst-nodelete2 \
|
||||
+ tst-nodelete-dlclose \
|
||||
+ tst-nodelete-opened \
|
||||
+ tst-noload \
|
||||
+ tst-null-argv \
|
||||
+ tst-relsort1 \
|
||||
+ tst-ro-dynamic \
|
||||
+ tst-single_threaded \
|
||||
+ tst-single_threaded-pthread \
|
||||
+ tst-sonamemove-dlopen \
|
||||
+ tst-sonamemove-link \
|
||||
+ tst-thrlock \
|
||||
+ tst-tls10 \
|
||||
+ tst-tls11 \
|
||||
+ tst-tls12 \
|
||||
+ tst-tls13 \
|
||||
+ tst-tls14 \
|
||||
+ tst-tls15 \
|
||||
+ tst-tls16 \
|
||||
+ tst-tls17 \
|
||||
+ tst-tls18 \
|
||||
+ tst-tls19 \
|
||||
+ tst-tls20 \
|
||||
+ tst-tls21 \
|
||||
+ tst-tls4 \
|
||||
+ tst-tls5 \
|
||||
+ tst-tlsalign \
|
||||
+ tst-tlsalign-extern \
|
||||
+ tst-tls-dlinfo \
|
||||
+ tst-tls-ie \
|
||||
+ tst-tls-ie-dlmopen \
|
||||
+ tst-tls-manydynamic \
|
||||
+ tst-unique1 \
|
||||
+ tst-unique2 \
|
||||
+ tst-unwind-ctor \
|
||||
+ tst-unwind-main \
|
||||
+ unload3 \
|
||||
+ unload4 \
|
||||
+ unload5 \
|
||||
+ unload6 \
|
||||
+ unload7 \
|
||||
+ unload8 \
|
||||
# reldep9
|
||||
+tests-cxx = \
|
||||
+ tst-dlopen-nodelete-reloc \
|
||||
+ tst-nodelete \
|
||||
+ tst-unique3 \
|
||||
+ tst-unique4 \
|
||||
+
|
||||
+tests += $(if $(CXX),$(tests-cxx))
|
||||
tests-internal += loadtest unload unload2 circleload1 \
|
||||
neededtest neededtest2 neededtest3 neededtest4 \
|
||||
tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
|
||||
@@ -263,101 +357,265 @@ tst-tls-many-dynamic-modules-dep-bad = \
|
||||
extra-test-objs += $(tlsmod17a-modules:=.os) $(tlsmod18a-modules:=.os) \
|
||||
tst-tlsalign-vars.o
|
||||
test-extras += tst-tlsmod17a tst-tlsmod18a tst-tlsalign-vars
|
||||
-modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
|
||||
- testobj1_1 failobj constload2 constload3 unloadmod \
|
||||
- dep1 dep2 dep3 dep4 vismod1 vismod2 vismod3 \
|
||||
- nodelmod1 nodelmod2 nodelmod3 nodelmod4 \
|
||||
- nodel2mod1 nodel2mod2 nodel2mod3 \
|
||||
- nodlopenmod nodlopenmod2 filtmod1 filtmod2 \
|
||||
- reldepmod1 reldepmod2 reldepmod3 reldepmod4 nextmod1 nextmod2 \
|
||||
- reldep4mod1 reldep4mod2 reldep4mod3 reldep4mod4 \
|
||||
- neededobj1 neededobj2 neededobj3 neededobj4 \
|
||||
- neededobj5 neededobj6 firstobj globalmod1 \
|
||||
- unload2mod unload2dep ltglobmod1 ltglobmod2 pathoptobj \
|
||||
- dblloadmod1 dblloadmod2 dblloadmod3 reldepmod5 reldepmod6 \
|
||||
- reldep6mod0 reldep6mod1 reldep6mod2 reldep6mod3 reldep6mod4 \
|
||||
- reldep7mod1 reldep7mod2 \
|
||||
- tst-tlsmod1 tst-tlsmod2 tst-tlsmod3 tst-tlsmod4 \
|
||||
- tst-tlsmod5 tst-tlsmod6 tst-tlsmod7 tst-tlsmod8 \
|
||||
- tst-tlsmod9 tst-tlsmod10 tst-tlsmod11 tst-tlsmod12 \
|
||||
- tst-tlsmod13 tst-tlsmod13a tst-tlsmod14a tst-tlsmod14b \
|
||||
- tst-tlsmod15a tst-tlsmod15b tst-tlsmod16a tst-tlsmod16b \
|
||||
- $(tlsmod17a-modules) tst-tlsmod17b $(tlsmod18a-modules) \
|
||||
- tst-tls19mod1 tst-tls19mod2 tst-tls19mod3 \
|
||||
- circlemod1 circlemod1a circlemod2 circlemod2a \
|
||||
- circlemod3 circlemod3a \
|
||||
- reldep8mod1 reldep8mod2 reldep8mod3 \
|
||||
- reldep9mod1 reldep9mod2 reldep9mod3 \
|
||||
- tst-alignmod tst-alignmod2 \
|
||||
- $(modules-execstack-$(have-z-execstack)) \
|
||||
- tst-dlopenrpathmod tst-deep1mod1 tst-deep1mod2 tst-deep1mod3 \
|
||||
- tst-dlmopen1mod tst-auditmod1 \
|
||||
- unload3mod1 unload3mod2 unload3mod3 unload3mod4 \
|
||||
- unload4mod1 unload4mod2 unload4mod3 unload4mod4 \
|
||||
- unload6mod1 unload6mod2 unload6mod3 \
|
||||
- unload7mod1 unload7mod2 \
|
||||
- unload8mod1 unload8mod1x unload8mod2 unload8mod3 \
|
||||
- order2mod1 order2mod2 order2mod3 order2mod4 \
|
||||
- tst-unique1mod1 tst-unique1mod2 \
|
||||
- tst-unique2mod1 tst-unique2mod2 \
|
||||
- tst-auditmod9a tst-auditmod9b \
|
||||
- $(if $(CXX),tst-unique3lib tst-unique3lib2 tst-unique4lib \
|
||||
- tst-nodelete-uniquemod tst-nodelete-rtldmod \
|
||||
- tst-nodelete-zmod \
|
||||
- tst-dlopen-nodelete-reloc-mod1 \
|
||||
- tst-dlopen-nodelete-reloc-mod2 \
|
||||
- tst-dlopen-nodelete-reloc-mod3 \
|
||||
- tst-dlopen-nodelete-reloc-mod4 \
|
||||
- tst-dlopen-nodelete-reloc-mod5 \
|
||||
- tst-dlopen-nodelete-reloc-mod6 \
|
||||
- tst-dlopen-nodelete-reloc-mod7 \
|
||||
- tst-dlopen-nodelete-reloc-mod8 \
|
||||
- tst-dlopen-nodelete-reloc-mod9 \
|
||||
- tst-dlopen-nodelete-reloc-mod10 \
|
||||
- tst-dlopen-nodelete-reloc-mod11 \
|
||||
- tst-dlopen-nodelete-reloc-mod12 \
|
||||
- tst-dlopen-nodelete-reloc-mod13 \
|
||||
- tst-dlopen-nodelete-reloc-mod14 \
|
||||
- tst-dlopen-nodelete-reloc-mod15 \
|
||||
- tst-dlopen-nodelete-reloc-mod16 \
|
||||
- tst-dlopen-nodelete-reloc-mod17) \
|
||||
- tst-initordera1 tst-initorderb1 \
|
||||
- tst-initordera2 tst-initorderb2 \
|
||||
- tst-initordera3 tst-initordera4 \
|
||||
- tst-initorder2a tst-initorder2b tst-initorder2c \
|
||||
- tst-initorder2d \
|
||||
- tst-relsort1mod1 tst-relsort1mod2 tst-array2dep \
|
||||
- tst-array5dep tst-null-argv-lib \
|
||||
- tst-tlsalign-lib tst-nodelete-opened-lib tst-nodelete2mod \
|
||||
- tst-audit11mod1 tst-audit11mod2 tst-auditmod11 \
|
||||
- tst-audit12mod1 tst-audit12mod2 tst-audit12mod3 tst-auditmod12 \
|
||||
- tst-latepthreadmod $(tst-tls-many-dynamic-modules) \
|
||||
- $(tst-tls-many-dynamic-modules-dep) \
|
||||
- $(tst-tls-many-dynamic-modules-dep-bad) \
|
||||
- tst-nodelete-dlclose-dso tst-nodelete-dlclose-plugin \
|
||||
- tst-main1mod tst-absolute-sym-lib \
|
||||
- tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
|
||||
- tst-audit13mod1 tst-sonamemove-linkmod1 \
|
||||
- tst-sonamemove-runmod1 tst-sonamemove-runmod2 \
|
||||
- tst-auditmanymod1 tst-auditmanymod2 tst-auditmanymod3 \
|
||||
- tst-auditmanymod4 tst-auditmanymod5 tst-auditmanymod6 \
|
||||
- tst-auditmanymod7 tst-auditmanymod8 tst-auditmanymod9 \
|
||||
- tst-initlazyfailmod tst-finilazyfailmod \
|
||||
- tst-dlopenfailmod1 tst-dlopenfaillinkmod tst-dlopenfailmod2 \
|
||||
- tst-dlopenfailmod3 tst-dlopenfailnodelmod tst-ldconfig-ld-mod \
|
||||
- tst-filterobj-flt tst-filterobj-aux tst-filterobj-filtee \
|
||||
- tst-auditlogmod-1 tst-auditlogmod-2 tst-auditlogmod-3 \
|
||||
- tst-single_threaded-mod1 tst-single_threaded-mod2 \
|
||||
- tst-single_threaded-mod3 tst-single_threaded-mod4 \
|
||||
- tst-tls-ie-mod0 tst-tls-ie-mod1 tst-tls-ie-mod2 \
|
||||
- tst-tls-ie-mod3 tst-tls-ie-mod4 tst-tls-ie-mod5 \
|
||||
- tst-tls-ie-mod6 libmarkermod1-1 libmarkermod1-2 libmarkermod1-3 \
|
||||
- libmarkermod2-1 libmarkermod2-2 \
|
||||
- libmarkermod3-1 libmarkermod3-2 libmarkermod3-3 \
|
||||
- libmarkermod4-1 libmarkermod4-2 libmarkermod4-3 libmarkermod4-4 \
|
||||
- tst-tls20mod-bad tst-tls21mod tst-dlmopen-dlerror-mod \
|
||||
- tst-auxvalmod \
|
||||
- tst-dlmopen-gethostbyname-mod tst-ro-dynamic-mod \
|
||||
+modules-names = \
|
||||
+ circlemod1 \
|
||||
+ circlemod1a \
|
||||
+ circlemod2 \
|
||||
+ circlemod2a \
|
||||
+ circlemod3 \
|
||||
+ circlemod3a \
|
||||
+ constload2 \
|
||||
+ constload3 \
|
||||
+ dblloadmod1 \
|
||||
+ dblloadmod2 \
|
||||
+ dblloadmod3 \
|
||||
+ dep1 \
|
||||
+ dep2 \
|
||||
+ dep3 \
|
||||
+ dep4 \
|
||||
+ failobj \
|
||||
+ filtmod1 \
|
||||
+ filtmod2 \
|
||||
+ firstobj \
|
||||
+ globalmod1 \
|
||||
+ libmarkermod1-1 \
|
||||
+ libmarkermod1-2 \
|
||||
+ libmarkermod1-3 \
|
||||
+ libmarkermod2-1 \
|
||||
+ libmarkermod2-2 \
|
||||
+ libmarkermod3-1 \
|
||||
+ libmarkermod3-2 \
|
||||
+ libmarkermod3-3 \
|
||||
+ libmarkermod4-1 \
|
||||
+ libmarkermod4-2 \
|
||||
+ libmarkermod4-3 \
|
||||
+ libmarkermod4-4 \
|
||||
+ ltglobmod1 \
|
||||
+ ltglobmod2 \
|
||||
+ neededobj1 \
|
||||
+ neededobj2 \
|
||||
+ neededobj3 \
|
||||
+ neededobj4 \
|
||||
+ neededobj5 \
|
||||
+ neededobj6 \
|
||||
+ nextmod1 \
|
||||
+ nextmod2 \
|
||||
+ nodel2mod1 \
|
||||
+ nodel2mod2 \
|
||||
+ nodel2mod3 \
|
||||
+ nodelmod1 \
|
||||
+ nodelmod2 \
|
||||
+ nodelmod3 \
|
||||
+ nodelmod4 \
|
||||
+ nodlopenmod \
|
||||
+ nodlopenmod2 \
|
||||
+ order2mod1 \
|
||||
+ order2mod2 \
|
||||
+ order2mod3 \
|
||||
+ order2mod4 \
|
||||
+ pathoptobj \
|
||||
+ reldep4mod1 \
|
||||
+ reldep4mod2 \
|
||||
+ reldep4mod3 \
|
||||
+ reldep4mod4 \
|
||||
+ reldep6mod0 \
|
||||
+ reldep6mod1 \
|
||||
+ reldep6mod2 \
|
||||
+ reldep6mod3 \
|
||||
+ reldep6mod4 \
|
||||
+ reldep7mod1 \
|
||||
+ reldep7mod2 \
|
||||
+ reldep8mod1 \
|
||||
+ reldep8mod2 \
|
||||
+ reldep8mod3 \
|
||||
+ reldep9mod1 \
|
||||
+ reldep9mod2 \
|
||||
+ reldep9mod3 \
|
||||
+ reldepmod1 \
|
||||
+ reldepmod2 \
|
||||
+ reldepmod3 \
|
||||
+ reldepmod4 \
|
||||
+ reldepmod5 \
|
||||
+ reldepmod6 \
|
||||
+ testobj1 \
|
||||
+ testobj1_1 \
|
||||
+ testobj2 \
|
||||
+ testobj3 \
|
||||
+ testobj4 \
|
||||
+ testobj5 \
|
||||
+ testobj6 \
|
||||
+ tst-absolute-sym-lib \
|
||||
+ tst-absolute-zero-lib \
|
||||
+ tst-alignmod \
|
||||
+ tst-alignmod2 \
|
||||
+ tst-array2dep \
|
||||
+ tst-array5dep \
|
||||
+ tst-audit11mod1 \
|
||||
+ tst-audit11mod2 \
|
||||
+ tst-audit12mod1 \
|
||||
+ tst-audit12mod2 \
|
||||
+ tst-audit12mod3 \
|
||||
+ tst-audit13mod1 \
|
||||
+ tst-auditlogmod-1 \
|
||||
+ tst-auditlogmod-2 \
|
||||
+ tst-auditlogmod-3 \
|
||||
+ tst-auditmanymod1 \
|
||||
+ tst-auditmanymod2 \
|
||||
+ tst-auditmanymod3 \
|
||||
+ tst-auditmanymod4 \
|
||||
+ tst-auditmanymod5 \
|
||||
+ tst-auditmanymod6 \
|
||||
+ tst-auditmanymod7 \
|
||||
+ tst-auditmanymod8 \
|
||||
+ tst-auditmanymod9 \
|
||||
+ tst-auditmod1 \
|
||||
+ tst-auditmod9a \
|
||||
+ tst-auditmod9b \
|
||||
+ tst-auditmod11 \
|
||||
+ tst-auditmod12 \
|
||||
+ tst-auxvalmod \
|
||||
+ tst-big-note-lib \
|
||||
+ tst-deep1mod1 \
|
||||
+ tst-deep1mod2 \
|
||||
+ tst-deep1mod3 \
|
||||
+ tst-dlmopen1mod \
|
||||
+ tst-dlmopen-dlerror-mod \
|
||||
+ tst-dlmopen-gethostbyname-mod \
|
||||
+ tst-dlopenfaillinkmod \
|
||||
+ tst-dlopenfailmod1 \
|
||||
+ tst-dlopenfailmod2 \
|
||||
+ tst-dlopenfailmod3 \
|
||||
+ tst-dlopenfailnodelmod \
|
||||
+ tst-dlopenrpathmod \
|
||||
+ tst-filterobj-aux \
|
||||
+ tst-filterobj-filtee \
|
||||
+ tst-filterobj-flt \
|
||||
+ tst-finilazyfailmod \
|
||||
+ tst-initlazyfailmod \
|
||||
+ tst-initorder2a \
|
||||
+ tst-initorder2b \
|
||||
+ tst-initorder2c \
|
||||
+ tst-initorder2d \
|
||||
+ tst-initordera1 \
|
||||
+ tst-initordera2 \
|
||||
+ tst-initordera3 \
|
||||
+ tst-initordera4 \
|
||||
+ tst-initorderb1 \
|
||||
+ tst-initorderb2 \
|
||||
+ tst-latepthreadmod \
|
||||
+ tst-ldconfig-ld-mod \
|
||||
+ tst-main1mod \
|
||||
+ tst-nodelete2mod \
|
||||
+ tst-nodelete-dlclose-dso \
|
||||
+ tst-nodelete-dlclose-plugin \
|
||||
+ tst-nodelete-opened-lib \
|
||||
+ tst-null-argv-lib \
|
||||
+ tst-relsort1mod1 \
|
||||
+ tst-relsort1mod2 \
|
||||
+ tst-ro-dynamic-mod \
|
||||
+ tst-single_threaded-mod1 \
|
||||
+ tst-single_threaded-mod2 \
|
||||
+ tst-single_threaded-mod3 \
|
||||
+ tst-single_threaded-mod4 \
|
||||
+ tst-sonamemove-linkmod1 \
|
||||
+ tst-sonamemove-runmod1 \
|
||||
+ tst-sonamemove-runmod2 \
|
||||
+ tst-tls19mod1 \
|
||||
+ tst-tls19mod2 \
|
||||
+ tst-tls19mod3 \
|
||||
+ tst-tls20mod-bad \
|
||||
+ tst-tls21mod \
|
||||
+ tst-tlsalign-lib \
|
||||
+ tst-tls-ie-mod0 \
|
||||
+ tst-tls-ie-mod1 \
|
||||
+ tst-tls-ie-mod2 \
|
||||
+ tst-tls-ie-mod3 \
|
||||
+ tst-tls-ie-mod4 \
|
||||
+ tst-tls-ie-mod5 \
|
||||
+ tst-tls-ie-mod6 \
|
||||
+ tst-tlsmod1 \
|
||||
+ tst-tlsmod10 \
|
||||
+ tst-tlsmod11 \
|
||||
+ tst-tlsmod12 \
|
||||
+ tst-tlsmod13 \
|
||||
+ tst-tlsmod13a \
|
||||
+ tst-tlsmod14a \
|
||||
+ tst-tlsmod14b \
|
||||
+ tst-tlsmod15a \
|
||||
+ tst-tlsmod15b \
|
||||
+ tst-tlsmod16a \
|
||||
+ tst-tlsmod16b \
|
||||
+ tst-tlsmod17b \
|
||||
+ tst-tlsmod2 \
|
||||
+ tst-tlsmod3 \
|
||||
+ tst-tlsmod4 \
|
||||
+ tst-tlsmod5 \
|
||||
+ tst-tlsmod6 \
|
||||
+ tst-tlsmod7 \
|
||||
+ tst-tlsmod8 \
|
||||
+ tst-tlsmod9 \
|
||||
+ tst-unique1mod1 \
|
||||
+ tst-unique1mod2 \
|
||||
+ tst-unique2mod1 \
|
||||
+ tst-unique2mod2 \
|
||||
+ tst-unwind-ctor-lib \
|
||||
+ unload2dep \
|
||||
+ unload2mod \
|
||||
+ unload3mod1 \
|
||||
+ unload3mod2 \
|
||||
+ unload3mod3 \
|
||||
+ unload3mod4 \
|
||||
+ unload4mod1 \
|
||||
+ unload4mod2 \
|
||||
+ unload4mod3 \
|
||||
+ unload4mod4 \
|
||||
+ unload6mod1 \
|
||||
+ unload6mod2 \
|
||||
+ unload6mod3 \
|
||||
+ unload7mod1 \
|
||||
+ unload7mod2 \
|
||||
+ unload8mod1 \
|
||||
+ unload8mod1x \
|
||||
+ unload8mod2 \
|
||||
+ unload8mod3 \
|
||||
+ unloadmod \
|
||||
+ vismod1 \
|
||||
+ vismod2 \
|
||||
+ vismod3 \
|
||||
+
|
||||
+modules-names-cxx = \
|
||||
+ tst-dlopen-nodelete-reloc-mod1 \
|
||||
+ tst-dlopen-nodelete-reloc-mod10 \
|
||||
+ tst-dlopen-nodelete-reloc-mod11 \
|
||||
+ tst-dlopen-nodelete-reloc-mod12 \
|
||||
+ tst-dlopen-nodelete-reloc-mod13 \
|
||||
+ tst-dlopen-nodelete-reloc-mod14 \
|
||||
+ tst-dlopen-nodelete-reloc-mod15 \
|
||||
+ tst-dlopen-nodelete-reloc-mod16 \
|
||||
+ tst-dlopen-nodelete-reloc-mod17 \
|
||||
+ tst-dlopen-nodelete-reloc-mod2 \
|
||||
+ tst-dlopen-nodelete-reloc-mod3 \
|
||||
+ tst-dlopen-nodelete-reloc-mod4 \
|
||||
+ tst-dlopen-nodelete-reloc-mod5 \
|
||||
+ tst-dlopen-nodelete-reloc-mod6 \
|
||||
+ tst-dlopen-nodelete-reloc-mod7 \
|
||||
+ tst-dlopen-nodelete-reloc-mod8 \
|
||||
+ tst-dlopen-nodelete-reloc-mod9 \
|
||||
+ tst-nodelete-rtldmod \
|
||||
+ tst-nodelete-uniquemod \
|
||||
+ tst-nodelete-zmod \
|
||||
+ tst-unique3lib \
|
||||
+ tst-unique3lib2 \
|
||||
+ tst-unique4lib \
|
||||
+
|
||||
+modules-names += \
|
||||
+ $(if $(CXX),$(modules-names-cxx)) \
|
||||
+ $(modules-execstack-$(have-z-execstack)) \
|
||||
+ $(tst-tls-many-dynamic-modules) \
|
||||
+ $(tst-tls-many-dynamic-modules-dep) \
|
||||
+ $(tst-tls-many-dynamic-modules-dep-bad) \
|
||||
+ $(tlsmod17a-modules) \
|
||||
+ $(tlsmod18a-modules) \
|
||||
|
||||
# Most modules build with _ISOMAC defined, but those filtered out
|
||||
# depend on internal headers.
|
||||
--
|
||||
2.27.0
|
||||
|
||||
20
glibc.spec
20
glibc.spec
@ -66,7 +66,7 @@
|
||||
##############################################################################
|
||||
Name: glibc
|
||||
Version: 2.34
|
||||
Release: 52
|
||||
Release: 53
|
||||
Summary: The GNU libc libraries
|
||||
License: %{all_license}
|
||||
URL: http://www.gnu.org/software/glibc/
|
||||
@ -177,6 +177,18 @@ Patch89: x86-use-default-cache-size-if-it-cannot-be-determine.patch
|
||||
Patch90: x86-Fix-__wcsncmp_avx2-in-strcmp-avx2.S-BZ-28755.patch
|
||||
Patch91: x86-Fix-__wcsncmp_evex-in-strcmp-evex.S-BZ-28755.patch
|
||||
Patch92: linux-__get_nprocs_sched-do-not-feed-CPU_COUNT_S-wit.patch
|
||||
Patch93: elf-Sort-tests-and-modules-names.patch
|
||||
Patch94: elf-Add-a-comment-after-trailing-backslashes.patch
|
||||
Patch95: elf-Makefile-Reflow-and-sort-most-variable-assignmen.patch
|
||||
Patch96: Fix-glibc-2.34-ABI-omission-missing-GLIBC_2.34-in-dy.patch
|
||||
Patch97: x86-Black-list-more-Intel-CPUs-for-TSX-BZ-27398.patch
|
||||
Patch98: x86-Use-CHECK_FEATURE_PRESENT-to-check-HLE-BZ-27398.patch
|
||||
Patch99: support-Add-support_socket_so_timestamp_time64.patch
|
||||
Patch100: linux-Fix-ancillary-64-bit-time-timestamp-conversion.patch
|
||||
Patch101: Linux-Only-generate-64-bit-timestamps-for-64-bit-tim.patch
|
||||
Patch102: socket-Do-not-use-AF_NETLINK-in-__opensock.patch
|
||||
Patch103: tst-socket-timestamp-compat.c-Check-__TIMESIZE-BZ-28.patch
|
||||
Patch104: linux-Fix-missing-__convert_scm_timestamps-BZ-28860.patch
|
||||
|
||||
Patch9000: turn-default-value-of-x86_rep_stosb_threshold_form_2K_to_1M.patch
|
||||
Patch9001: delete-no-hard-link-to-avoid-all_language-package-to.patch
|
||||
@ -1280,6 +1292,12 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Feb 8 2022 Qingqing Li <liqingqing3@huawei.com> - 2.34-53
|
||||
- elf: fix glibc 2.34 ABI omission
|
||||
- x86: black list more intel cpus for TSX [BZ #27398]
|
||||
- recvmsg/recvmmsg: fix ancillary 64-bit time timestamp comversion [BZ #28349, BZ #28350]
|
||||
- socket: do not use AF_NETLINK in __opensock
|
||||
|
||||
* Mon Feb 7 2022 Qingqing Li <liqingqing3@huawei.com> - 2.34-52
|
||||
- fix misc/tst-glibcsyscalls failed due to kernel reserve some syscalls
|
||||
|
||||
|
||||
457
linux-Fix-ancillary-64-bit-time-timestamp-conversion.patch
Normal file
457
linux-Fix-ancillary-64-bit-time-timestamp-conversion.patch
Normal file
@ -0,0 +1,457 @@
|
||||
From e098446037da532d4a250efac9a813bc22f3669f Mon Sep 17 00:00:00 2001
|
||||
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Mon, 24 Jan 2022 08:55:53 -0300
|
||||
Subject: [PATCH] linux: Fix ancillary 64-bit time timestamp conversion (BZ
|
||||
#28349, BZ#28350)
|
||||
|
||||
The __convert_scm_timestamps only updates the control message last
|
||||
pointer for SOL_SOCKET type, so if the message control buffer contains
|
||||
multiple ancillary message types the converted timestamp one might
|
||||
overwrite a valid message.
|
||||
|
||||
The test checks if the extra ancillary space is correctly handled
|
||||
by recvmsg/recvmmsg, where if there is no extra space for the 64-bit
|
||||
time_t converted message the control buffer should be marked with
|
||||
MSG_TRUNC. It also check if recvmsg/recvmmsg handle correctly multiple
|
||||
ancillary data.
|
||||
|
||||
Checked on x86_64-linux and on i686-linux-gnu on both 5.11 and
|
||||
4.15 kernel.
|
||||
|
||||
Co-authored-by: Fabian Vogt <fvogt@suse.de>
|
||||
|
||||
Reviewed-by: Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
(cherry picked from commit 8fba672472ae0055387e9315fc2eddfa6775ca79)
|
||||
---
|
||||
NEWS | 3 +
|
||||
sysdeps/unix/sysv/linux/Makefile | 3 +
|
||||
.../unix/sysv/linux/convert_scm_timestamps.c | 14 +-
|
||||
.../sysv/linux/tst-socket-timestamp-time64.c | 1 +
|
||||
.../unix/sysv/linux/tst-socket-timestamp.c | 336 ++++++++++++++++++
|
||||
5 files changed, 351 insertions(+), 6 deletions(-)
|
||||
create mode 100644 sysdeps/unix/sysv/linux/tst-socket-timestamp-time64.c
|
||||
create mode 100644 sysdeps/unix/sysv/linux/tst-socket-timestamp.c
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index db50b2af..e5225e9f 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -26,6 +26,9 @@ The following bugs are resolved with this release:
|
||||
[12889] nptl: Fix race between pthread_kill and thread exit
|
||||
[19193] nptl: pthread_kill, pthread_cancel should not fail after exit
|
||||
[22542] CVE-2022-23219: Buffer overflow in sunrpc clnt_create for "unix"
|
||||
+ [28349] libc: Segfault for ping -R on qemux86 caused by recvmsg()
|
||||
+ [28350] libc: ping receives SIGABRT on lib32-qemux86-64 caused by
|
||||
+ recvmsg()
|
||||
|
||||
|
||||
Version 2.34
|
||||
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
|
||||
index 76ad0636..3399c874 100644
|
||||
--- a/sysdeps/unix/sysv/linux/Makefile
|
||||
+++ b/sysdeps/unix/sysv/linux/Makefile
|
||||
@@ -262,6 +262,9 @@ sysdep_routines += cmsg_nxthdr
|
||||
CFLAGS-recvmmsg.c = -fexceptions -fasynchronous-unwind-tables
|
||||
CFLAGS-sendmmsg.c = -fexceptions -fasynchronous-unwind-tables
|
||||
|
||||
+tests += tst-socket-timestamp
|
||||
+tests-time64 += tst-socket-timestamp-time64
|
||||
+
|
||||
tests-special += $(objpfx)tst-socket-consts.out
|
||||
$(objpfx)tst-socket-consts.out: ../sysdeps/unix/sysv/linux/tst-socket-consts.py
|
||||
PYTHONPATH=../scripts \
|
||||
diff --git a/sysdeps/unix/sysv/linux/convert_scm_timestamps.c b/sysdeps/unix/sysv/linux/convert_scm_timestamps.c
|
||||
index 00c934c4..5d3c4199 100644
|
||||
--- a/sysdeps/unix/sysv/linux/convert_scm_timestamps.c
|
||||
+++ b/sysdeps/unix/sysv/linux/convert_scm_timestamps.c
|
||||
@@ -54,6 +54,8 @@ __convert_scm_timestamps (struct msghdr *msg, socklen_t msgsize)
|
||||
cmsg != NULL;
|
||||
cmsg = CMSG_NXTHDR (msg, cmsg))
|
||||
{
|
||||
+ last = cmsg;
|
||||
+
|
||||
if (cmsg->cmsg_level != SOL_SOCKET)
|
||||
continue;
|
||||
|
||||
@@ -75,11 +77,9 @@ __convert_scm_timestamps (struct msghdr *msg, socklen_t msgsize)
|
||||
tvts[1] = tmp[1];
|
||||
break;
|
||||
}
|
||||
-
|
||||
- last = cmsg;
|
||||
}
|
||||
|
||||
- if (last == NULL || type == 0)
|
||||
+ if (type == 0)
|
||||
return;
|
||||
|
||||
if (CMSG_SPACE (sizeof tvts) > msgsize - msg->msg_controllen)
|
||||
@@ -88,10 +88,12 @@ __convert_scm_timestamps (struct msghdr *msg, socklen_t msgsize)
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* Zero memory for the new cmsghdr, so reading cmsg_len field
|
||||
+ by CMSG_NXTHDR does not trigger UB. */
|
||||
+ memset (msg->msg_control + msg->msg_controllen, 0,
|
||||
+ CMSG_SPACE (sizeof tvts));
|
||||
msg->msg_controllen += CMSG_SPACE (sizeof tvts);
|
||||
- cmsg = CMSG_NXTHDR(msg, last);
|
||||
- if (cmsg == NULL)
|
||||
- return;
|
||||
+ cmsg = CMSG_NXTHDR (msg, last);
|
||||
cmsg->cmsg_level = SOL_SOCKET;
|
||||
cmsg->cmsg_type = type;
|
||||
cmsg->cmsg_len = CMSG_LEN (sizeof tvts);
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-socket-timestamp-time64.c b/sysdeps/unix/sysv/linux/tst-socket-timestamp-time64.c
|
||||
new file mode 100644
|
||||
index 00000000..ae424c2a
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-socket-timestamp-time64.c
|
||||
@@ -0,0 +1 @@
|
||||
+#include "tst-socket-timestamp.c"
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-socket-timestamp.c b/sysdeps/unix/sysv/linux/tst-socket-timestamp.c
|
||||
new file mode 100644
|
||||
index 00000000..9c2e76f7
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-socket-timestamp.c
|
||||
@@ -0,0 +1,336 @@
|
||||
+/* Check recvmsg/recvmmsg 64-bit timestamp support.
|
||||
+ Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <array_length.h>
|
||||
+#include <arpa/inet.h>
|
||||
+#include <errno.h>
|
||||
+#include <string.h>
|
||||
+#include <stdio.h>
|
||||
+#include <support/check.h>
|
||||
+#include <support/next_to_fault.h>
|
||||
+#include <support/support.h>
|
||||
+#include <support/test-driver.h>
|
||||
+#include <support/xunistd.h>
|
||||
+#include <support/xsocket.h>
|
||||
+#include <sys/mman.h>
|
||||
+
|
||||
+/* Some extra space added for ancillary data, it might be used to convert
|
||||
+ 32-bit timestamp to 64-bit for _TIME_BITS=64. */
|
||||
+enum { slack_max_size = 64 };
|
||||
+static const int slack[] = { 0, 4, 8, 16, 32, slack_max_size };
|
||||
+
|
||||
+static bool support_64_timestamp;
|
||||
+/* AF_INET socket and address used to receive data. */
|
||||
+static int srv;
|
||||
+static struct sockaddr_in srv_addr;
|
||||
+
|
||||
+static int
|
||||
+do_sendto (const struct sockaddr_in *addr, int nmsgs)
|
||||
+{
|
||||
+ int s = xsocket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
|
||||
+ xconnect (s, (const struct sockaddr *) addr, sizeof (*addr));
|
||||
+
|
||||
+ for (int i = 0; i < nmsgs; i++)
|
||||
+ xsendto (s, &i, sizeof (i), 0, (const struct sockaddr *) addr,
|
||||
+ sizeof (*addr));
|
||||
+
|
||||
+ xclose (s);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+do_recvmsg_slack_ancillary (bool use_multi_call, int s, void *cmsg,
|
||||
+ size_t slack, size_t tsize, int exp_payload)
|
||||
+{
|
||||
+ int payload;
|
||||
+ struct iovec iov =
|
||||
+ {
|
||||
+ .iov_base = &payload,
|
||||
+ .iov_len = sizeof (payload)
|
||||
+ };
|
||||
+ size_t msg_controllen = CMSG_SPACE (tsize) + slack;
|
||||
+ char *msg_control = cmsg - msg_controllen;
|
||||
+ memset (msg_control, 0x55, msg_controllen);
|
||||
+ struct mmsghdr mmhdr =
|
||||
+ {
|
||||
+ .msg_hdr =
|
||||
+ {
|
||||
+ .msg_name = NULL,
|
||||
+ .msg_namelen = 0,
|
||||
+ .msg_iov = &iov,
|
||||
+ .msg_iovlen = 1,
|
||||
+ .msg_control = msg_control,
|
||||
+ .msg_controllen = msg_controllen
|
||||
+ },
|
||||
+ };
|
||||
+
|
||||
+ int r;
|
||||
+ if (use_multi_call)
|
||||
+ {
|
||||
+ r = recvmmsg (s, &mmhdr, 1, 0, NULL);
|
||||
+ if (r >= 0)
|
||||
+ r = mmhdr.msg_len;
|
||||
+ }
|
||||
+ else
|
||||
+ r = recvmsg (s, &mmhdr.msg_hdr, 0);
|
||||
+ TEST_COMPARE (r, sizeof (int));
|
||||
+ TEST_COMPARE (payload, exp_payload);
|
||||
+
|
||||
+ if (cmsg == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ /* A timestamp is expected if 32-bit timestamp are used (support in every
|
||||
+ configuration) or if underlying kernel support 64-bit timestamps.
|
||||
+ Otherwise recvmsg will need extra space do add the 64-bit timestamp. */
|
||||
+ bool exp_timestamp;
|
||||
+ if (sizeof (time_t) == 4 || support_64_timestamp)
|
||||
+ exp_timestamp = true;
|
||||
+ else
|
||||
+ exp_timestamp = slack >= CMSG_SPACE (tsize);
|
||||
+
|
||||
+ bool timestamp = false;
|
||||
+ for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mmhdr.msg_hdr);
|
||||
+ cmsg != NULL;
|
||||
+ cmsg = CMSG_NXTHDR (&mmhdr.msg_hdr, cmsg))
|
||||
+ {
|
||||
+ if (cmsg->cmsg_level != SOL_SOCKET)
|
||||
+ continue;
|
||||
+ if (cmsg->cmsg_type == SCM_TIMESTAMP
|
||||
+ && cmsg->cmsg_len == CMSG_LEN (sizeof (struct timeval)))
|
||||
+ {
|
||||
+ struct timeval tv;
|
||||
+ memcpy (&tv, CMSG_DATA (cmsg), sizeof (tv));
|
||||
+ if (test_verbose)
|
||||
+ printf ("SCM_TIMESTAMP: {%jd, %jd}\n", (intmax_t)tv.tv_sec,
|
||||
+ (intmax_t)tv.tv_usec);
|
||||
+ timestamp = true;
|
||||
+ }
|
||||
+ else if (cmsg->cmsg_type == SCM_TIMESTAMPNS
|
||||
+ && cmsg->cmsg_len == CMSG_LEN (sizeof (struct timespec)))
|
||||
+ {
|
||||
+ struct timespec ts;
|
||||
+ memcpy (&ts, CMSG_DATA (cmsg), sizeof (ts));
|
||||
+ if (test_verbose)
|
||||
+ printf ("SCM_TIMESTAMPNS: {%jd, %jd}\n", (intmax_t)ts.tv_sec,
|
||||
+ (intmax_t)ts.tv_nsec);
|
||||
+ timestamp = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ TEST_COMPARE (timestamp, exp_timestamp);
|
||||
+}
|
||||
+
|
||||
+/* Check if the extra ancillary space is correctly handled by recvmsg and
|
||||
+ recvmmsg with different extra space for the ancillaty buffer. */
|
||||
+static void
|
||||
+do_test_slack_space (void)
|
||||
+{
|
||||
+ /* Setup the ancillary data buffer with an extra page with PROT_NONE to
|
||||
+ check the possible timestamp conversion on some systems. */
|
||||
+ struct support_next_to_fault nf =
|
||||
+ support_next_to_fault_allocate (slack_max_size);
|
||||
+ void *msgbuf = nf.buffer + slack_max_size;
|
||||
+
|
||||
+ /* Enable the timestamp using struct timeval precision. */
|
||||
+ {
|
||||
+ int r = setsockopt (srv, SOL_SOCKET, SO_TIMESTAMP, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+ }
|
||||
+ /* Check recvmsg. */
|
||||
+ do_sendto (&srv_addr, array_length (slack));
|
||||
+ for (int s = 0; s < array_length (slack); s++)
|
||||
+ {
|
||||
+ memset (nf.buffer, 0x55, nf.length);
|
||||
+ do_recvmsg_slack_ancillary (false, srv, msgbuf, slack[s],
|
||||
+ sizeof (struct timeval), s);
|
||||
+ }
|
||||
+ /* Check recvmmsg. */
|
||||
+ do_sendto (&srv_addr, array_length (slack));
|
||||
+ for (int s = 0; s < array_length (slack); s++)
|
||||
+ {
|
||||
+ memset (nf.buffer, 0x55, nf.length);
|
||||
+ do_recvmsg_slack_ancillary (true, srv, msgbuf, slack[s],
|
||||
+ sizeof (struct timeval), s);
|
||||
+ }
|
||||
+
|
||||
+ /* Now enable timestamp using a higher precision, it overwrites the previous
|
||||
+ precision. */
|
||||
+ {
|
||||
+ int r = setsockopt (srv, SOL_SOCKET, SO_TIMESTAMPNS, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+ }
|
||||
+ /* Check recvmsg. */
|
||||
+ do_sendto (&srv_addr, array_length (slack));
|
||||
+ for (int s = 0; s < array_length (slack); s++)
|
||||
+ do_recvmsg_slack_ancillary (false, srv, msgbuf, slack[s],
|
||||
+ sizeof (struct timespec), s);
|
||||
+ /* Check recvmmsg. */
|
||||
+ do_sendto (&srv_addr, array_length (slack));
|
||||
+ for (int s = 0; s < array_length (slack); s++)
|
||||
+ do_recvmsg_slack_ancillary (true, srv, msgbuf, slack[s],
|
||||
+ sizeof (struct timespec), s);
|
||||
+
|
||||
+ support_next_to_fault_free (&nf);
|
||||
+}
|
||||
+
|
||||
+/* Check if the converted 64-bit timestamp is correctly appended when there
|
||||
+ are multiple ancillary messages. */
|
||||
+static void
|
||||
+do_recvmsg_multiple_ancillary (bool use_multi_call, int s, void *cmsg,
|
||||
+ size_t cmsgsize, int exp_msg)
|
||||
+{
|
||||
+ int msg;
|
||||
+ struct iovec iov =
|
||||
+ {
|
||||
+ .iov_base = &msg,
|
||||
+ .iov_len = sizeof (msg)
|
||||
+ };
|
||||
+ size_t msgs = cmsgsize;
|
||||
+ struct mmsghdr mmhdr =
|
||||
+ {
|
||||
+ .msg_hdr =
|
||||
+ {
|
||||
+ .msg_name = NULL,
|
||||
+ .msg_namelen = 0,
|
||||
+ .msg_iov = &iov,
|
||||
+ .msg_iovlen = 1,
|
||||
+ .msg_controllen = msgs,
|
||||
+ .msg_control = cmsg,
|
||||
+ },
|
||||
+ };
|
||||
+
|
||||
+ int r;
|
||||
+ if (use_multi_call)
|
||||
+ {
|
||||
+ r = recvmmsg (s, &mmhdr, 1, 0, NULL);
|
||||
+ if (r >= 0)
|
||||
+ r = mmhdr.msg_len;
|
||||
+ }
|
||||
+ else
|
||||
+ r = recvmsg (s, &mmhdr.msg_hdr, 0);
|
||||
+ TEST_COMPARE (r, sizeof (int));
|
||||
+ TEST_COMPARE (msg, exp_msg);
|
||||
+
|
||||
+ if (cmsg == NULL)
|
||||
+ return;
|
||||
+
|
||||
+ bool timestamp = false;
|
||||
+ bool origdstaddr = false;
|
||||
+ for (struct cmsghdr *cmsg = CMSG_FIRSTHDR (&mmhdr.msg_hdr);
|
||||
+ cmsg != NULL;
|
||||
+ cmsg = CMSG_NXTHDR (&mmhdr.msg_hdr, cmsg))
|
||||
+ {
|
||||
+ if (cmsg->cmsg_level == SOL_IP
|
||||
+ && cmsg->cmsg_type == IP_ORIGDSTADDR
|
||||
+ && cmsg->cmsg_len >= CMSG_LEN (sizeof (struct sockaddr_in)))
|
||||
+ {
|
||||
+ struct sockaddr_in sa;
|
||||
+ memcpy (&sa, CMSG_DATA (cmsg), sizeof (sa));
|
||||
+ if (test_verbose)
|
||||
+ {
|
||||
+ char str[INET_ADDRSTRLEN];
|
||||
+ inet_ntop (AF_INET, &sa.sin_addr, str, INET_ADDRSTRLEN);
|
||||
+ printf ("IP_ORIGDSTADDR: %s:%d\n", str, ntohs (sa.sin_port));
|
||||
+ }
|
||||
+ origdstaddr = sa.sin_addr.s_addr == srv_addr.sin_addr.s_addr
|
||||
+ && sa.sin_port == srv_addr.sin_port;
|
||||
+ }
|
||||
+ if (cmsg->cmsg_level == SOL_SOCKET
|
||||
+ && cmsg->cmsg_type == SCM_TIMESTAMP
|
||||
+ && cmsg->cmsg_len >= CMSG_LEN (sizeof (struct timeval)))
|
||||
+ {
|
||||
+ struct timeval tv;
|
||||
+ memcpy (&tv, CMSG_DATA (cmsg), sizeof (tv));
|
||||
+ if (test_verbose)
|
||||
+ printf ("SCM_TIMESTAMP: {%jd, %jd}\n", (intmax_t)tv.tv_sec,
|
||||
+ (intmax_t)tv.tv_usec);
|
||||
+ timestamp = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ TEST_COMPARE (timestamp, true);
|
||||
+ TEST_COMPARE (origdstaddr, true);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+do_test_multiple_ancillary (void)
|
||||
+{
|
||||
+ {
|
||||
+ int r = setsockopt (srv, SOL_SOCKET, SO_TIMESTAMP, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+ }
|
||||
+ {
|
||||
+ int r = setsockopt (srv, IPPROTO_IP, IP_RECVORIGDSTADDR, &(int){1},
|
||||
+ sizeof (int));
|
||||
+ TEST_VERIFY_EXIT (r != -1);
|
||||
+ }
|
||||
+
|
||||
+ /* Enougth data for default SO_TIMESTAMP, the IP_RECVORIGDSTADDR, and the
|
||||
+ extra 64-bit SO_TIMESTAMP. */
|
||||
+ enum { msgbuflen = CMSG_SPACE (2 * sizeof (uint64_t))
|
||||
+ + CMSG_SPACE (sizeof (struct sockaddr_in))
|
||||
+ + CMSG_SPACE (2 * sizeof (uint64_t)) };
|
||||
+ char msgbuf[msgbuflen];
|
||||
+
|
||||
+ enum { nmsgs = 8 };
|
||||
+ /* Check recvmsg. */
|
||||
+ do_sendto (&srv_addr, nmsgs);
|
||||
+ for (int s = 0; s < nmsgs; s++)
|
||||
+ do_recvmsg_multiple_ancillary (false, srv, msgbuf, msgbuflen, s);
|
||||
+ /* Check recvmmsg. */
|
||||
+ do_sendto (&srv_addr, nmsgs);
|
||||
+ for (int s = 0; s < nmsgs; s++)
|
||||
+ do_recvmsg_multiple_ancillary (true, srv, msgbuf, msgbuflen, s);
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ srv = xsocket (AF_INET, SOCK_DGRAM, 0);
|
||||
+ srv_addr = (struct sockaddr_in) {
|
||||
+ .sin_family = AF_INET,
|
||||
+ .sin_addr = {.s_addr = htonl (INADDR_LOOPBACK) },
|
||||
+ };
|
||||
+ xbind (srv, (struct sockaddr *) &srv_addr, sizeof (srv_addr));
|
||||
+ {
|
||||
+ socklen_t sa_len = sizeof (srv_addr);
|
||||
+ xgetsockname (srv, (struct sockaddr *) &srv_addr, &sa_len);
|
||||
+ TEST_VERIFY (sa_len == sizeof (srv_addr));
|
||||
+ }
|
||||
+
|
||||
+ TEST_COMPARE (recvmsg (-1, NULL, 0), -1);
|
||||
+ TEST_COMPARE (errno, EBADF);
|
||||
+ TEST_COMPARE (recvmmsg (-1, NULL, 0, 0, NULL), -1);
|
||||
+ TEST_COMPARE (errno, EBADF);
|
||||
+
|
||||
+ /* If underlying kernel does not support */
|
||||
+ support_64_timestamp = support_socket_so_timestamp_time64 (srv);
|
||||
+
|
||||
+ do_test_slack_space ();
|
||||
+ do_test_multiple_ancillary ();
|
||||
+
|
||||
+ xclose (srv);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
--
|
||||
2.27.0
|
||||
|
||||
37
linux-Fix-missing-__convert_scm_timestamps-BZ-28860.patch
Normal file
37
linux-Fix-missing-__convert_scm_timestamps-BZ-28860.patch
Normal file
@ -0,0 +1,37 @@
|
||||
From 0351c75c5f94134fcec0e778e8cf86d149f8bbfb Mon Sep 17 00:00:00 2001
|
||||
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Thu, 3 Feb 2022 16:52:52 -0300
|
||||
Subject: [PATCH] linux: Fix missing __convert_scm_timestamps (BZ #28860)
|
||||
|
||||
Commit 948ce73b31 made recvmsg/recvmmsg to always call
|
||||
__convert_scm_timestamps for 64 bit time_t symbol, so adjust it to
|
||||
always build it for __TIMESIZE != 64.
|
||||
|
||||
It fixes build for architecture with 32 bit time_t support when
|
||||
configured with minimum kernel of 5.1.
|
||||
|
||||
(cherry-picked from 798d716df71fb23dc89d1d5dba1fc26a1b5c0024)
|
||||
---
|
||||
sysdeps/unix/sysv/linux/convert_scm_timestamps.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/convert_scm_timestamps.c b/sysdeps/unix/sysv/linux/convert_scm_timestamps.c
|
||||
index 5d3c4199e0..953ce97bd2 100644
|
||||
--- a/sysdeps/unix/sysv/linux/convert_scm_timestamps.c
|
||||
+++ b/sysdeps/unix/sysv/linux/convert_scm_timestamps.c
|
||||
@@ -16,9 +16,10 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
-#include <kernel-features.h>
|
||||
+#include <bits/wordsize.h>
|
||||
+#include <bits/timesize.h>
|
||||
|
||||
-#ifndef __ASSUME_TIME64_SYSCALLS
|
||||
+#if __TIMESIZE != 64
|
||||
# include <stdint.h>
|
||||
# include <string.h>
|
||||
# include <sys/socket.h>
|
||||
--
|
||||
2.27.0
|
||||
|
||||
40
socket-Do-not-use-AF_NETLINK-in-__opensock.patch
Normal file
40
socket-Do-not-use-AF_NETLINK-in-__opensock.patch
Normal file
@ -0,0 +1,40 @@
|
||||
From 6eaf10cbb78d22eae7999d9de55f6b93999e0860 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Mon, 22 Nov 2021 14:41:14 +0100
|
||||
Subject: [PATCH] socket: Do not use AF_NETLINK in __opensock
|
||||
|
||||
It is not possible to use interface ioctls with netlink sockets
|
||||
on all Linux kernels.
|
||||
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
(cherry picked from commit 3d981795cd00cc9b73c3ee5087c308361acd62e5)
|
||||
---
|
||||
socket/opensock.c | 9 +--------
|
||||
1 file changed, 1 insertion(+), 8 deletions(-)
|
||||
|
||||
diff --git a/socket/opensock.c b/socket/opensock.c
|
||||
index ff94d27a61..3e35821f91 100644
|
||||
--- a/socket/opensock.c
|
||||
+++ b/socket/opensock.c
|
||||
@@ -24,17 +24,10 @@
|
||||
int
|
||||
__opensock (void)
|
||||
{
|
||||
- /* SOCK_DGRAM is supported by all address families. (Netlink does
|
||||
- not support SOCK_STREAM.) */
|
||||
+ /* SOCK_DGRAM is supported by all address families. */
|
||||
int type = SOCK_DGRAM | SOCK_CLOEXEC;
|
||||
int fd;
|
||||
|
||||
-#ifdef AF_NETLINK
|
||||
- fd = __socket (AF_NETLINK, type, 0);
|
||||
- if (fd >= 0)
|
||||
- return fd;
|
||||
-#endif
|
||||
-
|
||||
fd = __socket (AF_UNIX, type, 0);
|
||||
if (fd >= 0)
|
||||
return fd;
|
||||
--
|
||||
2.27.0
|
||||
|
||||
103
support-Add-support_socket_so_timestamp_time64.patch
Normal file
103
support-Add-support_socket_so_timestamp_time64.patch
Normal file
@ -0,0 +1,103 @@
|
||||
From e09e7b1492b2d5c2f68ddf81f8f58e093dd4df6d Mon Sep 17 00:00:00 2001
|
||||
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Mon, 13 Dec 2021 11:36:42 -0300
|
||||
Subject: [PATCH] support: Add support_socket_so_timestamp_time64
|
||||
|
||||
Check if the socket support 64-bit network packages timestamps
|
||||
(SO_TIMESTAMP and SO_TIMESTAMPNS). This will be used on recvmsg
|
||||
and recvmmsg tests to check if the timestamp should be generated.
|
||||
|
||||
Reviewed-by: Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
(cherry picked from 38bc0f4e78934aab455b31af05cefcbf3c22bece)
|
||||
---
|
||||
support/Makefile | 1 +
|
||||
support/support.h | 4 ++
|
||||
support/support_socket_so_timestamp_time64.c | 48 ++++++++++++++++++++
|
||||
3 files changed, 53 insertions(+)
|
||||
create mode 100644 support/support_socket_so_timestamp_time64.c
|
||||
|
||||
diff --git a/support/Makefile b/support/Makefile
|
||||
index 2a0731796f..724ae6d712 100644
|
||||
--- a/support/Makefile
|
||||
+++ b/support/Makefile
|
||||
@@ -78,6 +78,7 @@ libsupport-routines = \
|
||||
support_set_small_thread_stack_size \
|
||||
support_shared_allocate \
|
||||
support_small_stack_thread_attribute \
|
||||
+ support_socket_so_timestamp_time64 \
|
||||
support_stat_nanoseconds \
|
||||
support_subprocess \
|
||||
support_test_compare_blob \
|
||||
diff --git a/support/support.h b/support/support.h
|
||||
index c219e0d9d1..309be85b09 100644
|
||||
--- a/support/support.h
|
||||
+++ b/support/support.h
|
||||
@@ -164,6 +164,10 @@ extern bool support_select_modifies_timeout (void);
|
||||
tv_usec larger than 1000000. */
|
||||
extern bool support_select_normalizes_timeout (void);
|
||||
|
||||
+/* Return true if socket FD supports 64-bit timestamps with the SOL_SOCKET
|
||||
+ and SO_TIMESTAMP/SO_TIMESTAMPNS. */
|
||||
+extern bool support_socket_so_timestamp_time64 (int fd);
|
||||
+
|
||||
/* Create a timer that trigger after SEC seconds and NSEC nanoseconds. If
|
||||
REPEAT is true the timer will repeat indefinitely. If CALLBACK is not
|
||||
NULL, the function will be called when the timer expires; otherwise a
|
||||
diff --git a/support/support_socket_so_timestamp_time64.c b/support/support_socket_so_timestamp_time64.c
|
||||
new file mode 100644
|
||||
index 0000000000..54bf3f4272
|
||||
--- /dev/null
|
||||
+++ b/support/support_socket_so_timestamp_time64.c
|
||||
@@ -0,0 +1,48 @@
|
||||
+/* Return whether socket supports 64-bit timestamps.
|
||||
+ Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <unistd.h>
|
||||
+#include <sys/syscall.h>
|
||||
+#include <sys/socket.h>
|
||||
+#include <support/support.h>
|
||||
+#ifdef __linux__
|
||||
+# include <socket-constants-time64.h>
|
||||
+#endif
|
||||
+
|
||||
+bool
|
||||
+support_socket_so_timestamp_time64 (int fd)
|
||||
+{
|
||||
+#ifdef __linux__
|
||||
+# if __LINUX_KERNEL_VERSION >= 0x050100 \
|
||||
+ || __WORDSIZE == 64 \
|
||||
+ || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64)
|
||||
+ return true;
|
||||
+# else
|
||||
+ int level = SOL_SOCKET;
|
||||
+ int optname = COMPAT_SO_TIMESTAMP_NEW;
|
||||
+ int optval;
|
||||
+ socklen_t len = sizeof (optval);
|
||||
+
|
||||
+ int r = syscall (__NR_getsockopt, fd, level, optname, &optval, &len);
|
||||
+ return r != -1;
|
||||
+# endif
|
||||
+#else
|
||||
+ return false;
|
||||
+#endif
|
||||
+}
|
||||
--
|
||||
2.27.0
|
||||
|
||||
29
tst-socket-timestamp-compat.c-Check-__TIMESIZE-BZ-28.patch
Normal file
29
tst-socket-timestamp-compat.c-Check-__TIMESIZE-BZ-28.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From 008003dc6e83439c5e04a744b7fd8197df19096e Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Sat, 29 Jan 2022 05:22:31 -0800
|
||||
Subject: [PATCH] tst-socket-timestamp-compat.c: Check __TIMESIZE [BZ #28837]
|
||||
|
||||
time_t size is defined by __TIMESIZE, not __WORDSIZE. Check __TIMESIZE,
|
||||
instead of __WORDSIZE, for time_t size. This fixes BZ #28837.
|
||||
|
||||
(cherry pick from commit 77a602ebb0769e7ccc5f9f8e06f7fffe66f69dfc)
|
||||
---
|
||||
sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
|
||||
index de261dae5a..0ff1a214e6 100644
|
||||
--- a/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c
|
||||
@@ -237,7 +237,7 @@ do_test (void)
|
||||
{
|
||||
/* This test only make sense for ABIs that support 32 bit time_t socket
|
||||
timestampss. */
|
||||
- if (sizeof (time_t) > 4 && __WORDSIZE == 64)
|
||||
+ if (sizeof (time_t) > 4 && __TIMESIZE == 64)
|
||||
return 0;
|
||||
|
||||
srv = xsocket (AF_INET, SOCK_DGRAM, 0);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
67
x86-Black-list-more-Intel-CPUs-for-TSX-BZ-27398.patch
Normal file
67
x86-Black-list-more-Intel-CPUs-for-TSX-BZ-27398.patch
Normal file
@ -0,0 +1,67 @@
|
||||
From b952c25dc7adf0684c53ad72d1d667da0348c929 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Fri, 14 Jan 2022 14:48:01 -0800
|
||||
Subject: [PATCH] x86: Black list more Intel CPUs for TSX [BZ #27398]
|
||||
|
||||
Disable TSX and enable RTM_ALWAYS_ABORT for Intel CPUs listed in:
|
||||
|
||||
https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html
|
||||
|
||||
This fixes BZ #27398.
|
||||
|
||||
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
|
||||
(cherry picked from commit 1e000d3d33211d5a954300e2a69b90f93f18a1a1)
|
||||
---
|
||||
sysdeps/x86/cpu-features.c | 34 +++++++++++++++++++++++++++++++---
|
||||
1 file changed, 31 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
|
||||
index 645bba6314..de4e3c3b72 100644
|
||||
--- a/sysdeps/x86/cpu-features.c
|
||||
+++ b/sysdeps/x86/cpu-features.c
|
||||
@@ -507,11 +507,39 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
break;
|
||||
}
|
||||
|
||||
- /* Disable TSX on some Haswell processors to avoid TSX on kernels that
|
||||
- weren't updated with the latest microcode package (which disables
|
||||
- broken feature by default). */
|
||||
+ /* Disable TSX on some processors to avoid TSX on kernels that
|
||||
+ weren't updated with the latest microcode package (which
|
||||
+ disables broken feature by default). */
|
||||
switch (model)
|
||||
{
|
||||
+ case 0x55:
|
||||
+ if (stepping <= 5)
|
||||
+ goto disable_tsx;
|
||||
+ break;
|
||||
+ case 0x8e:
|
||||
+ /* NB: Although the errata documents that for model == 0x8e,
|
||||
+ only 0xb stepping or lower are impacted, the intention of
|
||||
+ the errata was to disable TSX on all client processors on
|
||||
+ all steppings. Include 0xc stepping which is an Intel
|
||||
+ Core i7-8665U, a client mobile processor. */
|
||||
+ case 0x9e:
|
||||
+ if (stepping > 0xc)
|
||||
+ break;
|
||||
+ /* Fall through. */
|
||||
+ case 0x4e:
|
||||
+ case 0x5e:
|
||||
+ {
|
||||
+ /* Disable Intel TSX and enable RTM_ALWAYS_ABORT for
|
||||
+ processors listed in:
|
||||
+
|
||||
+https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html
|
||||
+ */
|
||||
+disable_tsx:
|
||||
+ CPU_FEATURE_UNSET (cpu_features, HLE);
|
||||
+ CPU_FEATURE_UNSET (cpu_features, RTM);
|
||||
+ CPU_FEATURE_SET (cpu_features, RTM_ALWAYS_ABORT);
|
||||
+ }
|
||||
+ break;
|
||||
case 0x3f:
|
||||
/* Xeon E7 v3 with stepping >= 4 has working TSX. */
|
||||
if (stepping >= 4)
|
||||
--
|
||||
2.27.0
|
||||
|
||||
29
x86-Use-CHECK_FEATURE_PRESENT-to-check-HLE-BZ-27398.patch
Normal file
29
x86-Use-CHECK_FEATURE_PRESENT-to-check-HLE-BZ-27398.patch
Normal file
@ -0,0 +1,29 @@
|
||||
From aa601d024424c40ae9a69b0c4e394a70ea0570c8 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Mon, 24 Jan 2022 19:33:43 -0800
|
||||
Subject: [PATCH] x86: Use CHECK_FEATURE_PRESENT to check HLE [BZ #27398]
|
||||
|
||||
HLE is disabled on blacklisted CPUs. Use CHECK_FEATURE_PRESENT, instead
|
||||
of CHECK_FEATURE_ACTIVE, to check HLE.
|
||||
|
||||
(cherry picked from commit 501246c5e2dfcc278f0ebbdb72345cdd239521c7)
|
||||
---
|
||||
sysdeps/x86/tst-cpu-features-supports.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sysdeps/x86/tst-cpu-features-supports.c b/sysdeps/x86/tst-cpu-features-supports.c
|
||||
index 9d76e6bd3f..faa5091b78 100644
|
||||
--- a/sysdeps/x86/tst-cpu-features-supports.c
|
||||
+++ b/sysdeps/x86/tst-cpu-features-supports.c
|
||||
@@ -130,7 +130,7 @@ do_test (int argc, char **argv)
|
||||
fails += CHECK_FEATURE_ACTIVE (gfni, GFNI);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
- fails += CHECK_FEATURE_ACTIVE (hle, HLE);
|
||||
+ fails += CHECK_FEATURE_PRESENT (hle, HLE);
|
||||
fails += CHECK_FEATURE_PRESENT (ibt, IBT);
|
||||
fails += CHECK_FEATURE_ACTIVE (lahf_lm, LAHF64_SAHF64);
|
||||
fails += CHECK_FEATURE_PRESENT (lm, LM);
|
||||
--
|
||||
2.27.0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user