update to glibc-2.28-189.5.el8_6

Signed-off-by: lxpzlm <lxp01404969@alibaba-inc.com>
This commit is contained in:
lxpzlm 2022-06-17 10:46:59 +08:00
parent 62c3525fd6
commit ec6159bffa
16 changed files with 974 additions and 868 deletions

View file

@ -1,148 +0,0 @@
From ab887596903b159107e0be6f8b25986a5597cfca Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Mon, 7 Feb 2022 10:44:17 -0500
Subject: [PATCH 2/4] Add a testcase to check alignment of PT_LOAD segment [BZ
#28676]
Backport from master commit: fc2334a
Signed-off-by: Rongwei Wang <rongwei.wang@linux.alibaba.com>
---
elf/Makefile | 14 ++++++++++++--
elf/tst-align3.c | 38 ++++++++++++++++++++++++++++++++++++++
elf/tst-alignmod3.c | 32 ++++++++++++++++++++++++++++++++
3 files changed, 82 insertions(+), 2 deletions(-)
create mode 100644 elf/tst-align3.c
create mode 100644 elf/tst-alignmod3.c
diff --git a/elf/Makefile b/elf/Makefile
index 2093cefa..0d3366e2 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -187,7 +187,7 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
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-align tst-align2 tst-align3 \
tst-dlmodcount tst-dlopenrpath tst-deep1 \
tst-dlmopen1 tst-dlmopen3 \
unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
@@ -221,6 +221,9 @@ tests += tst-dlopen-aout
tst-dlopen-aout-no-pie = yes
endif
test-srcs = tst-pathopt
+ifeq (yes,$(have-fpie))
+tests-pie += tst-align3
+endif
selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
ifneq ($(selinux-enabled),1)
tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
@@ -268,7 +271,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
circlemod3 circlemod3a \
reldep8mod1 reldep8mod2 reldep8mod3 \
reldep9mod1 reldep9mod2 reldep9mod3 \
- tst-alignmod tst-alignmod2 \
+ tst-alignmod tst-alignmod2 tst-alignmod3 \
$(modules-execstack-$(have-z-execstack)) \
tst-dlopenrpathmod tst-deep1mod1 tst-deep1mod2 tst-deep1mod3 \
tst-dlmopen1mod tst-auditmod1 \
@@ -1060,6 +1063,13 @@ CFLAGS-tst-alignmod2.c += $(stack-align-test-flags)
$(objpfx)tst-align: $(libdl)
$(objpfx)tst-align.out: $(objpfx)tst-alignmod.so
$(objpfx)tst-align2: $(objpfx)tst-alignmod2.so
+$(objpfx)tst-align3: $(objpfx)tst-alignmod3.so
+ifeq (yes,$(have-fpie))
+CFLAGS-tst-align3.c += $(PIE-ccflag)
+endif
+LDFLAGS-tst-align3 += -Wl,-z,max-page-size=0x200000
+LDFLAGS-tst-alignmod3.so += -Wl,-z,max-page-size=0x200000
+$(objpfx)tst-alignmod3.so: $(libsupport)
$(objpfx)unload3: $(libdl)
$(objpfx)unload3.out: $(objpfx)unload3mod1.so $(objpfx)unload3mod2.so \
diff --git a/elf/tst-align3.c b/elf/tst-align3.c
new file mode 100644
index 00000000..ac86d623
--- /dev/null
+++ b/elf/tst-align3.c
@@ -0,0 +1,38 @@
+/* Check alignment of PT_LOAD segment in a shared library.
+ Copyright (C) 2021 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 <support/check.h>
+#include <tst-stack-align.h>
+
+/* This should cover all possible page sizes we currently support. */
+#define ALIGN 0x200000
+
+int bar __attribute__ ((aligned (ALIGN))) = 1;
+
+extern int do_load_test (void);
+
+static int
+do_test (void)
+{
+ printf ("bar: %p\n", &bar);
+ TEST_VERIFY (is_aligned (&bar, ALIGN) == 0);
+
+ return do_load_test ();
+}
+
+#include <support/test-driver.c>
diff --git a/elf/tst-alignmod3.c b/elf/tst-alignmod3.c
new file mode 100644
index 00000000..0d33f237
--- /dev/null
+++ b/elf/tst-alignmod3.c
@@ -0,0 +1,32 @@
+/* Check alignment of PT_LOAD segment in a shared library.
+ Copyright (C) 2021 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 <support/check.h>
+#include <tst-stack-align.h>
+
+/* This should cover all possible page sizes we currently support. */
+#define ALIGN 0x200000
+
+int foo __attribute__ ((aligned (ALIGN))) = 1;
+
+void
+do_load_test (void)
+{
+ printf ("foo: %p\n", &foo);
+ TEST_VERIFY (is_aligned (&foo, ALIGN) == 0);
+}
--
2.18.4

View file

@ -1,325 +0,0 @@
From 7ae4fdd1783cdfd30bfefdd7c3c3c9430f234406 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Tue, 15 Feb 2022 14:15:50 -0500
Subject: [PATCH] Properly check stack alignment [BZ #27901]
1. Replace
if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0)
which may be optimized out by compiler, with
int
__attribute__ ((weak, noclone, noinline))
is_aligned (void *p, int align)
{
return (((uintptr_t) p) & (align - 1)) != 0;
}
2. Add TEST_STACK_ALIGN_INIT to TEST_STACK_ALIGN.
3. Add a common TEST_STACK_ALIGN_INIT to check 16-byte stack alignment
for both i386 and x86-64.
4. Update powerpc to use TEST_STACK_ALIGN_INIT.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Signed-off-by: Rongwei Wang <rongwei.wang@linux.alibaba.com>
---
sysdeps/generic/tst-stack-align.h | 40 ++++++++++++++++---------
sysdeps/i386/i686/tst-stack-align.h | 44 ---------------------------
sysdeps/i386/tst-stack-align.h | 41 -------------------------
sysdeps/powerpc/tst-stack-align.h | 27 +++++------------
sysdeps/x86/tst-stack-align.h | 28 ++++++++++++++++++
sysdeps/x86_64/tst-stack-align.h | 46 -----------------------------
6 files changed, 61 insertions(+), 165 deletions(-)
delete mode 100644 sysdeps/i386/i686/tst-stack-align.h
delete mode 100644 sysdeps/i386/tst-stack-align.h
create mode 100644 sysdeps/x86/tst-stack-align.h
delete mode 100644 sysdeps/x86_64/tst-stack-align.h
diff --git a/sysdeps/generic/tst-stack-align.h b/sysdeps/generic/tst-stack-align.h
index e5cb3310..e6050901 100644
--- a/sysdeps/generic/tst-stack-align.h
+++ b/sysdeps/generic/tst-stack-align.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2003-2018 Free Software Foundation, Inc.
+/* Check stack alignment. Generic version.
+ Copyright (C) 2003-2021 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
@@ -18,17 +19,28 @@
#include <stdio.h>
#include <stdint.h>
+int
+__attribute__ ((weak, noclone, noinline))
+is_aligned (void *p, int align)
+{
+ return (((uintptr_t) p) & (align - 1)) != 0;
+}
+
+#ifndef TEST_STACK_ALIGN_INIT
+# define TEST_STACK_ALIGN_INIT() 0
+#endif
+
#define TEST_STACK_ALIGN() \
- ({ \
- double _d = 12.0; \
- long double _ld = 15.0; \
- int _ret = 0; \
- printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \
- if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \
- if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \
- _ret = 1; \
- _ret; \
- })
+ ({ \
+ double _d = 12.0; \
+ long double _ld = 15.0; \
+ int _ret = TEST_STACK_ALIGN_INIT (); \
+ \
+ printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \
+ _ret += is_aligned (&_d, __alignof (double)); \
+ \
+ printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, \
+ __alignof (long double)); \
+ _ret += is_aligned (&_ld, __alignof (long double)); \
+ _ret; \
+ })
diff --git a/sysdeps/i386/i686/tst-stack-align.h b/sysdeps/i386/i686/tst-stack-align.h
deleted file mode 100644
index 975f26ef..00000000
--- a/sysdeps/i386/i686/tst-stack-align.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (C) 2003-2018 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
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdint.h>
-#ifndef __SSE__
-#include_next <tst-stack-align.h>
-#else
-#include <xmmintrin.h>
-
-#define TEST_STACK_ALIGN() \
- ({ \
- __m128 _m; \
- double _d = 12.0; \
- long double _ld = 15.0; \
- int _ret = 0; \
- printf ("__m128: %p %zu\n", &_m, __alignof (__m128)); \
- if ((((uintptr_t) &_m) & (__alignof (__m128) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \
- if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \
- if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \
- _ret = 1; \
- _ret; \
- })
-#endif
diff --git a/sysdeps/i386/tst-stack-align.h b/sysdeps/i386/tst-stack-align.h
deleted file mode 100644
index 394ff773..00000000
--- a/sysdeps/i386/tst-stack-align.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 2004-2018 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
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdint.h>
-
-typedef struct { int i[4]; } int_al16 __attribute__((aligned (16)));
-
-#define TEST_STACK_ALIGN() \
- ({ \
- int_al16 _m; \
- double _d = 12.0; \
- long double _ld = 15.0; \
- int _ret = 0; \
- printf ("int_al16: %p %zu\n", &_m, __alignof (int_al16)); \
- if ((((uintptr_t) &_m) & (__alignof (int_al16) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \
- if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \
- if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \
- _ret = 1; \
- _ret; \
- })
diff --git a/sysdeps/powerpc/tst-stack-align.h b/sysdeps/powerpc/tst-stack-align.h
index 7fd7013b..d7400b28 100644
--- a/sysdeps/powerpc/tst-stack-align.h
+++ b/sysdeps/powerpc/tst-stack-align.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2005-2018 Free Software Foundation, Inc.
+/* Check stack alignment. PowerPC version.
+ Copyright (C) 2005-2021 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
@@ -15,10 +16,7 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <stdio.h>
-#include <stdint.h>
-
-#define TEST_STACK_ALIGN() \
+#define TEST_STACK_ALIGN_INIT() \
({ \
/* Altivec __vector int etc. needs 16byte aligned stack. \
Instead of using altivec.h here, use aligned attribute instead. */ \
@@ -27,20 +25,9 @@
int _i __attribute__((aligned (16))); \
int _j[3]; \
} _s = { ._i = 18, ._j[0] = 19, ._j[1] = 20, ._j[2] = 21 }; \
- double _d = 12.0; \
- long double _ld = 15.0; \
- int _ret = 0; \
printf ("__vector int: { %d, %d, %d, %d } %p %zu\n", _s._i, _s._j[0], \
_s._j[1], _s._j[2], &_s, __alignof (_s)); \
- if ((((uintptr_t) &_s) & (__alignof (_s) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \
- if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \
- if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \
- _ret = 1; \
- _ret; \
- })
+ is_aligned (&_s, __alignof (_s)); \
+ })
+
+#include_next <tst-stack-align.h>
diff --git a/sysdeps/x86/tst-stack-align.h b/sysdeps/x86/tst-stack-align.h
new file mode 100644
index 00000000..02ecc72d
--- /dev/null
+++ b/sysdeps/x86/tst-stack-align.h
@@ -0,0 +1,28 @@
+/* Check stack alignment. X86 version.
+ Copyright (C) 2021 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/>. */
+
+typedef struct { int i[16]; } int_al16 __attribute__((aligned (16)));
+
+#define TEST_STACK_ALIGN_INIT() \
+ ({ \
+ int_al16 _m; \
+ printf ("int_al16: %p %zu\n", &_m, __alignof (int_al16)); \
+ is_aligned (&_m, __alignof (int_al16)); \
+ })
+
+#include_next <tst-stack-align.h>
diff --git a/sysdeps/x86_64/tst-stack-align.h b/sysdeps/x86_64/tst-stack-align.h
deleted file mode 100644
index b2ef77f6..00000000
--- a/sysdeps/x86_64/tst-stack-align.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 2003-2018 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
- <http://www.gnu.org/licenses/>. */
-
-#include <stdio.h>
-#include <stdint.h>
-
-#define TEST_STACK_ALIGN() \
- ({ \
- /* AMD64 ABI mandates 16byte aligned stack. \
- Unfortunately, current GCC doesn't support __int128 or __float128 \
- types, so use aligned attribute instead. */ \
- struct _S \
- { \
- int _i __attribute__((aligned (16))); \
- int _pad[3]; \
- } _s = { ._i = 18 }; \
- double _d = 12.0; \
- long double _ld = 15.0; \
- int _ret = 0; \
- printf ("__int128: %d %p %zu\n", _s._i, &_s, __alignof (_s)); \
- if ((((uintptr_t) &_s) & (__alignof (_s) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("double: %g %p %zu\n", _d, &_d, __alignof (double)); \
- if ((((uintptr_t) &_d) & (__alignof (double) - 1)) != 0) \
- _ret = 1; \
- \
- printf ("ldouble: %Lg %p %zu\n", _ld, &_ld, __alignof (long double)); \
- if ((((uintptr_t) &_ld) & (__alignof (long double) - 1)) != 0) \
- _ret = 1; \
- _ret; \
- })
--
2.18.4

View file

@ -1,171 +0,0 @@
From 9302aaad29363eb1dba30d5b9b588a165395672a Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Mon, 7 Feb 2022 10:46:19 -0500
Subject: [PATCH 4/4] Support target specific ALIGN for variable alignment test
[BZ #28676]
Add <tst-file-align.h> to support target specific ALIGN for variable
alignment test:
1. Alpha: Use 0x10000.
2. MicroBlaze and Nios II: Use 0x8000.
3. All others: Use 0x200000.
Backport from master commit: 4435c29
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Signed-off-by: Rongwei Wang <rongwei.wang@linux.alibaba.com>
---
elf/tst-align3.c | 4 +---
elf/tst-alignmod3.c | 4 +---
sysdeps/alpha/tst-file-align.h | 20 ++++++++++++++++++++
sysdeps/generic/tst-file-align.h | 20 ++++++++++++++++++++
sysdeps/microblaze/tst-file-align.h | 20 ++++++++++++++++++++
sysdeps/nios2/tst-file-align.h | 20 ++++++++++++++++++++
6 files changed, 82 insertions(+), 6 deletions(-)
create mode 100644 sysdeps/alpha/tst-file-align.h
create mode 100644 sysdeps/generic/tst-file-align.h
create mode 100644 sysdeps/microblaze/tst-file-align.h
create mode 100644 sysdeps/nios2/tst-file-align.h
diff --git a/elf/tst-align3.c b/elf/tst-align3.c
index ac86d623..87a8ff81 100644
--- a/elf/tst-align3.c
+++ b/elf/tst-align3.c
@@ -17,11 +17,9 @@
<https://www.gnu.org/licenses/>. */
#include <support/check.h>
+#include <tst-file-align.h>
#include <tst-stack-align.h>
-/* This should cover all possible page sizes we currently support. */
-#define ALIGN 0x200000
-
int bar __attribute__ ((aligned (ALIGN))) = 1;
extern int do_load_test (void);
diff --git a/elf/tst-alignmod3.c b/elf/tst-alignmod3.c
index 0d33f237..9520c352 100644
--- a/elf/tst-alignmod3.c
+++ b/elf/tst-alignmod3.c
@@ -17,11 +17,9 @@
<https://www.gnu.org/licenses/>. */
#include <support/check.h>
+#include <tst-file-align.h>
#include <tst-stack-align.h>
-/* This should cover all possible page sizes we currently support. */
-#define ALIGN 0x200000
-
int foo __attribute__ ((aligned (ALIGN))) = 1;
void
diff --git a/sysdeps/alpha/tst-file-align.h b/sysdeps/alpha/tst-file-align.h
new file mode 100644
index 00000000..8fc3c940
--- /dev/null
+++ b/sysdeps/alpha/tst-file-align.h
@@ -0,0 +1,20 @@
+/* Check file alignment. Alpha version.
+ Copyright (C) 2021 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/>. */
+
+/* This should cover all possible alignments we currently support. */
+#define ALIGN 0x10000
diff --git a/sysdeps/generic/tst-file-align.h b/sysdeps/generic/tst-file-align.h
new file mode 100644
index 00000000..6ee6783a
--- /dev/null
+++ b/sysdeps/generic/tst-file-align.h
@@ -0,0 +1,20 @@
+/* Check file alignment. Generic version.
+ Copyright (C) 2021 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/>. */
+
+/* This should cover all possible page sizes we currently support. */
+#define ALIGN 0x200000
diff --git a/sysdeps/microblaze/tst-file-align.h b/sysdeps/microblaze/tst-file-align.h
new file mode 100644
index 00000000..43c58b29
--- /dev/null
+++ b/sysdeps/microblaze/tst-file-align.h
@@ -0,0 +1,20 @@
+/* Check file alignment. MicroBlaze version.
+ Copyright (C) 2021 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/>. */
+
+/* This should cover all possible alignments we currently support. */
+#define ALIGN 0x8000
diff --git a/sysdeps/nios2/tst-file-align.h b/sysdeps/nios2/tst-file-align.h
new file mode 100644
index 00000000..589a2d5a
--- /dev/null
+++ b/sysdeps/nios2/tst-file-align.h
@@ -0,0 +1,20 @@
+/* Check file alignment. Nios II version.
+ Copyright (C) 2021 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/>. */
+
+/* This should cover all possible alignments we currently support. */
+#define ALIGN 0x8000
--
2.18.4

View file

@ -1,36 +0,0 @@
From a36e3f474b748bec447de3bdd8483b52b09e5804 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Thu, 13 Jan 2022 03:48:36 +0800
Subject: [PATCH 3/4] elf: Align argument of __munmap to page size [BZ #28676]
On Linux/x86-64, for elf/tst-align3, we now get
munmap(0x7f88f9401000, 1126424) = 0
instead of
munmap(0x7f1615200018, 544768) = -1 EINVAL (Invalid argument)
Backport from master commit: fd6062e
Reviewed-by: Florian Weimer <fweimer@redhat.com>
Signed-off-by: Rongwei Wang <rongwei.wang@linux.alibaba.com>
---
elf/dl-map-segments.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/elf/dl-map-segments.h b/elf/dl-map-segments.h
index 61ba04cd..f1f7ad88 100644
--- a/elf/dl-map-segments.h
+++ b/elf/dl-map-segments.h
@@ -55,6 +55,7 @@ _dl_map_segment (const struct loadcmd *c, ElfW(Addr) mappref,
if (delta)
__munmap ((void *) map_start, delta);
ElfW(Addr) map_end = map_start_aligned + maplength;
+ map_end = ALIGN_UP (map_end, GLRO(dl_pagesize));
delta = map_start + maplen - map_end;
if (delta)
__munmap ((void *) map_end, delta);
--
2.18.4

View file

@ -1,40 +0,0 @@
From 716c4027b04db785034b0f67ac552cfaff360463 Mon Sep 17 00:00:00 2001
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Tue, 18 Jan 2022 14:36:45 -0300
Subject: [PATCH] elf: Fix tst-align3
The elf/tst-align3.c declares the function using a wrong prototype.
Checked on aarch64-linux-gnu.
Signed-off-by: Rongwei Wang <rongwei.wang@linux.alibaba.com>
---
elf/tst-align3.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/elf/tst-align3.c b/elf/tst-align3.c
index 4913c26..6853b6e 100644
--- a/elf/tst-align3.c
+++ b/elf/tst-align3.c
@@ -22,7 +22,7 @@
int bar __attribute__ ((aligned (ALIGN))) = 1;
-extern int do_load_test (void);
+extern void do_load_test (void);
static int
do_test (void)
@@ -30,7 +30,8 @@ do_test (void)
printf ("bar: %p\n", &bar);
TEST_VERIFY (is_aligned (&bar, ALIGN) == 0);
- return do_load_test ();
+ do_load_test ();
+ return 0;
}
#include <support/test-driver.c>
--
1.8.3.1

View file

@ -1,137 +0,0 @@
From c61fc02c61a88204a5af47f61c1b7cfb19b61e32 Mon Sep 17 00:00:00 2001
From: Rongwei Wang <rongwei.wang@linux.alibaba.com>
Date: Mon, 7 Feb 2022 10:42:01 -0500
Subject: [PATCH 1/4] elf: Properly align PT_LOAD segments [BZ #28676]
When PT_LOAD segment alignment > the page size, allocate enough space to
ensure that the segment can be properly aligned. This change helps code
segments use huge pages become simple and available.
This fixes [BZ #28676].
Backport from master commit: 718fdd8
Signed-off-by: Xu Yu <xuyu@linux.alibaba.com>
Signed-off-by: Rongwei Wang <rongwei.wang@linux.alibaba.com>
---
elf/dl-load.c | 2 ++
elf/dl-load.h | 3 ++-
elf/dl-map-segments.h | 50 +++++++++++++++++++++++++++++++++++++++----
3 files changed, 50 insertions(+), 5 deletions(-)
diff --git a/elf/dl-load.c b/elf/dl-load.c
index fee08d78..6785a499 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -1,5 +1,6 @@
/* Map in a shared object's segments from the file.
Copyright (C) 1995-2018 Free Software Foundation, Inc.
+ Copyright The GNU Toolchain Authors.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -1107,6 +1108,7 @@ _dl_map_object_from_fd (const char *name, const char *origname, int fd,
c->mapend = ALIGN_UP (ph->p_vaddr + ph->p_filesz, GLRO(dl_pagesize));
c->dataend = ph->p_vaddr + ph->p_filesz;
c->allocend = ph->p_vaddr + ph->p_memsz;
+ c->mapalign = ph->p_align;
c->mapoff = ALIGN_DOWN (ph->p_offset, GLRO(dl_pagesize));
/* Determine whether there is a gap between the last segment
diff --git a/elf/dl-load.h b/elf/dl-load.h
index 66ea2e92..d9f648ea 100644
--- a/elf/dl-load.h
+++ b/elf/dl-load.h
@@ -1,5 +1,6 @@
/* Map in a shared object's segments from the file.
Copyright (C) 1995-2018 Free Software Foundation, Inc.
+ Copyright The GNU Toolchain Authors.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -74,7 +75,7 @@ ELF_PREFERRED_ADDRESS_DATA;
Its details have been expanded out and converted. */
struct loadcmd
{
- ElfW(Addr) mapstart, mapend, dataend, allocend;
+ ElfW(Addr) mapstart, mapend, dataend, allocend, mapalign;
ElfW(Off) mapoff;
int prot; /* PROT_* bits. */
};
diff --git a/elf/dl-map-segments.h b/elf/dl-map-segments.h
index 084076a2..61ba04cd 100644
--- a/elf/dl-map-segments.h
+++ b/elf/dl-map-segments.h
@@ -1,5 +1,6 @@
/* Map in a shared object's segments. Generic version.
Copyright (C) 1995-2018 Free Software Foundation, Inc.
+ Copyright The GNU Toolchain Authors.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,6 +19,50 @@
#include <dl-load.h>
+/* Map a segment and align it properly. */
+
+static __always_inline ElfW(Addr)
+_dl_map_segment (const struct loadcmd *c, ElfW(Addr) mappref,
+ const size_t maplength, int fd)
+{
+ if (__glibc_likely (c->mapalign <= GLRO(dl_pagesize)))
+ return (ElfW(Addr)) __mmap ((void *) mappref, maplength, c->prot,
+ MAP_COPY|MAP_FILE, fd, c->mapoff);
+
+ /* If the segment alignment > the page size, allocate enough space to
+ ensure that the segment can be properly aligned. */
+ ElfW(Addr) maplen = (maplength >= c->mapalign
+ ? (maplength + c->mapalign)
+ : (2 * c->mapalign));
+ ElfW(Addr) map_start = (ElfW(Addr)) __mmap ((void *) mappref, maplen,
+ PROT_NONE,
+ MAP_ANONYMOUS|MAP_PRIVATE,
+ -1, 0);
+ if (__glibc_unlikely ((void *) map_start == MAP_FAILED))
+ return map_start;
+
+ ElfW(Addr) map_start_aligned = ALIGN_UP (map_start, c->mapalign);
+ map_start_aligned = (ElfW(Addr)) __mmap ((void *) map_start_aligned,
+ maplength, c->prot,
+ MAP_COPY|MAP_FILE|MAP_FIXED,
+ fd, c->mapoff);
+ if (__glibc_unlikely ((void *) map_start_aligned == MAP_FAILED))
+ __munmap ((void *) map_start, maplen);
+ else
+ {
+ /* Unmap the unused regions. */
+ ElfW(Addr) delta = map_start_aligned - map_start;
+ if (delta)
+ __munmap ((void *) map_start, delta);
+ ElfW(Addr) map_end = map_start_aligned + maplength;
+ delta = map_start + maplen - map_end;
+ if (delta)
+ __munmap ((void *) map_end, delta);
+ }
+
+ return map_start_aligned;
+}
+
/* This implementation assumes (as does the corresponding implementation
of _dl_unmap_segments, in dl-unmap-segments.h) that shared objects
are always laid out with all segments contiguous (or with gaps
@@ -53,10 +98,7 @@ _dl_map_segments (struct link_map *l, int fd,
- MAP_BASE_ADDR (l));
/* Remember which part of the address space this object uses. */
- l->l_map_start = (ElfW(Addr)) __mmap ((void *) mappref, maplength,
- c->prot,
- MAP_COPY|MAP_FILE,
- fd, c->mapoff);
+ l->l_map_start = _dl_map_segment (c, mappref, maplength, fd);
if (__glibc_unlikely ((void *) l->l_map_start == MAP_FAILED))
return DL_MAP_SEGMENTS_ERROR_MAP_SEGMENT;
--
2.18.4

23
glibc-rh2073432.patch Normal file
View file

@ -0,0 +1,23 @@
commit 62db87ab24f9ca483f97f5e52ea92445f6a63c6f
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Mon Jan 10 10:17:18 2022 -0300
timezone: Fix tst-bz28707 Makefile rule
The $(testdata)/XT5 rule is ambiguous and it may not be correct
evaluated.
diff --git a/timezone/Makefile b/timezone/Makefile
index ac7f483c130b5b4a..c4a63daadb8d5dc5 100644
--- a/timezone/Makefile
+++ b/timezone/Makefile
@@ -123,7 +123,8 @@ $(testdata)/XT%: testdata/XT%
$(make-target-directory)
cp $< $@
-$(testdata)/XT%: testdata/gen-XT%.sh
+$(testdata)/XT5: testdata/gen-XT5.sh
+ $(make-target-directory)
$(SHELL) $< > $@.tmp
mv $@.tmp $@

165
glibc-rh2084564.patch Normal file
View file

@ -0,0 +1,165 @@
commit f17164bd51db31f47fbbdae826c63b6d78184c45
Author: Florian Weimer <fweimer@redhat.com>
Date: Tue May 18 07:21:33 2021 +0200
localedata: Use U+00AF MACRON in more EBCDIC charsets [BZ #27882]
This updates IBM256, IBM277, IBM278, IBM280, IBM284, IBM297, IBM424
in the same way that IBM273 was updated for bug 23290.
IBM256 and IBM424 still have holes after this change, so HAS_HOLES
is not updated.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
diff --git a/iconvdata/ibm277.c b/iconvdata/ibm277.c
index f93ca2acb8718dd5..0e337dbbdc06a02f 100644
--- a/iconvdata/ibm277.c
+++ b/iconvdata/ibm277.c
@@ -23,6 +23,6 @@
#define TABLES <ibm277.h>
#define CHARSET_NAME "IBM277//"
-#define HAS_HOLES 1 /* Not all 256 character are defined. */
+#define HAS_HOLES 0
#include <8bit-gap.c>
diff --git a/iconvdata/ibm278.c b/iconvdata/ibm278.c
index 4263000760472913..7450fb8e5b846101 100644
--- a/iconvdata/ibm278.c
+++ b/iconvdata/ibm278.c
@@ -23,6 +23,6 @@
#define TABLES <ibm278.h>
#define CHARSET_NAME "IBM278//"
-#define HAS_HOLES 1 /* Not all 256 character are defined. */
+#define HAS_HOLES 0
#include <8bit-gap.c>
diff --git a/iconvdata/ibm280.c b/iconvdata/ibm280.c
index 3efddd7dec2728d9..2ea5478e4e0d7007 100644
--- a/iconvdata/ibm280.c
+++ b/iconvdata/ibm280.c
@@ -23,6 +23,6 @@
#define TABLES <ibm280.h>
#define CHARSET_NAME "IBM280//"
-#define HAS_HOLES 1 /* Not all 256 character are defined. */
+#define HAS_HOLES 0
#include <8bit-gap.c>
diff --git a/iconvdata/ibm284.c b/iconvdata/ibm284.c
index 57dab27d0cec4a33..8dbbc6344d18528f 100644
--- a/iconvdata/ibm284.c
+++ b/iconvdata/ibm284.c
@@ -23,6 +23,6 @@
#define TABLES <ibm284.h>
#define CHARSET_NAME "IBM284//"
-#define HAS_HOLES 1 /* Not all 256 character are defined. */
+#define HAS_HOLES 0
#include <8bit-gap.c>
diff --git a/iconvdata/ibm297.c b/iconvdata/ibm297.c
index f355659afd4b4502..81e63ba1f28f1548 100644
--- a/iconvdata/ibm297.c
+++ b/iconvdata/ibm297.c
@@ -23,6 +23,6 @@
#define TABLES <ibm297.h>
#define CHARSET_NAME "IBM297//"
-#define HAS_HOLES 1 /* Not all 256 character are defined. */
+#define HAS_HOLES 0
#include <8bit-gap.c>
diff --git a/localedata/charmaps/IBM256 b/localedata/charmaps/IBM256
index 5cfd2db5f436cd07..bdc1abf0ade3bfc4 100644
--- a/localedata/charmaps/IBM256
+++ b/localedata/charmaps/IBM256
@@ -194,7 +194,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U00AC> /xba NOT SIGN
<U007C> /xbb VERTICAL LINE
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U00A8> /xbd DIAERESIS
<U00B4> /xbe ACUTE ACCENT
<U2017> /xbf DOUBLE LOW LINE
diff --git a/localedata/charmaps/IBM277 b/localedata/charmaps/IBM277
index 1c0b5cb9fb659364..2f6e3992109a2b33 100644
--- a/localedata/charmaps/IBM277
+++ b/localedata/charmaps/IBM277
@@ -195,7 +195,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U00AC> /xba NOT SIGN
<U007C> /xbb VERTICAL LINE
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U00A8> /xbd DIAERESIS
<U00B4> /xbe ACUTE ACCENT
<U00D7> /xbf MULTIPLICATION SIGN
diff --git a/localedata/charmaps/IBM278 b/localedata/charmaps/IBM278
index 646961501c74c4df..bdfae7621028f003 100644
--- a/localedata/charmaps/IBM278
+++ b/localedata/charmaps/IBM278
@@ -196,7 +196,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U00AC> /xba NOT SIGN
<U007C> /xbb VERTICAL LINE
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U00A8> /xbd DIAERESIS
<U00B4> /xbe ACUTE ACCENT
<U00D7> /xbf MULTIPLICATION SIGN
diff --git a/localedata/charmaps/IBM280 b/localedata/charmaps/IBM280
index 5de3b3e7b96796c0..4c31242806b0ac19 100644
--- a/localedata/charmaps/IBM280
+++ b/localedata/charmaps/IBM280
@@ -195,7 +195,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U00AC> /xba NOT SIGN
<U007C> /xbb VERTICAL LINE
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U00A8> /xbd DIAERESIS
<U00B4> /xbe ACUTE ACCENT
<U00D7> /xbf MULTIPLICATION SIGN
diff --git a/localedata/charmaps/IBM284 b/localedata/charmaps/IBM284
index c64b2a65ab748540..46a8737a715e4e56 100644
--- a/localedata/charmaps/IBM284
+++ b/localedata/charmaps/IBM284
@@ -195,7 +195,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U005E> /xba CIRCUMFLEX ACCENT
<U0021> /xbb EXCLAMATION MARK
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U007E> /xbd TILDE
<U00B4> /xbe ACUTE ACCENT
<U00D7> /xbf MULTIPLICATION SIGN
diff --git a/localedata/charmaps/IBM297 b/localedata/charmaps/IBM297
index 33b74eee437241aa..14361ad418cf1bc7 100644
--- a/localedata/charmaps/IBM297
+++ b/localedata/charmaps/IBM297
@@ -195,7 +195,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U00AC> /xba NOT SIGN
<U007C> /xbb VERTICAL LINE
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U007E> /xbd TILDE
<U00B4> /xbe ACUTE ACCENT
<U00D7> /xbf MULTIPLICATION SIGN
diff --git a/localedata/charmaps/IBM424 b/localedata/charmaps/IBM424
index 883e43b8ae04ee4c..deca11e1b18ec0a6 100644
--- a/localedata/charmaps/IBM424
+++ b/localedata/charmaps/IBM424
@@ -175,7 +175,7 @@ CHARMAP
<U00BE> /xb9 VULGAR FRACTION THREE QUARTERS
<U005B> /xba LEFT SQUARE BRACKET
<U005D> /xbb RIGHT SQUARE BRACKET
-<U203E> /xbc OVERLINE
+<U00AF> /xbc MACRON
<U00A8> /xbd DIAERESIS
<U00B4> /xbe ACUTE ACCENT
<U00D7> /xbf MULTIPLICATION SIGN

47
glibc-rh2093457-1.patch Normal file
View file

@ -0,0 +1,47 @@
commit e1df30fbc2e2167a982c0e77a7ebee28f4dd0800
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Thu Jul 25 11:22:17 2019 -0300
Get new entropy on each attempt __gen_tempname (BZ #15813)
This is missing bit for fully fix BZ#15813 (the other two were fixed
by 359653aaacad463).
Checked on x86_64-linux-gnu.
[BZ #15813]
sysdeps/posix/tempname.c (__gen_tempname): get entrypy on each
attempt.
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index 3d26f378021680ae..61d7a9f36d37abae 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -186,7 +186,6 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
{
int len;
char *XXXXXX;
- uint64_t value;
unsigned int count;
int fd = -1;
int save_errno = errno;
@@ -218,13 +217,13 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
/* This is where the Xs start. */
XXXXXX = &tmpl[len - 6 - suffixlen];
- /* Get some more or less random data. */
- RANDOM_BITS (value);
- value ^= (uint64_t)__getpid () << 32;
-
- for (count = 0; count < attempts; value += 7777, ++count)
+ uint64_t pid = (uint64_t) __getpid () << 32;
+ for (count = 0; count < attempts; ++count)
{
- uint64_t v = value;
+ uint64_t v;
+ /* Get some more or less random data. */
+ RANDOM_BITS (v);
+ v ^= pid;
/* Fill in the random bits. */
XXXXXX[0] = letters[v % 62];

87
glibc-rh2093457-2.patch Normal file
View file

@ -0,0 +1,87 @@
commit 8eaf34eda256ba3647ed6e7ed5c7c9aa19955d17
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Fri Dec 13 10:10:59 2019 +0100
hurd: Fix local PLT
* include/sys/random.h (__getrandom): Add hidden prototype.
* stdlib/getrandom.c (getrandom): Rename to hidden definition __getrandom.
Add weak alias.
* sysdeps/mach/hurd/getrandom.c (getrandom): Likewise.
* sysdeps/unix/sysv/linux/getrandom.c (getrandom): Likewise.
* sysdeps/mach/hurd/getentropy.c (getentropy): Use __getrandom instead of
getrandom.
Conflicts:
include/sys/random.h
(Missing backport of include/ consistency patch,
commit ebd32784ce2029d0461a90a79bc4e37f8d051765 upstream.)
sysdeps/mach/hurd/getentropy.c
(Hurd change has been dropped.)
sysdeps/unix/sysv/linux/dl-write.c
(Mismerge of sysdeps/mach/hurd/getrandom.c.)
diff --git a/include/sys/random.h b/include/sys/random.h
new file mode 100644
index 0000000000000000..6aa313d35dbdce8a
--- /dev/null
+++ b/include/sys/random.h
@@ -0,0 +1,11 @@
+#ifndef _SYS_RANDOM_H
+#include <stdlib/sys/random.h>
+
+# ifndef _ISOMAC
+
+extern ssize_t __getrandom (void *__buffer, size_t __length,
+ unsigned int __flags) __wur;
+libc_hidden_proto (__getrandom)
+
+# endif /* !_ISOMAC */
+#endif
diff --git a/stdlib/getrandom.c b/stdlib/getrandom.c
index 45234bea17c5c86c..f8056688e40a0215 100644
--- a/stdlib/getrandom.c
+++ b/stdlib/getrandom.c
@@ -22,10 +22,12 @@
/* Write up to LENGTH bytes of randomness starting at BUFFER.
Return the number of bytes written, or -1 on error. */
ssize_t
-getrandom (void *buffer, size_t length, unsigned int flags)
+__getrandom (void *buffer, size_t length, unsigned int flags)
{
__set_errno (ENOSYS);
return -1;
}
-
stub_warning (getrandom)
+
+libc_hidden_def (__getrandom)
+weak_alias (__getrandom, getrandom)
diff --git a/sysdeps/unix/sysv/linux/getrandom.c b/sysdeps/unix/sysv/linux/getrandom.c
index 435b037399665654..e34d7fdcd89d9b06 100644
--- a/sysdeps/unix/sysv/linux/getrandom.c
+++ b/sysdeps/unix/sysv/linux/getrandom.c
@@ -25,7 +25,7 @@
/* Write up to LENGTH bytes of randomness starting at BUFFER.
Return the number of bytes written, or -1 on error. */
ssize_t
-getrandom (void *buffer, size_t length, unsigned int flags)
+__getrandom (void *buffer, size_t length, unsigned int flags)
{
return SYSCALL_CANCEL (getrandom, buffer, length, flags);
}
@@ -33,7 +33,7 @@ getrandom (void *buffer, size_t length, unsigned int flags)
/* Always provide a definition, even if the kernel headers lack the
system call number. */
ssize_t
-getrandom (void *buffer, size_t length, unsigned int flags)
+__getrandom (void *buffer, size_t length, unsigned int flags)
{
/* Ideally, we would add a cancellation point here, but we currently
cannot do so inside libc. */
@@ -41,3 +41,5 @@ getrandom (void *buffer, size_t length, unsigned int flags)
return -1;
}
#endif
+libc_hidden_def (__getrandom)
+weak_alias (__getrandom, getrandom)

67
glibc-rh2093457-3.patch Normal file
View file

@ -0,0 +1,67 @@
Partial backport of:
commit 04986243d1af37ac0177ed2f9db0a066ebd2b212
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Wed Jul 15 19:35:58 2020 +0000
Remove internal usage of extensible stat functions
It replaces the internal usage of __{f,l}xstat{at}{64} with the
__{f,l}stat{at}{64}. It should not change the generate code since
sys/stat.h explicit defines redirections to internal calls back to
xstat* symbols.
Checked with a build for all affected ABIs. I also check on
x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Only the changes to include/sys/stat.h and sysdeps/posix/tempname.c
are included here.
diff --git a/include/sys/stat.h b/include/sys/stat.h
index b82d4527801d4797..c5b1938b87c9c5c3 100644
--- a/include/sys/stat.h
+++ b/include/sys/stat.h
@@ -52,6 +52,7 @@ extern __typeof (__fxstatat64) __fxstatat64 attribute_hidden;
#define lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf)
#define __lstat64(fname, buf) __lxstat64 (_STAT_VER, fname, buf)
#define stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
+#define __stat64(fname, buf) __xstat64 (_STAT_VER, fname, buf)
#define fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf)
#define __fstat64(fd, buf) __fxstat64 (_STAT_VER, fd, buf)
#define fstat(fd, buf) __fxstat (_STAT_VER, fd, buf)
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index 61d7a9f36d37abae..a7b404cf4410cb00 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -66,7 +66,6 @@
# define __gettimeofday gettimeofday
# define __mkdir mkdir
# define __open open
-# define __lxstat64(version, file, buf) lstat (file, buf)
# define __secure_getenv secure_getenv
#endif
@@ -97,7 +96,7 @@ static int
direxists (const char *dir)
{
struct_stat64 buf;
- return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
+ return __stat64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode);
}
/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is
@@ -252,10 +251,10 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
case __GT_NOCREATE:
/* This case is backward from the other three. __gen_tempname
- succeeds if __xstat fails because the name does not exist.
+ succeeds if lstat fails because the name does not exist.
Note the continue to bypass the common logic at the bottom
of the loop. */
- if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
+ if (__lstat64 (tmpl, &st) < 0)
{
if (errno == ENOENT)
{

440
glibc-rh2093457-4.patch Normal file
View file

@ -0,0 +1,440 @@
commit 4dddd7e9cbecad4aa03ee5a9b9edb596e3d4e909
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Tue Sep 29 08:56:07 2020 -0300
posix: Sync tempname with gnulib [BZ #26648]
It syncs with gnulib commit b1268f22f443e8e4b9e. The try_tempname_len
now uses getrandom on each iteration to get entropy and only uses the
clock plus ASLR as source of entropy if getrandom fails.
Checked on x86_64-linux-gnu and i686-linux-gnu.
Conflicts:
sysdeps/posix/tempname.c
(Missing tree-wide __gettimeofday to clock_gettime change,
commit 4a39c34c4f85de57fb4e648cfa1e774437d69680 upstream.
File was rebased to the upstream version.)
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index a7b404cf4410cb00..f199b25a7a227751 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2021 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
@@ -13,10 +13,10 @@
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
+ <https://www.gnu.org/licenses/>. */
#if !_LIBC
-# include <config.h>
+# include <libc-config.h>
# include "tempname.h"
#endif
@@ -24,9 +24,6 @@
#include <assert.h>
#include <errno.h>
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
#include <stdio.h>
#ifndef P_tmpdir
@@ -36,12 +33,12 @@
# define TMP_MAX 238328
#endif
#ifndef __GT_FILE
-# define __GT_FILE 0
-# define __GT_DIR 1
-# define __GT_NOCREATE 2
+# define __GT_FILE 0
+# define __GT_DIR 1
+# define __GT_NOCREATE 2
#endif
-#if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \
- || GT_NOCREATE != __GT_NOCREATE)
+#if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \
+ || GT_NOCREATE != __GT_NOCREATE)
# error report this to bug-gnulib@gnu.org
#endif
@@ -50,11 +47,11 @@
#include <string.h>
#include <fcntl.h>
-#include <sys/time.h>
+#include <stdalign.h>
#include <stdint.h>
-#include <unistd.h>
-
+#include <sys/random.h>
#include <sys/stat.h>
+#include <time.h>
#if _LIBC
# define struct_stat64 struct stat64
@@ -62,33 +59,38 @@
#else
# define struct_stat64 struct stat
# define __gen_tempname gen_tempname
-# define __getpid getpid
-# define __gettimeofday gettimeofday
# define __mkdir mkdir
# define __open open
-# define __secure_getenv secure_getenv
+# define __lstat64(file, buf) lstat (file, buf)
+# define __stat64(file, buf) stat (file, buf)
+# define __getrandom getrandom
+# define __clock_gettime64 clock_gettime
+# define __timespec64 timespec
#endif
-#ifdef _LIBC
-# include <random-bits.h>
-# define RANDOM_BITS(Var) ((Var) = random_bits ())
-# else
-# define RANDOM_BITS(Var) \
- { \
- struct timeval tv; \
- __gettimeofday (&tv, NULL); \
- (Var) = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \
- }
-#endif
+/* Use getrandom if it works, falling back on a 64-bit linear
+ congruential generator that starts with Var's value
+ mixed in with a clock's low-order bits if available. */
+typedef uint_fast64_t random_value;
+#define RANDOM_VALUE_MAX UINT_FAST64_MAX
+#define BASE_62_DIGITS 10 /* 62**10 < UINT_FAST64_MAX */
+#define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62)
-/* Use the widest available unsigned type if uint64_t is not
- available. The algorithm below extracts a number less than 62**6
- (approximately 2**35.725) from uint64_t, so ancient hosts where
- uintmax_t is only 32 bits lose about 3.725 bits of randomness,
- which is better than not having mkstemp at all. */
-#if !defined UINT64_MAX && !defined uint64_t
-# define uint64_t uintmax_t
+static random_value
+random_bits (random_value var)
+{
+ random_value r;
+ /* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */
+ if (__getrandom (&r, sizeof r, GRND_NONBLOCK) == sizeof r)
+ return r;
+#if _LIBC || (defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME)
+ /* Add entropy if getrandom did not work. */
+ struct __timespec64 tv;
+ __clock_gettime64 (CLOCK_MONOTONIC, &tv);
+ var ^= tv.tv_nsec;
#endif
+ return 2862933555777941757 * var + 3037000493;
+}
#if _LIBC
/* Return nonzero if DIR is an existent directory. */
@@ -107,7 +109,7 @@ direxists (const char *dir)
enough space in TMPL. */
int
__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
- int try_tmpdir)
+ int try_tmpdir)
{
const char *d;
size_t dlen, plen;
@@ -121,35 +123,35 @@ __path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
{
plen = strlen (pfx);
if (plen > 5)
- plen = 5;
+ plen = 5;
}
if (try_tmpdir)
{
d = __secure_getenv ("TMPDIR");
if (d != NULL && direxists (d))
- dir = d;
+ dir = d;
else if (dir != NULL && direxists (dir))
- /* nothing */ ;
+ /* nothing */ ;
else
- dir = NULL;
+ dir = NULL;
}
if (dir == NULL)
{
if (direxists (P_tmpdir))
- dir = P_tmpdir;
+ dir = P_tmpdir;
else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
- dir = "/tmp";
+ dir = "/tmp";
else
- {
- __set_errno (ENOENT);
- return -1;
- }
+ {
+ __set_errno (ENOENT);
+ return -1;
+ }
}
dlen = strlen (dir);
while (dlen > 1 && dir[dlen - 1] == '/')
- dlen--; /* remove trailing slashes */
+ dlen--; /* remove trailing slashes */
/* check we have room for "${dir}/${pfx}XXXXXX\0" */
if (tmpl_len < dlen + 1 + plen + 6 + 1)
@@ -163,39 +165,91 @@ __path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
}
#endif /* _LIBC */
+#if _LIBC
+static int try_tempname_len (char *, int, void *, int (*) (char *, void *),
+ size_t);
+#endif
+
+static int
+try_file (char *tmpl, void *flags)
+{
+ int *openflags = flags;
+ return __open (tmpl,
+ (*openflags & ~O_ACCMODE)
+ | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+}
+
+static int
+try_dir (char *tmpl, void *flags _GL_UNUSED)
+{
+ return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
+}
+
+static int
+try_nocreate (char *tmpl, void *flags _GL_UNUSED)
+{
+ struct_stat64 st;
+
+ if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW)
+ __set_errno (EEXIST);
+ return errno == ENOENT ? 0 : -1;
+}
+
/* These are the characters used in temporary file names. */
static const char letters[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
/* Generate a temporary file name based on TMPL. TMPL must match the
- rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix).
+ rules for mk[s]temp (i.e., end in at least X_SUFFIX_LEN "X"s,
+ possibly with a suffix).
The name constructed does not exist at the time of the call to
- __gen_tempname. TMPL is overwritten with the result.
+ this function. TMPL is overwritten with the result.
KIND may be one of:
- __GT_NOCREATE: simply verify that the name does not exist
- at the time of the call.
- __GT_FILE: create the file using open(O_CREAT|O_EXCL)
- and return a read-write fd. The file is mode 0600.
- __GT_DIR: create a directory, which will be mode 0700.
+ __GT_NOCREATE: simply verify that the name does not exist
+ at the time of the call.
+ __GT_FILE: create the file using open(O_CREAT|O_EXCL)
+ and return a read-write fd. The file is mode 0600.
+ __GT_DIR: create a directory, which will be mode 0700.
We use a clever algorithm to get hard-to-predict names. */
+#ifdef _LIBC
+static
+#endif
int
-__gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
+gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind,
+ size_t x_suffix_len)
{
- int len;
+ static int (*const tryfunc[]) (char *, void *) =
+ {
+ [__GT_FILE] = try_file,
+ [__GT_DIR] = try_dir,
+ [__GT_NOCREATE] = try_nocreate
+ };
+ return try_tempname_len (tmpl, suffixlen, &flags, tryfunc[kind],
+ x_suffix_len);
+}
+
+#ifdef _LIBC
+static
+#endif
+int
+try_tempname_len (char *tmpl, int suffixlen, void *args,
+ int (*tryfunc) (char *, void *), size_t x_suffix_len)
+{
+ size_t len;
char *XXXXXX;
unsigned int count;
int fd = -1;
int save_errno = errno;
- struct_stat64 st;
/* A lower bound on the number of temporary files to attempt to
generate. The maximum total number of temporary file names that
can exist for a given template is 62**6. It should never be
necessary to try all of these combinations. Instead if a reasonable
number of names is tried (we define reasonable as 62**3) fail to
- give the system administrator the chance to remove the problems. */
+ give the system administrator the chance to remove the problems.
+ This value requires that X_SUFFIX_LEN be at least 3. */
#define ATTEMPTS_MIN (62 * 62 * 62)
/* The number of times to attempt to generate a temporary file. To
@@ -206,82 +260,75 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
unsigned int attempts = ATTEMPTS_MIN;
#endif
+ /* A random variable. The initial value is used only the for fallback path
+ on 'random_bits' on 'getrandom' failure. Its initial value tries to use
+ some entropy from the ASLR and ignore possible bits from the stack
+ alignment. */
+ random_value v = ((uintptr_t) &v) / alignof (max_align_t);
+
+ /* How many random base-62 digits can currently be extracted from V. */
+ int vdigits = 0;
+
+ /* Least unfair value for V. If V is less than this, V can generate
+ BASE_62_DIGITS digits fairly. Otherwise it might be biased. */
+ random_value const unfair_min
+ = RANDOM_VALUE_MAX - RANDOM_VALUE_MAX % BASE_62_POWER;
+
len = strlen (tmpl);
- if (len < 6 + suffixlen || memcmp (&tmpl[len - 6 - suffixlen], "XXXXXX", 6))
+ if (len < x_suffix_len + suffixlen
+ || strspn (&tmpl[len - x_suffix_len - suffixlen], "X") < x_suffix_len)
{
__set_errno (EINVAL);
return -1;
}
/* This is where the Xs start. */
- XXXXXX = &tmpl[len - 6 - suffixlen];
+ XXXXXX = &tmpl[len - x_suffix_len - suffixlen];
- uint64_t pid = (uint64_t) __getpid () << 32;
for (count = 0; count < attempts; ++count)
{
- uint64_t v;
- /* Get some more or less random data. */
- RANDOM_BITS (v);
- v ^= pid;
-
- /* Fill in the random bits. */
- XXXXXX[0] = letters[v % 62];
- v /= 62;
- XXXXXX[1] = letters[v % 62];
- v /= 62;
- XXXXXX[2] = letters[v % 62];
- v /= 62;
- XXXXXX[3] = letters[v % 62];
- v /= 62;
- XXXXXX[4] = letters[v % 62];
- v /= 62;
- XXXXXX[5] = letters[v % 62];
-
- switch (kind)
- {
- case __GT_FILE:
- fd = __open (tmpl,
- (flags & ~O_ACCMODE)
- | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
- break;
-
- case __GT_DIR:
- fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
- break;
-
- case __GT_NOCREATE:
- /* This case is backward from the other three. __gen_tempname
- succeeds if lstat fails because the name does not exist.
- Note the continue to bypass the common logic at the bottom
- of the loop. */
- if (__lstat64 (tmpl, &st) < 0)
- {
- if (errno == ENOENT)
- {
- __set_errno (save_errno);
- return 0;
- }
- else
- /* Give up now. */
- return -1;
- }
- continue;
-
- default:
- assert (! "invalid KIND in __gen_tempname");
- abort ();
- }
-
+ for (size_t i = 0; i < x_suffix_len; i++)
+ {
+ if (vdigits == 0)
+ {
+ do
+ v = random_bits (v);
+ while (unfair_min <= v);
+
+ vdigits = BASE_62_DIGITS;
+ }
+
+ XXXXXX[i] = letters[v % 62];
+ v /= 62;
+ vdigits--;
+ }
+
+ fd = tryfunc (tmpl, args);
if (fd >= 0)
- {
- __set_errno (save_errno);
- return fd;
- }
+ {
+ __set_errno (save_errno);
+ return fd;
+ }
else if (errno != EEXIST)
- return -1;
+ return -1;
}
/* We got out of the loop because we ran out of combinations to try. */
__set_errno (EEXIST);
return -1;
}
+
+int
+__gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
+{
+ return gen_tempname_len (tmpl, suffixlen, flags, kind, 6);
+}
+
+#if !_LIBC
+int
+try_tempname (char *tmpl, int suffixlen, void *args,
+ int (*tryfunc) (char *, void *))
+{
+ return try_tempname_len (tmpl, suffixlen, args, tryfunc, 6);
+}
+#endif

17
glibc-rh2093457-5.patch Normal file
View file

@ -0,0 +1,17 @@
Downstream-only patch to use non-time64 identifiers in
sysdeps/posix/tempname.c. Upstream has switched to the time64
symbols.
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index f199b25a7a227751..fcab9b26364021e4 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -56,6 +56,8 @@
#if _LIBC
# define struct_stat64 struct stat64
# define __secure_getenv __libc_secure_getenv
+# define __clock_gettime64 __clock_gettime
+# define __timespec64 timespec
#else
# define struct_stat64 struct stat
# define __gen_tempname gen_tempname

66
glibc-rh2093457-6.patch Normal file
View file

@ -0,0 +1,66 @@
commit f430293d842031f2afc3013f156e1018065e480e
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date: Tue Jan 12 09:17:09 2021 -0300
posix: consume less entropy on tempname
The first getrandom is used only for __GT_NOCREATE, which is inherently
insecure and can use the entropy as a small improvement. On the
second and later attempts it might help against DoS attacks.
It sync with gnulib commit 854fbb81d91f7a0f2b463e7ace2499dee2f380f2.
Checked on x86_64-linux-gnu.
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index fcab9b26364021e4..3435c4bf75a01f42 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -22,6 +22,7 @@
#include <sys/types.h>
#include <assert.h>
+#include <stdbool.h>
#include <errno.h>
@@ -79,11 +80,11 @@ typedef uint_fast64_t random_value;
#define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62)
static random_value
-random_bits (random_value var)
+random_bits (random_value var, bool use_getrandom)
{
random_value r;
/* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */
- if (__getrandom (&r, sizeof r, GRND_NONBLOCK) == sizeof r)
+ if (use_getrandom && __getrandom (&r, sizeof r, GRND_NONBLOCK) == sizeof r)
return r;
#if _LIBC || (defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME)
/* Add entropy if getrandom did not work. */
@@ -271,6 +272,13 @@ try_tempname_len (char *tmpl, int suffixlen, void *args,
/* How many random base-62 digits can currently be extracted from V. */
int vdigits = 0;
+ /* Whether to consume entropy when acquiring random bits. On the
+ first try it's worth the entropy cost with __GT_NOCREATE, which
+ is inherently insecure and can use the entropy to make it a bit
+ less secure. On the (rare) second and later attempts it might
+ help against DoS attacks. */
+ bool use_getrandom = tryfunc == try_nocreate;
+
/* Least unfair value for V. If V is less than this, V can generate
BASE_62_DIGITS digits fairly. Otherwise it might be biased. */
random_value const unfair_min
@@ -294,7 +302,10 @@ try_tempname_len (char *tmpl, int suffixlen, void *args,
if (vdigits == 0)
{
do
- v = random_bits (v);
+ {
+ v = random_bits (v, use_getrandom);
+ use_getrandom = true;
+ }
while (unfair_min <= v);
vdigits = BASE_62_DIGITS;

41
glibc-rh2094540.patch Normal file
View file

@ -0,0 +1,41 @@
From 82c7441f04e3c2a653ee29672731e040a1799c6b Mon Sep 17 00:00:00 2001
From: Matheus Castanho <msc@linux.ibm.com>
Date: Tue, 7 Jun 2022 10:27:26 -0300
Subject: powerpc: Fix VSX register number on __strncpy_power9 [BZ #29197]
__strncpy_power9 initializes VR 18 with zeroes to be used throughout the
code, including when zero-padding the destination string. However, the
v18 reference was mistakenly being used for stxv and stxvl, which take a
VSX vector as operand. The code ended up using the uninitialized VSR 18
register by mistake.
Both occurrences have been changed to use the proper VSX number for VR 18
(i.e. VSR 50).
Tested on powerpc, powerpc64 and powerpc64le.
Signed-off-by: Kewen Lin <linkw@gcc.gnu.org>
(cherry picked from commit 0218463dd8265ed937622f88ac68c7d984fe0cfc)
diff --git a/sysdeps/powerpc/powerpc64/le/power9/strncpy.S b/sysdeps/powerpc/powerpc64/le/power9/strncpy.S
index 291941c1e5..5421525ace 100644
--- a/sysdeps/powerpc/powerpc64/le/power9/strncpy.S
+++ b/sysdeps/powerpc/powerpc64/le/power9/strncpy.S
@@ -352,7 +352,7 @@ L(zero_padding_loop):
cmpldi cr6,r5,16 /* Check if length was reached. */
ble cr6,L(zero_padding_end)
- stxv v18,0(r11)
+ stxv 32+v18,0(r11)
addi r11,r11,16
addi r5,r5,-16
@@ -360,7 +360,7 @@ L(zero_padding_loop):
L(zero_padding_end):
sldi r10,r5,56 /* stxvl wants size in top 8 bits */
- stxvl v18,r11,r10 /* Partial store */
+ stxvl 32+v18,r11,r10 /* Partial store */
blr
.align 4

View file

@ -1,7 +1,6 @@
%define anolis_release .0.1
%define glibcsrcdir glibc-2.28
%define glibcversion 2.28
%define glibcrelease 189.1%{anolis_release}%{?dist}
%define glibcrelease 189.5%{?dist}
# Pre-release tarballs are pulled in from git using a command that is
# effectively:
#
@ -857,13 +856,15 @@ Patch661: glibc-rh2045063-3.patch
Patch662: glibc-rh2045063-4.patch
Patch663: glibc-rh2045063-5.patch
Patch664: glibc-rh2061727.patch
Patch1000: glibc-Properly-check-stack-alignment-BZ-27901.patch
Patch1001: glibc-elf-Properly-align-PT_LOAD-segments-BZ-28676-1.patch
Patch1002: glibc-Add-a-testcase-to-check-alignment-of-PT_LOAD-segment-2.patch
Patch1003: glibc-elf-Align-argument-of-__munmap-to-page-size-BZ-28676-3.patch
Patch1004: glibc-Support-target-specific-ALIGN-for-variable-alignment-4.patch
Patch1005: glibc-elf-Fix-tst-align3.patch
Patch665: glibc-rh2073432.patch
Patch666: glibc-rh2084564.patch
Patch667: glibc-rh2094540.patch
Patch668: glibc-rh2093457-1.patch
Patch669: glibc-rh2093457-2.patch
Patch670: glibc-rh2093457-3.patch
Patch671: glibc-rh2093457-4.patch
Patch672: glibc-rh2093457-5.patch
Patch673: glibc-rh2093457-6.patch
##############################################################################
# Continued list of core "glibc" package information:
@ -2679,8 +2680,17 @@ fi
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
%changelog
* Tue May 17 2022 Rongwei Wang <rongwei.wang@linux.alibaba.com> - 2.28-189.1.0.1
- elf: Properly align PT_LOAD segments
* Wed Jun 8 2022 Florian Weimer <fweimer@redhat.com> - 2.28-189.5
- Increase tempnam randomness (#2093457)
* Tue Jun 07 2022 DJ Delorie <dj@redhat.com> - 2.28-189.4
- Fix incorrect strncpy results on POWER9 (#2094540)
* Fri May 13 2022 Arjun Shankar <arjun@redhat.com> - 2.28-189.3
- Add missing MACRON to EBCDIC character sets (#2084564)
* Fri May 13 2022 Arjun Shankar <arjun@redhat.com> - 2.28-189.2
- timezone: Fix a test that causes occasional build failure (#2073432)
* Thu Mar 10 2022 Florian Weimer <fweimer@redhat.com> - 2.28-189.1
- nss: Avoid clobbering errno in get*ent via dlopen (#2061727)