update to glibc-2.28-225.6
Signed-off-by: Zhao Hang <wb-zh951434@alibaba-inc.com>
This commit is contained in:
parent
7f50886f40
commit
32795978d6
15 changed files with 1700 additions and 28222 deletions
|
@ -1,34 +0,0 @@
|
||||||
From c5de7c407853b807e8d0c764e6325bb1311f39cd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Xing Li <lixing@loongson.cn>
|
|
||||||
Date: Tue, 4 Jul 2023 15:10:03 +0800
|
|
||||||
Subject: [PATCH 2/2] Fix tst-cancel21.c to suit kernel struct sigcontext
|
|
||||||
change. * nptl/tst-cancel21.c
|
|
||||||
|
|
||||||
---
|
|
||||||
nptl/tst-cancel21.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/nptl/tst-cancel21.c b/nptl/tst-cancel21.c
|
|
||||||
index b10fdbc1..a3653f21 100644
|
|
||||||
--- a/nptl/tst-cancel21.c
|
|
||||||
+++ b/nptl/tst-cancel21.c
|
|
||||||
@@ -217,14 +217,14 @@ static int
|
|
||||||
do_test (void)
|
|
||||||
{
|
|
||||||
stack_t ss;
|
|
||||||
- ss.ss_sp = malloc (2 * SIGSTKSZ);
|
|
||||||
+ ss.ss_sp = malloc (4 * SIGSTKSZ);
|
|
||||||
if (ss.ss_sp == NULL)
|
|
||||||
{
|
|
||||||
puts ("failed to allocate alternate stack");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
ss.ss_flags = 0;
|
|
||||||
- ss.ss_size = 2 * SIGSTKSZ;
|
|
||||||
+ ss.ss_size = 4 * SIGSTKSZ;
|
|
||||||
if (sigaltstack (&ss, NULL) < 0)
|
|
||||||
{
|
|
||||||
printf ("sigaltstack failed %m\n");
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
2
dist
2
dist
|
@ -1 +1 @@
|
||||||
an8
|
an8_8
|
||||||
|
|
|
@ -1,147 +0,0 @@
|
||||||
From 58f93dff514cc0bdf3c72eff590dcf5fe5bf9e00 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Wed, 19 Jul 2023 23:09:09 +0800
|
|
||||||
Subject: [PATCH 3/6] 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 | 13 ++++++++++++-
|
|
||||||
elf/tst-align3.c | 38 ++++++++++++++++++++++++++++++++++++++
|
|
||||||
elf/tst-alignmod3.c | 32 ++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 82 insertions(+), 1 deletion(-)
|
|
||||||
create mode 100644 elf/tst-align3.c
|
|
||||||
create mode 100644 elf/tst-alignmod3.c
|
|
||||||
|
|
||||||
diff --git a/elf/Makefile b/elf/Makefile
|
|
||||||
index 634c3113..442817ca 100644
|
|
||||||
--- a/elf/Makefile
|
|
||||||
+++ b/elf/Makefile
|
|
||||||
@@ -331,6 +331,7 @@ tests += \
|
|
||||||
tst-addr1 \
|
|
||||||
tst-align \
|
|
||||||
tst-align2 \
|
|
||||||
+ tst-align3 \
|
|
||||||
tst-audit-tlsdesc \
|
|
||||||
tst-audit-tlsdesc-dlopen \
|
|
||||||
tst-audit1 \
|
|
||||||
@@ -466,7 +467,9 @@ endif
|
|
||||||
test-srcs = \
|
|
||||||
tst-pathopt
|
|
||||||
# tests-srcs
|
|
||||||
-
|
|
||||||
+ifeq (yes,$(have-fpie))
|
|
||||||
+tests-pie += tst-align3
|
|
||||||
+endif
|
|
||||||
selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
|
|
||||||
|
|
||||||
ifneq ($(selinux-enabled),1)
|
|
||||||
@@ -647,6 +650,7 @@ modules-names = \
|
|
||||||
tst-absolute-zero-lib \
|
|
||||||
tst-alignmod \
|
|
||||||
tst-alignmod2 \
|
|
||||||
+ tst-alignmod3 \
|
|
||||||
tst-array2dep \
|
|
||||||
tst-array5dep \
|
|
||||||
tst-audit-tlsdesc-mod1 \
|
|
||||||
@@ -1669,6 +1673,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.27.0
|
|
||||||
|
|
|
@ -1,325 +0,0 @@
|
||||||
From 6152628751bf13f74c9336263a9c22f29ccd8ffb Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Wed, 19 Jul 2023 23:01:53 +0800
|
|
||||||
Subject: [PATCH 1/6] 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.27.0
|
|
||||||
|
|
347
glibc-RHEL-2422.patch
Normal file
347
glibc-RHEL-2422.patch
Normal file
|
@ -0,0 +1,347 @@
|
||||||
|
Avoid UAF in getcanonname (CVE-2023-4806)
|
||||||
|
|
||||||
|
When an NSS plugin only implements the _gethostbyname2_r and
|
||||||
|
_getcanonname_r callbacks, getaddrinfo could use memory that was freed
|
||||||
|
during tmpbuf resizing, through h_name in a previous query response.
|
||||||
|
|
||||||
|
The backing store for res->at->name when doing a query with
|
||||||
|
gethostbyname3_r or gethostbyname2_r is tmpbuf, which is reallocated in
|
||||||
|
gethosts during the query. For AF_INET6 lookup with AI_ALL |
|
||||||
|
AI_V4MAPPED, gethosts gets called twice, once for a v6 lookup and second
|
||||||
|
for a v4 lookup. In this case, if the first call reallocates tmpbuf
|
||||||
|
enough number of times, resulting in a malloc, th->h_name (that
|
||||||
|
res->at->name refers to) ends up on a heap allocated storage in tmpbuf.
|
||||||
|
Now if the second call to gethosts also causes the plugin callback to
|
||||||
|
return NSS_STATUS_TRYAGAIN, tmpbuf will get freed, resulting in a UAF
|
||||||
|
reference in res->at->name. This then gets dereferenced in the
|
||||||
|
getcanonname_r plugin call, resulting in the use after free.
|
||||||
|
|
||||||
|
Fix this by copying h_name over and freeing it at the end. This
|
||||||
|
resolves BZ #30843, which is assigned CVE-2023-4806. This is a minimal
|
||||||
|
RHEL-8-specific fix. Test case differences from upstream:
|
||||||
|
|
||||||
|
- The test module needs to explicitly link against libnss_files on
|
||||||
|
RHEL-8; upstream libnss_files is built into libc.so.
|
||||||
|
|
||||||
|
- Test module code was adapted to not use the upstream NSS module
|
||||||
|
convenience macros.
|
||||||
|
|
||||||
|
This change is adapted from the following commit from upstream:
|
||||||
|
|
||||||
|
commit 973fe93a5675c42798b2161c6f29c01b0e243994
|
||||||
|
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||||
|
Date: Fri Sep 15 13:51:12 2023 -0400
|
||||||
|
|
||||||
|
getaddrinfo: Fix use after free in getcanonname (CVE-2023-4806)
|
||||||
|
|
||||||
|
When an NSS plugin only implements the _gethostbyname2_r and
|
||||||
|
_getcanonname_r callbacks, getaddrinfo could use memory that was freed
|
||||||
|
during tmpbuf resizing, through h_name in a previous query response.
|
||||||
|
|
||||||
|
The backing store for res->at->name when doing a query with
|
||||||
|
gethostbyname3_r or gethostbyname2_r is tmpbuf, which is reallocated in
|
||||||
|
gethosts during the query. For AF_INET6 lookup with AI_ALL |
|
||||||
|
AI_V4MAPPED, gethosts gets called twice, once for a v6 lookup and second
|
||||||
|
for a v4 lookup. In this case, if the first call reallocates tmpbuf
|
||||||
|
enough number of times, resulting in a malloc, th->h_name (that
|
||||||
|
res->at->name refers to) ends up on a heap allocated storage in tmpbuf.
|
||||||
|
Now if the second call to gethosts also causes the plugin callback to
|
||||||
|
return NSS_STATUS_TRYAGAIN, tmpbuf will get freed, resulting in a UAF
|
||||||
|
reference in res->at->name. This then gets dereferenced in the
|
||||||
|
getcanonname_r plugin call, resulting in the use after free.
|
||||||
|
|
||||||
|
Fix this by copying h_name over and freeing it at the end. This
|
||||||
|
resolves BZ #30843, which is assigned CVE-2023-4806.
|
||||||
|
|
||||||
|
Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||||
|
|
||||||
|
diff --git a/nss/Makefile b/nss/Makefile
|
||||||
|
index cfb255c6e7a3a4de..5829a2539306ddb5 100644
|
||||||
|
--- a/nss/Makefile
|
||||||
|
+++ b/nss/Makefile
|
||||||
|
@@ -66,7 +66,8 @@ xtests = bug-erange
|
||||||
|
tests-container = \
|
||||||
|
tst-nss-db-endpwent \
|
||||||
|
tst-nss-db-endgrent \
|
||||||
|
- tst-nss-gai-actions
|
||||||
|
+ tst-nss-gai-actions \
|
||||||
|
+ tst-nss-gai-hv2-canonname
|
||||||
|
|
||||||
|
# Tests which need libdl
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
@@ -132,7 +133,8 @@ routines += $(libnss_files-routines)
|
||||||
|
static-only-routines += $(libnss_files-routines)
|
||||||
|
tests-static += tst-nss-static
|
||||||
|
endif
|
||||||
|
-extra-test-objs += nss_test1.os nss_test2.os nss_test_errno.os
|
||||||
|
+extra-test-objs += nss_test1.os nss_test2.os nss_test_errno.os \
|
||||||
|
+ nss_test_gai_hv2_canonname.os
|
||||||
|
|
||||||
|
include ../Rules
|
||||||
|
|
||||||
|
@@ -169,12 +171,17 @@ rtld-tests-LDFLAGS += -Wl,--dynamic-list=nss_test.ver
|
||||||
|
libof-nss_test1 = extramodules
|
||||||
|
libof-nss_test2 = extramodules
|
||||||
|
libof-nss_test_errno = extramodules
|
||||||
|
+libof-nss_test_gai_hv2_canonname = extramodules
|
||||||
|
$(objpfx)/libnss_test1.so: $(objpfx)nss_test1.os $(link-libc-deps)
|
||||||
|
$(build-module)
|
||||||
|
$(objpfx)/libnss_test2.so: $(objpfx)nss_test2.os $(link-libc-deps)
|
||||||
|
$(build-module)
|
||||||
|
$(objpfx)/libnss_test_errno.so: $(objpfx)nss_test_errno.os $(link-libc-deps)
|
||||||
|
$(build-module)
|
||||||
|
+$(objpfx)/libnss_test_gai_hv2_canonname.so: \
|
||||||
|
+ $(objpfx)nss_test_gai_hv2_canonname.os $(link-libc-deps) \
|
||||||
|
+ $(objpfx)/libnss_files.so
|
||||||
|
+ $(build-module)
|
||||||
|
$(objpfx)nss_test2.os : nss_test1.c
|
||||||
|
ifdef libnss_test1.so-version
|
||||||
|
$(objpfx)/libnss_test1.so$(libnss_test1.so-version): $(objpfx)/libnss_test1.so
|
||||||
|
@@ -187,10 +194,14 @@ endif
|
||||||
|
$(objpfx)/libnss_test_errno.so$(libnss_files.so-version): \
|
||||||
|
$(objpfx)/libnss_test_errno.so
|
||||||
|
$(make-link)
|
||||||
|
+$(objpfx)/libnss_test_gai_hv2_canonname.so$(libnss_files.so-version): \
|
||||||
|
+ $(objpfx)/libnss_test_gai_hv2_canonname.so
|
||||||
|
+ $(make-link)
|
||||||
|
$(patsubst %,$(objpfx)%.out,$(tests)) : \
|
||||||
|
$(objpfx)/libnss_test1.so$(libnss_test1.so-version) \
|
||||||
|
$(objpfx)/libnss_test2.so$(libnss_test2.so-version) \
|
||||||
|
- $(objpfx)/libnss_test_errno.so$(libnss_files.so-version)
|
||||||
|
+ $(objpfx)/libnss_test_errno.so$(libnss_files.so-version) \
|
||||||
|
+ $(objpfx)/libnss_test_gai_hv2_canonname.so$(libnss_files.so-version)
|
||||||
|
|
||||||
|
ifeq (yes,$(have-thread-library))
|
||||||
|
$(objpfx)tst-cancel-getpwuid_r: $(shared-thread-library)
|
||||||
|
diff --git a/nss/nss_test_gai_hv2_canonname.c b/nss/nss_test_gai_hv2_canonname.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..4195d7d24fdd5f6d
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/nss/nss_test_gai_hv2_canonname.c
|
||||||
|
@@ -0,0 +1,64 @@
|
||||||
|
+/* NSS service provider that only provides gethostbyname2_r.
|
||||||
|
+ 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
|
||||||
|
+ 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 <netdb.h>
|
||||||
|
+#include <nss.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+#include "nss/tst-nss-gai-hv2-canonname.h"
|
||||||
|
+
|
||||||
|
+/* Catch misnamed and functions. */
|
||||||
|
+#pragma GCC diagnostic error "-Wmissing-prototypes"
|
||||||
|
+
|
||||||
|
+extern enum nss_status _nss_files_gethostbyname2_r (const char *, int,
|
||||||
|
+ struct hostent *, char *,
|
||||||
|
+ size_t, int *, int *);
|
||||||
|
+
|
||||||
|
+enum nss_status
|
||||||
|
+_nss_test_gai_hv2_canonname_gethostbyname2_r (const char *, int, struct hostent
|
||||||
|
+ *, char *, size_t, int *, int *);
|
||||||
|
+
|
||||||
|
+enum nss_status
|
||||||
|
+_nss_test_gai_hv2_canonname_getcanonname_r (const char *, char *, size_t, char
|
||||||
|
+ **, int *, int *);
|
||||||
|
+
|
||||||
|
+enum nss_status
|
||||||
|
+_nss_test_gai_hv2_canonname_gethostbyname2_r (const char *name, int af,
|
||||||
|
+ struct hostent *result,
|
||||||
|
+ char *buffer, size_t buflen,
|
||||||
|
+ int *errnop, int *herrnop)
|
||||||
|
+{
|
||||||
|
+ return _nss_files_gethostbyname2_r (name, af, result, buffer, buflen, errnop,
|
||||||
|
+ herrnop);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+enum nss_status
|
||||||
|
+_nss_test_gai_hv2_canonname_getcanonname_r (const char *name, char *buffer,
|
||||||
|
+ size_t buflen, char **result,
|
||||||
|
+ int *errnop, int *h_errnop)
|
||||||
|
+{
|
||||||
|
+ /* We expect QUERYNAME, which is a small enough string that it shouldn't fail
|
||||||
|
+ the test. */
|
||||||
|
+ if (memcmp (QUERYNAME, name, sizeof (QUERYNAME))
|
||||||
|
+ || buflen < sizeof (QUERYNAME))
|
||||||
|
+ abort ();
|
||||||
|
+
|
||||||
|
+ strncpy (buffer, name, buflen);
|
||||||
|
+ *result = buffer;
|
||||||
|
+ return NSS_STATUS_SUCCESS;
|
||||||
|
+}
|
||||||
|
diff --git a/nss/tst-nss-gai-hv2-canonname.c b/nss/tst-nss-gai-hv2-canonname.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..d5f10c07d6a90773
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/nss/tst-nss-gai-hv2-canonname.c
|
||||||
|
@@ -0,0 +1,63 @@
|
||||||
|
+/* Test NSS query path for plugins that only implement gethostbyname2
|
||||||
|
+ (#30843).
|
||||||
|
+ 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
|
||||||
|
+ 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 <nss.h>
|
||||||
|
+#include <netdb.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+#include <support/check.h>
|
||||||
|
+#include <support/xstdio.h>
|
||||||
|
+#include "nss/tst-nss-gai-hv2-canonname.h"
|
||||||
|
+
|
||||||
|
+#define PREPARE do_prepare
|
||||||
|
+
|
||||||
|
+static void do_prepare (int a, char **av)
|
||||||
|
+{
|
||||||
|
+ FILE *hosts = xfopen ("/etc/hosts", "w");
|
||||||
|
+ for (unsigned i = 2; i < 255; i++)
|
||||||
|
+ {
|
||||||
|
+ fprintf (hosts, "ff01::ff02:ff03:%u:2\ttest.example.com\n", i);
|
||||||
|
+ fprintf (hosts, "192.168.0.%u\ttest.example.com\n", i);
|
||||||
|
+ }
|
||||||
|
+ xfclose (hosts);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
+do_test (void)
|
||||||
|
+{
|
||||||
|
+ __nss_configure_lookup ("hosts", "test_gai_hv2_canonname");
|
||||||
|
+
|
||||||
|
+ struct addrinfo hints = {};
|
||||||
|
+ struct addrinfo *result = NULL;
|
||||||
|
+
|
||||||
|
+ hints.ai_family = AF_INET6;
|
||||||
|
+ hints.ai_flags = AI_ALL | AI_V4MAPPED | AI_CANONNAME;
|
||||||
|
+
|
||||||
|
+ int ret = getaddrinfo (QUERYNAME, NULL, &hints, &result);
|
||||||
|
+
|
||||||
|
+ if (ret != 0)
|
||||||
|
+ FAIL_EXIT1 ("getaddrinfo failed: %s\n", gai_strerror (ret));
|
||||||
|
+
|
||||||
|
+ TEST_COMPARE_STRING (result->ai_canonname, QUERYNAME);
|
||||||
|
+
|
||||||
|
+ freeaddrinfo(result);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#include <support/test-driver.c>
|
||||||
|
diff --git a/nss/tst-nss-gai-hv2-canonname.h b/nss/tst-nss-gai-hv2-canonname.h
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..14f2a9cb0867dff9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/nss/tst-nss-gai-hv2-canonname.h
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+#define QUERYNAME "test.example.com"
|
||||||
|
diff --git a/nss/tst-nss-gai-hv2-canonname.root/postclean.req b/nss/tst-nss-gai-hv2-canonname.root/postclean.req
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..e69de29bb2d1d643
|
||||||
|
diff --git a/nss/tst-nss-gai-hv2-canonname.root/tst-nss-gai-hv2-canonname.script b/nss/tst-nss-gai-hv2-canonname.root/tst-nss-gai-hv2-canonname.script
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..31848b4a28524af6
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/nss/tst-nss-gai-hv2-canonname.root/tst-nss-gai-hv2-canonname.script
|
||||||
|
@@ -0,0 +1,2 @@
|
||||||
|
+cp $B/nss/libnss_test_gai_hv2_canonname.so $L/libnss_test_gai_hv2_canonname.so.2
|
||||||
|
+su
|
||||||
|
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
|
||||||
|
index 4fa963644af8b7d5..46046504a6858f2e 100644
|
||||||
|
--- a/sysdeps/posix/getaddrinfo.c
|
||||||
|
+++ b/sysdeps/posix/getaddrinfo.c
|
||||||
|
@@ -233,7 +233,6 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req,
|
||||||
|
}
|
||||||
|
array[i].next = array + i + 1;
|
||||||
|
}
|
||||||
|
- array[0].name = h->h_name;
|
||||||
|
array[count - 1].next = NULL;
|
||||||
|
|
||||||
|
*result = array;
|
||||||
|
@@ -287,6 +286,18 @@ convert_hostent_to_gaih_addrtuple (const struct addrinfo *req,
|
||||||
|
} \
|
||||||
|
*pat = addrmem; \
|
||||||
|
\
|
||||||
|
+ /* Store h_name so that it survives accidental deallocation when \
|
||||||
|
+ gethosts is called again and tmpbuf gets reallocated. */ \
|
||||||
|
+ if (h_name == NULL && th.h_name != NULL) \
|
||||||
|
+ { \
|
||||||
|
+ h_name = __strdup (th.h_name); \
|
||||||
|
+ if (h_name == NULL) \
|
||||||
|
+ { \
|
||||||
|
+ __resolv_context_put (res_ctx); \
|
||||||
|
+ result = -EAI_SYSTEM; \
|
||||||
|
+ goto free_and_return; \
|
||||||
|
+ } \
|
||||||
|
+ } \
|
||||||
|
if (localcanon != NULL && canon == NULL) \
|
||||||
|
{ \
|
||||||
|
canonbuf = __strdup (localcanon); \
|
||||||
|
@@ -323,15 +334,15 @@ typedef enum nss_status (*nss_getcanonname_r)
|
||||||
|
memory allocation failure. The returned string is allocated on the
|
||||||
|
heap; the caller has to free it. */
|
||||||
|
static char *
|
||||||
|
-getcanonname (service_user *nip, struct gaih_addrtuple *at, const char *name)
|
||||||
|
+getcanonname (service_user *nip, const char *hname, const char *name)
|
||||||
|
{
|
||||||
|
nss_getcanonname_r cfct = __nss_lookup_function (nip, "getcanonname_r");
|
||||||
|
char *s = (char *) name;
|
||||||
|
if (cfct != NULL)
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
- if (DL_CALL_FCT (cfct, (at->name ?: name, buf, sizeof (buf),
|
||||||
|
- &s, &errno, &h_errno)) != NSS_STATUS_SUCCESS)
|
||||||
|
+ if (DL_CALL_FCT (cfct, (hname ?: name, buf, sizeof (buf), &s, &errno,
|
||||||
|
+ &h_errno)) != NSS_STATUS_SUCCESS)
|
||||||
|
/* If the canonical name cannot be determined, use the passed
|
||||||
|
string. */
|
||||||
|
s = (char *) name;
|
||||||
|
@@ -349,6 +360,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
struct gaih_addrtuple *at = NULL;
|
||||||
|
bool got_ipv6 = false;
|
||||||
|
const char *canon = NULL;
|
||||||
|
+ char *h_name = NULL;
|
||||||
|
const char *orig_name = name;
|
||||||
|
|
||||||
|
/* Reserve stack memory for the scratch buffer in the getaddrinfo
|
||||||
|
@@ -919,7 +931,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
if ((req->ai_flags & AI_CANONNAME) != 0
|
||||||
|
&& canon == NULL)
|
||||||
|
{
|
||||||
|
- canonbuf = getcanonname (nip, at, name);
|
||||||
|
+ canonbuf = getcanonname (nip, h_name, name);
|
||||||
|
if (canonbuf == NULL)
|
||||||
|
{
|
||||||
|
__resolv_context_enable_inet6
|
||||||
|
@@ -1169,6 +1181,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
free ((char *) name);
|
||||||
|
free (addrmem);
|
||||||
|
free (canonbuf);
|
||||||
|
+ free (h_name);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
987
glibc-RHEL-2434.patch
Normal file
987
glibc-RHEL-2434.patch
Normal file
|
@ -0,0 +1,987 @@
|
||||||
|
commit 1c37b8022e8763fedbb3f79c02e05c6acfe5a215
|
||||||
|
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||||
|
Date: Thu Mar 17 11:44:34 2022 +0530
|
||||||
|
|
||||||
|
Simplify allocations and fix merge and continue actions [BZ #28931]
|
||||||
|
|
||||||
|
Allocations for address tuples is currently a bit confusing because of
|
||||||
|
the pointer chasing through PAT, making it hard to observe the sequence
|
||||||
|
in which allocations have been made. Narrow scope of the pointer
|
||||||
|
chasing through PAT so that it is only used where necessary.
|
||||||
|
|
||||||
|
This also tightens actions behaviour with the hosts database in
|
||||||
|
getaddrinfo to comply with the manual text. The "continue" action
|
||||||
|
discards previous results and the "merge" action results in an immedate
|
||||||
|
lookup failure. Consequently, chaining of allocations across modules is
|
||||||
|
no longer necessary, thus opening up cleanup opportunities.
|
||||||
|
|
||||||
|
A test has been added that checks some combinations to ensure that they
|
||||||
|
work correctly.
|
||||||
|
|
||||||
|
Resolves: BZ #28931
|
||||||
|
|
||||||
|
Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||||
|
Reviewed-by: DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
nss/Makefile
|
||||||
|
(Missing test cases)
|
||||||
|
sysdeps/posix/getaddrinfo.c
|
||||||
|
(RES_USE_INET6 still present in RHEL-8 and NSS module traversal rewrite
|
||||||
|
not in RHEL-8)
|
||||||
|
nss/tst-nss-gai-actions.c
|
||||||
|
(Adapted SUCCESS=merge result to RHEL-8)
|
||||||
|
|
||||||
|
diff --git a/nss/Makefile b/nss/Makefile
|
||||||
|
index e8a7d9c7b3cefcdf..cfb255c6e7a3a4de 100644
|
||||||
|
--- a/nss/Makefile
|
||||||
|
+++ b/nss/Makefile
|
||||||
|
@@ -65,7 +65,8 @@ xtests = bug-erange
|
||||||
|
|
||||||
|
tests-container = \
|
||||||
|
tst-nss-db-endpwent \
|
||||||
|
- tst-nss-db-endgrent
|
||||||
|
+ tst-nss-db-endgrent \
|
||||||
|
+ tst-nss-gai-actions
|
||||||
|
|
||||||
|
# Tests which need libdl
|
||||||
|
ifeq (yes,$(build-shared))
|
||||||
|
diff --git a/nss/tst-nss-gai-actions.c b/nss/tst-nss-gai-actions.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..c35e752896eceb2a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/nss/tst-nss-gai-actions.c
|
||||||
|
@@ -0,0 +1,156 @@
|
||||||
|
+/* Test continue and merge NSS actions for getaddrinfo.
|
||||||
|
+ 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
|
||||||
|
+ 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 <dlfcn.h>
|
||||||
|
+#include <gnu/lib-names.h>
|
||||||
|
+#include <nss.h>
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+
|
||||||
|
+#include <support/check.h>
|
||||||
|
+#include <support/format_nss.h>
|
||||||
|
+#include <support/support.h>
|
||||||
|
+#include <support/xstdio.h>
|
||||||
|
+#include <support/xunistd.h>
|
||||||
|
+
|
||||||
|
+enum
|
||||||
|
+{
|
||||||
|
+ ACTION_MERGE = 0,
|
||||||
|
+ ACTION_CONTINUE,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const char *
|
||||||
|
+family_str (int family)
|
||||||
|
+{
|
||||||
|
+ switch (family)
|
||||||
|
+ {
|
||||||
|
+ case AF_UNSPEC:
|
||||||
|
+ return "AF_UNSPEC";
|
||||||
|
+ case AF_INET:
|
||||||
|
+ return "AF_INET";
|
||||||
|
+ default:
|
||||||
|
+ __builtin_unreachable ();
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const char *
|
||||||
|
+action_str (int action)
|
||||||
|
+{
|
||||||
|
+ switch (action)
|
||||||
|
+ {
|
||||||
|
+ case ACTION_MERGE:
|
||||||
|
+ return "merge";
|
||||||
|
+ case ACTION_CONTINUE:
|
||||||
|
+ return "continue";
|
||||||
|
+ default:
|
||||||
|
+ __builtin_unreachable ();
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+do_one_test (int action, int family, bool canon)
|
||||||
|
+{
|
||||||
|
+ struct addrinfo hints =
|
||||||
|
+ {
|
||||||
|
+ .ai_family = family,
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ struct addrinfo *ai;
|
||||||
|
+
|
||||||
|
+ if (canon)
|
||||||
|
+ hints.ai_flags = AI_CANONNAME;
|
||||||
|
+
|
||||||
|
+ printf ("***** Testing \"files [SUCCESS=%s] files\" for family %s, %s\n",
|
||||||
|
+ action_str (action), family_str (family),
|
||||||
|
+ canon ? "AI_CANONNAME" : "");
|
||||||
|
+
|
||||||
|
+ int ret = getaddrinfo ("example.org", "80", &hints, &ai);
|
||||||
|
+
|
||||||
|
+ switch (action)
|
||||||
|
+ {
|
||||||
|
+ case ACTION_MERGE:
|
||||||
|
+ if (ret == 0)
|
||||||
|
+ {
|
||||||
|
+ if (hints.ai_flags == 0 && hints.ai_family == AF_INET)
|
||||||
|
+ {
|
||||||
|
+ printf ("***** RHEL-8 limitation: "
|
||||||
|
+ "NSS modules infrastructure incorrectly allows MERGE\n");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ char *formatted = support_format_addrinfo (ai, ret);
|
||||||
|
+
|
||||||
|
+ printf ("merge unexpectedly succeeded:\n %s\n", formatted);
|
||||||
|
+ support_record_failure ();
|
||||||
|
+ free (formatted);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ return;
|
||||||
|
+ case ACTION_CONTINUE:
|
||||||
|
+ {
|
||||||
|
+ char *formatted = support_format_addrinfo (ai, ret);
|
||||||
|
+
|
||||||
|
+ /* Verify that the result appears exactly once. */
|
||||||
|
+ const char *expected = "address: STREAM/TCP 192.0.0.1 80\n"
|
||||||
|
+ "address: DGRAM/UDP 192.0.0.1 80\n"
|
||||||
|
+ "address: RAW/IP 192.0.0.1 80\n";
|
||||||
|
+
|
||||||
|
+ const char *contains = strstr (formatted, expected);
|
||||||
|
+ const char *contains2 = NULL;
|
||||||
|
+
|
||||||
|
+ if (contains != NULL)
|
||||||
|
+ contains2 = strstr (contains + strlen (expected), expected);
|
||||||
|
+
|
||||||
|
+ if (contains == NULL || contains2 != NULL)
|
||||||
|
+ {
|
||||||
|
+ printf ("continue failed:\n%s\n", formatted);
|
||||||
|
+ support_record_failure ();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ free (formatted);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ default:
|
||||||
|
+ __builtin_unreachable ();
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+do_one_test_set (int action)
|
||||||
|
+{
|
||||||
|
+ char buf[32];
|
||||||
|
+
|
||||||
|
+ snprintf (buf, sizeof (buf), "files [SUCCESS=%s] files",
|
||||||
|
+ action_str (action));
|
||||||
|
+ __nss_configure_lookup ("hosts", buf);
|
||||||
|
+
|
||||||
|
+ do_one_test (action, AF_UNSPEC, false);
|
||||||
|
+ do_one_test (action, AF_INET, false);
|
||||||
|
+ do_one_test (action, AF_INET, true);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
+do_test (void)
|
||||||
|
+{
|
||||||
|
+ do_one_test_set (ACTION_CONTINUE);
|
||||||
|
+ do_one_test_set (ACTION_MERGE);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#include <support/test-driver.c>
|
||||||
|
diff --git a/nss/tst-nss-gai-actions.root/etc/host.conf b/nss/tst-nss-gai-actions.root/etc/host.conf
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..d1a59f73a90f2993
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/nss/tst-nss-gai-actions.root/etc/host.conf
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+multi on
|
||||||
|
diff --git a/nss/tst-nss-gai-actions.root/etc/hosts b/nss/tst-nss-gai-actions.root/etc/hosts
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..50ce9774dc2c21d9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/nss/tst-nss-gai-actions.root/etc/hosts
|
||||||
|
@@ -0,0 +1,508 @@
|
||||||
|
+192.0.0.1 example.org
|
||||||
|
+192.0.0.2 example.org
|
||||||
|
+192.0.0.3 example.org
|
||||||
|
+192.0.0.4 example.org
|
||||||
|
+192.0.0.5 example.org
|
||||||
|
+192.0.0.6 example.org
|
||||||
|
+192.0.0.7 example.org
|
||||||
|
+192.0.0.8 example.org
|
||||||
|
+192.0.0.9 example.org
|
||||||
|
+192.0.0.10 example.org
|
||||||
|
+192.0.0.11 example.org
|
||||||
|
+192.0.0.12 example.org
|
||||||
|
+192.0.0.13 example.org
|
||||||
|
+192.0.0.14 example.org
|
||||||
|
+192.0.0.15 example.org
|
||||||
|
+192.0.0.16 example.org
|
||||||
|
+192.0.0.17 example.org
|
||||||
|
+192.0.0.18 example.org
|
||||||
|
+192.0.0.19 example.org
|
||||||
|
+192.0.0.20 example.org
|
||||||
|
+192.0.0.21 example.org
|
||||||
|
+192.0.0.22 example.org
|
||||||
|
+192.0.0.23 example.org
|
||||||
|
+192.0.0.24 example.org
|
||||||
|
+192.0.0.25 example.org
|
||||||
|
+192.0.0.26 example.org
|
||||||
|
+192.0.0.27 example.org
|
||||||
|
+192.0.0.28 example.org
|
||||||
|
+192.0.0.29 example.org
|
||||||
|
+192.0.0.30 example.org
|
||||||
|
+192.0.0.31 example.org
|
||||||
|
+192.0.0.32 example.org
|
||||||
|
+192.0.0.33 example.org
|
||||||
|
+192.0.0.34 example.org
|
||||||
|
+192.0.0.35 example.org
|
||||||
|
+192.0.0.36 example.org
|
||||||
|
+192.0.0.37 example.org
|
||||||
|
+192.0.0.38 example.org
|
||||||
|
+192.0.0.39 example.org
|
||||||
|
+192.0.0.40 example.org
|
||||||
|
+192.0.0.41 example.org
|
||||||
|
+192.0.0.42 example.org
|
||||||
|
+192.0.0.43 example.org
|
||||||
|
+192.0.0.44 example.org
|
||||||
|
+192.0.0.45 example.org
|
||||||
|
+192.0.0.46 example.org
|
||||||
|
+192.0.0.47 example.org
|
||||||
|
+192.0.0.48 example.org
|
||||||
|
+192.0.0.49 example.org
|
||||||
|
+192.0.0.50 example.org
|
||||||
|
+192.0.0.51 example.org
|
||||||
|
+192.0.0.52 example.org
|
||||||
|
+192.0.0.53 example.org
|
||||||
|
+192.0.0.54 example.org
|
||||||
|
+192.0.0.55 example.org
|
||||||
|
+192.0.0.56 example.org
|
||||||
|
+192.0.0.57 example.org
|
||||||
|
+192.0.0.58 example.org
|
||||||
|
+192.0.0.59 example.org
|
||||||
|
+192.0.0.60 example.org
|
||||||
|
+192.0.0.61 example.org
|
||||||
|
+192.0.0.62 example.org
|
||||||
|
+192.0.0.63 example.org
|
||||||
|
+192.0.0.64 example.org
|
||||||
|
+192.0.0.65 example.org
|
||||||
|
+192.0.0.66 example.org
|
||||||
|
+192.0.0.67 example.org
|
||||||
|
+192.0.0.68 example.org
|
||||||
|
+192.0.0.69 example.org
|
||||||
|
+192.0.0.70 example.org
|
||||||
|
+192.0.0.71 example.org
|
||||||
|
+192.0.0.72 example.org
|
||||||
|
+192.0.0.73 example.org
|
||||||
|
+192.0.0.74 example.org
|
||||||
|
+192.0.0.75 example.org
|
||||||
|
+192.0.0.76 example.org
|
||||||
|
+192.0.0.77 example.org
|
||||||
|
+192.0.0.78 example.org
|
||||||
|
+192.0.0.79 example.org
|
||||||
|
+192.0.0.80 example.org
|
||||||
|
+192.0.0.81 example.org
|
||||||
|
+192.0.0.82 example.org
|
||||||
|
+192.0.0.83 example.org
|
||||||
|
+192.0.0.84 example.org
|
||||||
|
+192.0.0.85 example.org
|
||||||
|
+192.0.0.86 example.org
|
||||||
|
+192.0.0.87 example.org
|
||||||
|
+192.0.0.88 example.org
|
||||||
|
+192.0.0.89 example.org
|
||||||
|
+192.0.0.90 example.org
|
||||||
|
+192.0.0.91 example.org
|
||||||
|
+192.0.0.92 example.org
|
||||||
|
+192.0.0.93 example.org
|
||||||
|
+192.0.0.94 example.org
|
||||||
|
+192.0.0.95 example.org
|
||||||
|
+192.0.0.96 example.org
|
||||||
|
+192.0.0.97 example.org
|
||||||
|
+192.0.0.98 example.org
|
||||||
|
+192.0.0.99 example.org
|
||||||
|
+192.0.0.100 example.org
|
||||||
|
+192.0.0.101 example.org
|
||||||
|
+192.0.0.102 example.org
|
||||||
|
+192.0.0.103 example.org
|
||||||
|
+192.0.0.104 example.org
|
||||||
|
+192.0.0.105 example.org
|
||||||
|
+192.0.0.106 example.org
|
||||||
|
+192.0.0.107 example.org
|
||||||
|
+192.0.0.108 example.org
|
||||||
|
+192.0.0.109 example.org
|
||||||
|
+192.0.0.110 example.org
|
||||||
|
+192.0.0.111 example.org
|
||||||
|
+192.0.0.112 example.org
|
||||||
|
+192.0.0.113 example.org
|
||||||
|
+192.0.0.114 example.org
|
||||||
|
+192.0.0.115 example.org
|
||||||
|
+192.0.0.116 example.org
|
||||||
|
+192.0.0.117 example.org
|
||||||
|
+192.0.0.118 example.org
|
||||||
|
+192.0.0.119 example.org
|
||||||
|
+192.0.0.120 example.org
|
||||||
|
+192.0.0.121 example.org
|
||||||
|
+192.0.0.122 example.org
|
||||||
|
+192.0.0.123 example.org
|
||||||
|
+192.0.0.124 example.org
|
||||||
|
+192.0.0.125 example.org
|
||||||
|
+192.0.0.126 example.org
|
||||||
|
+192.0.0.127 example.org
|
||||||
|
+192.0.0.128 example.org
|
||||||
|
+192.0.0.129 example.org
|
||||||
|
+192.0.0.130 example.org
|
||||||
|
+192.0.0.131 example.org
|
||||||
|
+192.0.0.132 example.org
|
||||||
|
+192.0.0.133 example.org
|
||||||
|
+192.0.0.134 example.org
|
||||||
|
+192.0.0.135 example.org
|
||||||
|
+192.0.0.136 example.org
|
||||||
|
+192.0.0.137 example.org
|
||||||
|
+192.0.0.138 example.org
|
||||||
|
+192.0.0.139 example.org
|
||||||
|
+192.0.0.140 example.org
|
||||||
|
+192.0.0.141 example.org
|
||||||
|
+192.0.0.142 example.org
|
||||||
|
+192.0.0.143 example.org
|
||||||
|
+192.0.0.144 example.org
|
||||||
|
+192.0.0.145 example.org
|
||||||
|
+192.0.0.146 example.org
|
||||||
|
+192.0.0.147 example.org
|
||||||
|
+192.0.0.148 example.org
|
||||||
|
+192.0.0.149 example.org
|
||||||
|
+192.0.0.150 example.org
|
||||||
|
+192.0.0.151 example.org
|
||||||
|
+192.0.0.152 example.org
|
||||||
|
+192.0.0.153 example.org
|
||||||
|
+192.0.0.154 example.org
|
||||||
|
+192.0.0.155 example.org
|
||||||
|
+192.0.0.156 example.org
|
||||||
|
+192.0.0.157 example.org
|
||||||
|
+192.0.0.158 example.org
|
||||||
|
+192.0.0.159 example.org
|
||||||
|
+192.0.0.160 example.org
|
||||||
|
+192.0.0.161 example.org
|
||||||
|
+192.0.0.162 example.org
|
||||||
|
+192.0.0.163 example.org
|
||||||
|
+192.0.0.164 example.org
|
||||||
|
+192.0.0.165 example.org
|
||||||
|
+192.0.0.166 example.org
|
||||||
|
+192.0.0.167 example.org
|
||||||
|
+192.0.0.168 example.org
|
||||||
|
+192.0.0.169 example.org
|
||||||
|
+192.0.0.170 example.org
|
||||||
|
+192.0.0.171 example.org
|
||||||
|
+192.0.0.172 example.org
|
||||||
|
+192.0.0.173 example.org
|
||||||
|
+192.0.0.174 example.org
|
||||||
|
+192.0.0.175 example.org
|
||||||
|
+192.0.0.176 example.org
|
||||||
|
+192.0.0.177 example.org
|
||||||
|
+192.0.0.178 example.org
|
||||||
|
+192.0.0.179 example.org
|
||||||
|
+192.0.0.180 example.org
|
||||||
|
+192.0.0.181 example.org
|
||||||
|
+192.0.0.182 example.org
|
||||||
|
+192.0.0.183 example.org
|
||||||
|
+192.0.0.184 example.org
|
||||||
|
+192.0.0.185 example.org
|
||||||
|
+192.0.0.186 example.org
|
||||||
|
+192.0.0.187 example.org
|
||||||
|
+192.0.0.188 example.org
|
||||||
|
+192.0.0.189 example.org
|
||||||
|
+192.0.0.190 example.org
|
||||||
|
+192.0.0.191 example.org
|
||||||
|
+192.0.0.192 example.org
|
||||||
|
+192.0.0.193 example.org
|
||||||
|
+192.0.0.194 example.org
|
||||||
|
+192.0.0.195 example.org
|
||||||
|
+192.0.0.196 example.org
|
||||||
|
+192.0.0.197 example.org
|
||||||
|
+192.0.0.198 example.org
|
||||||
|
+192.0.0.199 example.org
|
||||||
|
+192.0.0.200 example.org
|
||||||
|
+192.0.0.201 example.org
|
||||||
|
+192.0.0.202 example.org
|
||||||
|
+192.0.0.203 example.org
|
||||||
|
+192.0.0.204 example.org
|
||||||
|
+192.0.0.205 example.org
|
||||||
|
+192.0.0.206 example.org
|
||||||
|
+192.0.0.207 example.org
|
||||||
|
+192.0.0.208 example.org
|
||||||
|
+192.0.0.209 example.org
|
||||||
|
+192.0.0.210 example.org
|
||||||
|
+192.0.0.211 example.org
|
||||||
|
+192.0.0.212 example.org
|
||||||
|
+192.0.0.213 example.org
|
||||||
|
+192.0.0.214 example.org
|
||||||
|
+192.0.0.215 example.org
|
||||||
|
+192.0.0.216 example.org
|
||||||
|
+192.0.0.217 example.org
|
||||||
|
+192.0.0.218 example.org
|
||||||
|
+192.0.0.219 example.org
|
||||||
|
+192.0.0.220 example.org
|
||||||
|
+192.0.0.221 example.org
|
||||||
|
+192.0.0.222 example.org
|
||||||
|
+192.0.0.223 example.org
|
||||||
|
+192.0.0.224 example.org
|
||||||
|
+192.0.0.225 example.org
|
||||||
|
+192.0.0.226 example.org
|
||||||
|
+192.0.0.227 example.org
|
||||||
|
+192.0.0.228 example.org
|
||||||
|
+192.0.0.229 example.org
|
||||||
|
+192.0.0.230 example.org
|
||||||
|
+192.0.0.231 example.org
|
||||||
|
+192.0.0.232 example.org
|
||||||
|
+192.0.0.233 example.org
|
||||||
|
+192.0.0.234 example.org
|
||||||
|
+192.0.0.235 example.org
|
||||||
|
+192.0.0.236 example.org
|
||||||
|
+192.0.0.237 example.org
|
||||||
|
+192.0.0.238 example.org
|
||||||
|
+192.0.0.239 example.org
|
||||||
|
+192.0.0.240 example.org
|
||||||
|
+192.0.0.241 example.org
|
||||||
|
+192.0.0.242 example.org
|
||||||
|
+192.0.0.243 example.org
|
||||||
|
+192.0.0.244 example.org
|
||||||
|
+192.0.0.245 example.org
|
||||||
|
+192.0.0.246 example.org
|
||||||
|
+192.0.0.247 example.org
|
||||||
|
+192.0.0.248 example.org
|
||||||
|
+192.0.0.249 example.org
|
||||||
|
+192.0.0.250 example.org
|
||||||
|
+192.0.0.251 example.org
|
||||||
|
+192.0.0.252 example.org
|
||||||
|
+192.0.0.253 example.org
|
||||||
|
+192.0.0.254 example.org
|
||||||
|
+192.0.1.1 example.org
|
||||||
|
+192.0.1.2 example.org
|
||||||
|
+192.0.1.3 example.org
|
||||||
|
+192.0.1.4 example.org
|
||||||
|
+192.0.1.5 example.org
|
||||||
|
+192.0.1.6 example.org
|
||||||
|
+192.0.1.7 example.org
|
||||||
|
+192.0.1.8 example.org
|
||||||
|
+192.0.1.9 example.org
|
||||||
|
+192.0.1.10 example.org
|
||||||
|
+192.0.1.11 example.org
|
||||||
|
+192.0.1.12 example.org
|
||||||
|
+192.0.1.13 example.org
|
||||||
|
+192.0.1.14 example.org
|
||||||
|
+192.0.1.15 example.org
|
||||||
|
+192.0.1.16 example.org
|
||||||
|
+192.0.1.17 example.org
|
||||||
|
+192.0.1.18 example.org
|
||||||
|
+192.0.1.19 example.org
|
||||||
|
+192.0.1.20 example.org
|
||||||
|
+192.0.1.21 example.org
|
||||||
|
+192.0.1.22 example.org
|
||||||
|
+192.0.1.23 example.org
|
||||||
|
+192.0.1.24 example.org
|
||||||
|
+192.0.1.25 example.org
|
||||||
|
+192.0.1.26 example.org
|
||||||
|
+192.0.1.27 example.org
|
||||||
|
+192.0.1.28 example.org
|
||||||
|
+192.0.1.29 example.org
|
||||||
|
+192.0.1.30 example.org
|
||||||
|
+192.0.1.31 example.org
|
||||||
|
+192.0.1.32 example.org
|
||||||
|
+192.0.1.33 example.org
|
||||||
|
+192.0.1.34 example.org
|
||||||
|
+192.0.1.35 example.org
|
||||||
|
+192.0.1.36 example.org
|
||||||
|
+192.0.1.37 example.org
|
||||||
|
+192.0.1.38 example.org
|
||||||
|
+192.0.1.39 example.org
|
||||||
|
+192.0.1.40 example.org
|
||||||
|
+192.0.1.41 example.org
|
||||||
|
+192.0.1.42 example.org
|
||||||
|
+192.0.1.43 example.org
|
||||||
|
+192.0.1.44 example.org
|
||||||
|
+192.0.1.45 example.org
|
||||||
|
+192.0.1.46 example.org
|
||||||
|
+192.0.1.47 example.org
|
||||||
|
+192.0.1.48 example.org
|
||||||
|
+192.0.1.49 example.org
|
||||||
|
+192.0.1.50 example.org
|
||||||
|
+192.0.1.51 example.org
|
||||||
|
+192.0.1.52 example.org
|
||||||
|
+192.0.1.53 example.org
|
||||||
|
+192.0.1.54 example.org
|
||||||
|
+192.0.1.55 example.org
|
||||||
|
+192.0.1.56 example.org
|
||||||
|
+192.0.1.57 example.org
|
||||||
|
+192.0.1.58 example.org
|
||||||
|
+192.0.1.59 example.org
|
||||||
|
+192.0.1.60 example.org
|
||||||
|
+192.0.1.61 example.org
|
||||||
|
+192.0.1.62 example.org
|
||||||
|
+192.0.1.63 example.org
|
||||||
|
+192.0.1.64 example.org
|
||||||
|
+192.0.1.65 example.org
|
||||||
|
+192.0.1.66 example.org
|
||||||
|
+192.0.1.67 example.org
|
||||||
|
+192.0.1.68 example.org
|
||||||
|
+192.0.1.69 example.org
|
||||||
|
+192.0.1.70 example.org
|
||||||
|
+192.0.1.71 example.org
|
||||||
|
+192.0.1.72 example.org
|
||||||
|
+192.0.1.73 example.org
|
||||||
|
+192.0.1.74 example.org
|
||||||
|
+192.0.1.75 example.org
|
||||||
|
+192.0.1.76 example.org
|
||||||
|
+192.0.1.77 example.org
|
||||||
|
+192.0.1.78 example.org
|
||||||
|
+192.0.1.79 example.org
|
||||||
|
+192.0.1.80 example.org
|
||||||
|
+192.0.1.81 example.org
|
||||||
|
+192.0.1.82 example.org
|
||||||
|
+192.0.1.83 example.org
|
||||||
|
+192.0.1.84 example.org
|
||||||
|
+192.0.1.85 example.org
|
||||||
|
+192.0.1.86 example.org
|
||||||
|
+192.0.1.87 example.org
|
||||||
|
+192.0.1.88 example.org
|
||||||
|
+192.0.1.89 example.org
|
||||||
|
+192.0.1.90 example.org
|
||||||
|
+192.0.1.91 example.org
|
||||||
|
+192.0.1.92 example.org
|
||||||
|
+192.0.1.93 example.org
|
||||||
|
+192.0.1.94 example.org
|
||||||
|
+192.0.1.95 example.org
|
||||||
|
+192.0.1.96 example.org
|
||||||
|
+192.0.1.97 example.org
|
||||||
|
+192.0.1.98 example.org
|
||||||
|
+192.0.1.99 example.org
|
||||||
|
+192.0.1.100 example.org
|
||||||
|
+192.0.1.101 example.org
|
||||||
|
+192.0.1.102 example.org
|
||||||
|
+192.0.1.103 example.org
|
||||||
|
+192.0.1.104 example.org
|
||||||
|
+192.0.1.105 example.org
|
||||||
|
+192.0.1.106 example.org
|
||||||
|
+192.0.1.107 example.org
|
||||||
|
+192.0.1.108 example.org
|
||||||
|
+192.0.1.109 example.org
|
||||||
|
+192.0.1.110 example.org
|
||||||
|
+192.0.1.111 example.org
|
||||||
|
+192.0.1.112 example.org
|
||||||
|
+192.0.1.113 example.org
|
||||||
|
+192.0.1.114 example.org
|
||||||
|
+192.0.1.115 example.org
|
||||||
|
+192.0.1.116 example.org
|
||||||
|
+192.0.1.117 example.org
|
||||||
|
+192.0.1.118 example.org
|
||||||
|
+192.0.1.119 example.org
|
||||||
|
+192.0.1.120 example.org
|
||||||
|
+192.0.1.121 example.org
|
||||||
|
+192.0.1.122 example.org
|
||||||
|
+192.0.1.123 example.org
|
||||||
|
+192.0.1.124 example.org
|
||||||
|
+192.0.1.125 example.org
|
||||||
|
+192.0.1.126 example.org
|
||||||
|
+192.0.1.127 example.org
|
||||||
|
+192.0.1.128 example.org
|
||||||
|
+192.0.1.129 example.org
|
||||||
|
+192.0.1.130 example.org
|
||||||
|
+192.0.1.131 example.org
|
||||||
|
+192.0.1.132 example.org
|
||||||
|
+192.0.1.133 example.org
|
||||||
|
+192.0.1.134 example.org
|
||||||
|
+192.0.1.135 example.org
|
||||||
|
+192.0.1.136 example.org
|
||||||
|
+192.0.1.137 example.org
|
||||||
|
+192.0.1.138 example.org
|
||||||
|
+192.0.1.139 example.org
|
||||||
|
+192.0.1.140 example.org
|
||||||
|
+192.0.1.141 example.org
|
||||||
|
+192.0.1.142 example.org
|
||||||
|
+192.0.1.143 example.org
|
||||||
|
+192.0.1.144 example.org
|
||||||
|
+192.0.1.145 example.org
|
||||||
|
+192.0.1.146 example.org
|
||||||
|
+192.0.1.147 example.org
|
||||||
|
+192.0.1.148 example.org
|
||||||
|
+192.0.1.149 example.org
|
||||||
|
+192.0.1.150 example.org
|
||||||
|
+192.0.1.151 example.org
|
||||||
|
+192.0.1.152 example.org
|
||||||
|
+192.0.1.153 example.org
|
||||||
|
+192.0.1.154 example.org
|
||||||
|
+192.0.1.155 example.org
|
||||||
|
+192.0.1.156 example.org
|
||||||
|
+192.0.1.157 example.org
|
||||||
|
+192.0.1.158 example.org
|
||||||
|
+192.0.1.159 example.org
|
||||||
|
+192.0.1.160 example.org
|
||||||
|
+192.0.1.161 example.org
|
||||||
|
+192.0.1.162 example.org
|
||||||
|
+192.0.1.163 example.org
|
||||||
|
+192.0.1.164 example.org
|
||||||
|
+192.0.1.165 example.org
|
||||||
|
+192.0.1.166 example.org
|
||||||
|
+192.0.1.167 example.org
|
||||||
|
+192.0.1.168 example.org
|
||||||
|
+192.0.1.169 example.org
|
||||||
|
+192.0.1.170 example.org
|
||||||
|
+192.0.1.171 example.org
|
||||||
|
+192.0.1.172 example.org
|
||||||
|
+192.0.1.173 example.org
|
||||||
|
+192.0.1.174 example.org
|
||||||
|
+192.0.1.175 example.org
|
||||||
|
+192.0.1.176 example.org
|
||||||
|
+192.0.1.177 example.org
|
||||||
|
+192.0.1.178 example.org
|
||||||
|
+192.0.1.179 example.org
|
||||||
|
+192.0.1.180 example.org
|
||||||
|
+192.0.1.181 example.org
|
||||||
|
+192.0.1.182 example.org
|
||||||
|
+192.0.1.183 example.org
|
||||||
|
+192.0.1.184 example.org
|
||||||
|
+192.0.1.185 example.org
|
||||||
|
+192.0.1.186 example.org
|
||||||
|
+192.0.1.187 example.org
|
||||||
|
+192.0.1.188 example.org
|
||||||
|
+192.0.1.189 example.org
|
||||||
|
+192.0.1.190 example.org
|
||||||
|
+192.0.1.191 example.org
|
||||||
|
+192.0.1.192 example.org
|
||||||
|
+192.0.1.193 example.org
|
||||||
|
+192.0.1.194 example.org
|
||||||
|
+192.0.1.195 example.org
|
||||||
|
+192.0.1.196 example.org
|
||||||
|
+192.0.1.197 example.org
|
||||||
|
+192.0.1.198 example.org
|
||||||
|
+192.0.1.199 example.org
|
||||||
|
+192.0.1.200 example.org
|
||||||
|
+192.0.1.201 example.org
|
||||||
|
+192.0.1.202 example.org
|
||||||
|
+192.0.1.203 example.org
|
||||||
|
+192.0.1.204 example.org
|
||||||
|
+192.0.1.205 example.org
|
||||||
|
+192.0.1.206 example.org
|
||||||
|
+192.0.1.207 example.org
|
||||||
|
+192.0.1.208 example.org
|
||||||
|
+192.0.1.209 example.org
|
||||||
|
+192.0.1.210 example.org
|
||||||
|
+192.0.1.211 example.org
|
||||||
|
+192.0.1.212 example.org
|
||||||
|
+192.0.1.213 example.org
|
||||||
|
+192.0.1.214 example.org
|
||||||
|
+192.0.1.215 example.org
|
||||||
|
+192.0.1.216 example.org
|
||||||
|
+192.0.1.217 example.org
|
||||||
|
+192.0.1.218 example.org
|
||||||
|
+192.0.1.219 example.org
|
||||||
|
+192.0.1.220 example.org
|
||||||
|
+192.0.1.221 example.org
|
||||||
|
+192.0.1.222 example.org
|
||||||
|
+192.0.1.223 example.org
|
||||||
|
+192.0.1.224 example.org
|
||||||
|
+192.0.1.225 example.org
|
||||||
|
+192.0.1.226 example.org
|
||||||
|
+192.0.1.227 example.org
|
||||||
|
+192.0.1.228 example.org
|
||||||
|
+192.0.1.229 example.org
|
||||||
|
+192.0.1.230 example.org
|
||||||
|
+192.0.1.231 example.org
|
||||||
|
+192.0.1.232 example.org
|
||||||
|
+192.0.1.233 example.org
|
||||||
|
+192.0.1.234 example.org
|
||||||
|
+192.0.1.235 example.org
|
||||||
|
+192.0.1.236 example.org
|
||||||
|
+192.0.1.237 example.org
|
||||||
|
+192.0.1.238 example.org
|
||||||
|
+192.0.1.239 example.org
|
||||||
|
+192.0.1.240 example.org
|
||||||
|
+192.0.1.241 example.org
|
||||||
|
+192.0.1.242 example.org
|
||||||
|
+192.0.1.243 example.org
|
||||||
|
+192.0.1.244 example.org
|
||||||
|
+192.0.1.245 example.org
|
||||||
|
+192.0.1.246 example.org
|
||||||
|
+192.0.1.247 example.org
|
||||||
|
+192.0.1.248 example.org
|
||||||
|
+192.0.1.249 example.org
|
||||||
|
+192.0.1.250 example.org
|
||||||
|
+192.0.1.251 example.org
|
||||||
|
+192.0.1.252 example.org
|
||||||
|
+192.0.1.253 example.org
|
||||||
|
+192.0.1.254 example.org
|
||||||
|
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
|
||||||
|
index fae3dea81f19dba6..4fa963644af8b7d5 100644
|
||||||
|
--- a/sysdeps/posix/getaddrinfo.c
|
||||||
|
+++ b/sysdeps/posix/getaddrinfo.c
|
||||||
|
@@ -474,11 +474,6 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
|
||||||
|
if (name != NULL)
|
||||||
|
{
|
||||||
|
- at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used);
|
||||||
|
- at->family = AF_UNSPEC;
|
||||||
|
- at->scopeid = 0;
|
||||||
|
- at->next = NULL;
|
||||||
|
-
|
||||||
|
if (req->ai_flags & AI_IDN)
|
||||||
|
{
|
||||||
|
char *out;
|
||||||
|
@@ -489,13 +484,21 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
malloc_name = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (__inet_aton_exact (name, (struct in_addr *) at->addr) != 0)
|
||||||
|
+ uint32_t addr[4];
|
||||||
|
+ if (__inet_aton_exact (name, (struct in_addr *) addr) != 0)
|
||||||
|
{
|
||||||
|
+ at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used);
|
||||||
|
+ at->scopeid = 0;
|
||||||
|
+ at->next = NULL;
|
||||||
|
+
|
||||||
|
if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET)
|
||||||
|
- at->family = AF_INET;
|
||||||
|
+ {
|
||||||
|
+ memcpy (at->addr, addr, sizeof (at->addr));
|
||||||
|
+ at->family = AF_INET;
|
||||||
|
+ }
|
||||||
|
else if (req->ai_family == AF_INET6 && (req->ai_flags & AI_V4MAPPED))
|
||||||
|
{
|
||||||
|
- at->addr[3] = at->addr[0];
|
||||||
|
+ at->addr[3] = addr[0];
|
||||||
|
at->addr[2] = htonl (0xffff);
|
||||||
|
at->addr[1] = 0;
|
||||||
|
at->addr[0] = 0;
|
||||||
|
@@ -509,49 +512,62 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
|
||||||
|
if (req->ai_flags & AI_CANONNAME)
|
||||||
|
canon = name;
|
||||||
|
+
|
||||||
|
+ goto process_list;
|
||||||
|
}
|
||||||
|
- else if (at->family == AF_UNSPEC)
|
||||||
|
+
|
||||||
|
+ char *scope_delim = strchr (name, SCOPE_DELIMITER);
|
||||||
|
+ int e;
|
||||||
|
+
|
||||||
|
+ if (scope_delim == NULL)
|
||||||
|
+ e = inet_pton (AF_INET6, name, addr);
|
||||||
|
+ else
|
||||||
|
+ e = __inet_pton_length (AF_INET6, name, scope_delim - name, addr);
|
||||||
|
+
|
||||||
|
+ if (e > 0)
|
||||||
|
{
|
||||||
|
- char *scope_delim = strchr (name, SCOPE_DELIMITER);
|
||||||
|
- int e;
|
||||||
|
- if (scope_delim == NULL)
|
||||||
|
- e = inet_pton (AF_INET6, name, at->addr);
|
||||||
|
+ at = alloca_account (sizeof (struct gaih_addrtuple),
|
||||||
|
+ alloca_used);
|
||||||
|
+ at->scopeid = 0;
|
||||||
|
+ at->next = NULL;
|
||||||
|
+
|
||||||
|
+ if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET6)
|
||||||
|
+ {
|
||||||
|
+ memcpy (at->addr, addr, sizeof (at->addr));
|
||||||
|
+ at->family = AF_INET6;
|
||||||
|
+ }
|
||||||
|
+ else if (req->ai_family == AF_INET
|
||||||
|
+ && IN6_IS_ADDR_V4MAPPED (addr))
|
||||||
|
+ {
|
||||||
|
+ at->addr[0] = addr[3];
|
||||||
|
+ at->addr[1] = addr[1];
|
||||||
|
+ at->addr[2] = addr[2];
|
||||||
|
+ at->addr[3] = addr[3];
|
||||||
|
+ at->family = AF_INET;
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
- e = __inet_pton_length (AF_INET6, name, scope_delim - name,
|
||||||
|
- at->addr);
|
||||||
|
- if (e > 0)
|
||||||
|
{
|
||||||
|
- if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET6)
|
||||||
|
- at->family = AF_INET6;
|
||||||
|
- else if (req->ai_family == AF_INET
|
||||||
|
- && IN6_IS_ADDR_V4MAPPED (at->addr))
|
||||||
|
- {
|
||||||
|
- at->addr[0] = at->addr[3];
|
||||||
|
- at->family = AF_INET;
|
||||||
|
- }
|
||||||
|
- else
|
||||||
|
- {
|
||||||
|
- result = -EAI_ADDRFAMILY;
|
||||||
|
- goto free_and_return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (scope_delim != NULL
|
||||||
|
- && __inet6_scopeid_pton ((struct in6_addr *) at->addr,
|
||||||
|
- scope_delim + 1,
|
||||||
|
- &at->scopeid) != 0)
|
||||||
|
- {
|
||||||
|
- result = -EAI_NONAME;
|
||||||
|
- goto free_and_return;
|
||||||
|
- }
|
||||||
|
+ result = -EAI_ADDRFAMILY;
|
||||||
|
+ goto free_and_return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if (req->ai_flags & AI_CANONNAME)
|
||||||
|
- canon = name;
|
||||||
|
+ if (scope_delim != NULL
|
||||||
|
+ && __inet6_scopeid_pton ((struct in6_addr *) at->addr,
|
||||||
|
+ scope_delim + 1,
|
||||||
|
+ &at->scopeid) != 0)
|
||||||
|
+ {
|
||||||
|
+ result = -EAI_NONAME;
|
||||||
|
+ goto free_and_return;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (req->ai_flags & AI_CANONNAME)
|
||||||
|
+ canon = name;
|
||||||
|
+
|
||||||
|
+ goto process_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (at->family == AF_UNSPEC && (req->ai_flags & AI_NUMERICHOST) == 0)
|
||||||
|
+ if ((req->ai_flags & AI_NUMERICHOST) == 0)
|
||||||
|
{
|
||||||
|
- struct gaih_addrtuple **pat = &at;
|
||||||
|
int no_data = 0;
|
||||||
|
int no_inet6_data = 0;
|
||||||
|
service_user *nip;
|
||||||
|
@@ -560,6 +576,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
int no_more;
|
||||||
|
struct resolv_context *res_ctx = NULL;
|
||||||
|
bool res_enable_inet6 = false;
|
||||||
|
+ bool do_merge = false;
|
||||||
|
|
||||||
|
/* If we do not have to look for IPv6 addresses or the canonical
|
||||||
|
name, use the simple, old functions, which do not support
|
||||||
|
@@ -596,7 +613,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
result = -EAI_MEMORY;
|
||||||
|
goto free_and_return;
|
||||||
|
}
|
||||||
|
- *pat = addrmem;
|
||||||
|
+ at = addrmem;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -649,6 +666,8 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct gaih_addrtuple *addrfree = addrmem;
|
||||||
|
+ struct gaih_addrtuple **pat = &at;
|
||||||
|
+
|
||||||
|
for (int i = 0; i < air->naddrs; ++i)
|
||||||
|
{
|
||||||
|
socklen_t size = (air->family[i] == AF_INET
|
||||||
|
@@ -712,12 +731,6 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
|
||||||
|
free (air);
|
||||||
|
|
||||||
|
- if (at->family == AF_UNSPEC)
|
||||||
|
- {
|
||||||
|
- result = -EAI_NONAME;
|
||||||
|
- goto free_and_return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
goto process_list;
|
||||||
|
}
|
||||||
|
else if (err == 0)
|
||||||
|
@@ -756,6 +769,22 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
|
||||||
|
while (!no_more)
|
||||||
|
{
|
||||||
|
+ /* Always start afresh; continue should discard previous results
|
||||||
|
+ and the hosts database does not support merge. */
|
||||||
|
+ at = NULL;
|
||||||
|
+ free (canonbuf);
|
||||||
|
+ free (addrmem);
|
||||||
|
+ canon = canonbuf = NULL;
|
||||||
|
+ addrmem = NULL;
|
||||||
|
+ got_ipv6 = false;
|
||||||
|
+
|
||||||
|
+ if (do_merge)
|
||||||
|
+ {
|
||||||
|
+ __set_h_errno (NETDB_INTERNAL);
|
||||||
|
+ __set_errno (EBUSY);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
no_data = 0;
|
||||||
|
nss_gethostbyname4_r fct4 = NULL;
|
||||||
|
|
||||||
|
@@ -768,12 +797,14 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
{
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
- status = DL_CALL_FCT (fct4, (name, pat,
|
||||||
|
+ status = DL_CALL_FCT (fct4, (name, &at,
|
||||||
|
tmpbuf->data, tmpbuf->length,
|
||||||
|
&errno, &h_errno,
|
||||||
|
NULL));
|
||||||
|
if (status == NSS_STATUS_SUCCESS)
|
||||||
|
break;
|
||||||
|
+ /* gethostbyname4_r may write into AT, so reset it. */
|
||||||
|
+ at = NULL;
|
||||||
|
if (status != NSS_STATUS_TRYAGAIN
|
||||||
|
|| errno != ERANGE || h_errno != NETDB_INTERNAL)
|
||||||
|
{
|
||||||
|
@@ -800,7 +831,9 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
no_data = 1;
|
||||||
|
|
||||||
|
if ((req->ai_flags & AI_CANONNAME) != 0 && canon == NULL)
|
||||||
|
- canon = (*pat)->name;
|
||||||
|
+ canon = at->name;
|
||||||
|
+
|
||||||
|
+ struct gaih_addrtuple **pat = &at;
|
||||||
|
|
||||||
|
while (*pat != NULL)
|
||||||
|
{
|
||||||
|
@@ -852,6 +885,8 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
|
||||||
|
if (fct != NULL)
|
||||||
|
{
|
||||||
|
+ struct gaih_addrtuple **pat = &at;
|
||||||
|
+
|
||||||
|
if (req->ai_family == AF_INET6
|
||||||
|
|| req->ai_family == AF_UNSPEC)
|
||||||
|
{
|
||||||
|
@@ -927,6 +962,10 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
if (nss_next_action (nip, status) == NSS_ACTION_RETURN)
|
||||||
|
break;
|
||||||
|
|
||||||
|
+ /* The hosts database does not support MERGE. */
|
||||||
|
+ if (nss_next_action (nip, status) == NSS_ACTION_MERGE)
|
||||||
|
+ do_merge = true;
|
||||||
|
+
|
||||||
|
if (nip->next == NULL)
|
||||||
|
no_more = -1;
|
||||||
|
else
|
||||||
|
@@ -960,7 +999,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
|
||||||
|
}
|
||||||
|
|
||||||
|
process_list:
|
||||||
|
- if (at->family == AF_UNSPEC)
|
||||||
|
+ if (at == NULL)
|
||||||
|
{
|
||||||
|
result = -EAI_NONAME;
|
||||||
|
goto free_and_return;
|
157
glibc-RHEL-3035.patch
Normal file
157
glibc-RHEL-3035.patch
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
This patch was developed under embargo and cannot reference an upstream
|
||||||
|
commit. To find the associated commit please review the upstream git
|
||||||
|
log for CVE-2023-4911 to identify the relevant commits.
|
||||||
|
|
||||||
|
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||||
|
Date: Tue Sep 19 18:39:32 2023 -0400
|
||||||
|
|
||||||
|
tunables: Terminate if end of input is reached (CVE-2023-4911)
|
||||||
|
|
||||||
|
The string parsing routine may end up writing beyond bounds of tunestr
|
||||||
|
if the input tunable string is malformed, of the form name=name=val.
|
||||||
|
This gets processed twice, first as name=name=val and next as name=val,
|
||||||
|
resulting in tunestr being name=name=val:name=val, thus overflowing
|
||||||
|
tunestr.
|
||||||
|
|
||||||
|
Terminate the parsing loop at the first instance itself so that tunestr
|
||||||
|
does not overflow.
|
||||||
|
|
||||||
|
This also fixes up tst-env-setuid-tunables to actually handle failures
|
||||||
|
correct and add new tests to validate the fix for this CVE.
|
||||||
|
|
||||||
|
Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||||
|
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
NEWS
|
||||||
|
(Dropped)
|
||||||
|
elf/tst-env-setuid-tunables.c
|
||||||
|
(Trivial conflict at HAVE_TUNABLES)
|
||||||
|
|
||||||
|
diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c
|
||||||
|
index 3c84809d44381241..2c878e08ea197b29 100644
|
||||||
|
--- a/elf/dl-tunables.c
|
||||||
|
+++ b/elf/dl-tunables.c
|
||||||
|
@@ -193,11 +193,7 @@ parse_tunables (char *tunestr, char *valstring)
|
||||||
|
/* If we reach the end of the string before getting a valid name-value
|
||||||
|
pair, bail out. */
|
||||||
|
if (p[len] == '\0')
|
||||||
|
- {
|
||||||
|
- if (__libc_enable_secure)
|
||||||
|
- tunestr[off] = '\0';
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
+ break;
|
||||||
|
|
||||||
|
/* We did not find a valid name-value pair before encountering the
|
||||||
|
colon. */
|
||||||
|
@@ -257,9 +253,16 @@ parse_tunables (char *tunestr, char *valstring)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (p[len] != '\0')
|
||||||
|
- p += len + 1;
|
||||||
|
+ /* We reached the end while processing the tunable string. */
|
||||||
|
+ if (p[len] == '\0')
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ p += len + 1;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ /* Terminate tunestr before we leave. */
|
||||||
|
+ if (__libc_enable_secure)
|
||||||
|
+ tunestr[off] = '\0';
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
diff --git a/elf/tst-env-setuid-tunables.c b/elf/tst-env-setuid-tunables.c
|
||||||
|
index 0b9b075c40598c6f..8b0861c4ad853040 100644
|
||||||
|
--- a/elf/tst-env-setuid-tunables.c
|
||||||
|
+++ b/elf/tst-env-setuid-tunables.c
|
||||||
|
@@ -52,6 +52,8 @@ const char *teststrings[] =
|
||||||
|
"glibc.malloc.perturb=0x800:not_valid.malloc.check=2:glibc.malloc.mmap_threshold=4096",
|
||||||
|
"glibc.not_valid.check=2:glibc.malloc.mmap_threshold=4096",
|
||||||
|
"not_valid.malloc.check=2:glibc.malloc.mmap_threshold=4096",
|
||||||
|
+ "glibc.malloc.mmap_threshold=glibc.malloc.mmap_threshold=4096",
|
||||||
|
+ "glibc.malloc.check=2",
|
||||||
|
"glibc.malloc.garbage=2:glibc.maoc.mmap_threshold=4096:glibc.malloc.check=2",
|
||||||
|
"glibc.malloc.check=4:glibc.malloc.garbage=2:glibc.maoc.mmap_threshold=4096",
|
||||||
|
":glibc.malloc.garbage=2:glibc.malloc.check=1",
|
||||||
|
@@ -70,6 +72,8 @@ const char *resultstrings[] =
|
||||||
|
"glibc.malloc.perturb=0x800:glibc.malloc.mmap_threshold=4096",
|
||||||
|
"glibc.malloc.mmap_threshold=4096",
|
||||||
|
"glibc.malloc.mmap_threshold=4096",
|
||||||
|
+ "glibc.malloc.mmap_threshold=glibc.malloc.mmap_threshold=4096",
|
||||||
|
+ "",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
@@ -84,11 +88,18 @@ test_child (int off)
|
||||||
|
const char *val = getenv ("GLIBC_TUNABLES");
|
||||||
|
|
||||||
|
#if HAVE_TUNABLES
|
||||||
|
+ printf (" [%d] GLIBC_TUNABLES is %s\n", off, val);
|
||||||
|
+ fflush (stdout);
|
||||||
|
if (val != NULL && strcmp (val, resultstrings[off]) == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (val != NULL)
|
||||||
|
- printf ("[%d] Unexpected GLIBC_TUNABLES VALUE %s\n", off, val);
|
||||||
|
+ printf (" [%d] Unexpected GLIBC_TUNABLES VALUE %s, expected %s\n",
|
||||||
|
+ off, val, resultstrings[off]);
|
||||||
|
+ else
|
||||||
|
+ printf (" [%d] GLIBC_TUNABLES environment variable absent\n", off);
|
||||||
|
+
|
||||||
|
+ fflush (stdout);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
@@ -117,21 +128,26 @@ do_test (int argc, char **argv)
|
||||||
|
if (ret != 0)
|
||||||
|
exit (1);
|
||||||
|
|
||||||
|
- exit (EXIT_SUCCESS);
|
||||||
|
+ /* Special return code to make sure that the child executed all the way
|
||||||
|
+ through. */
|
||||||
|
+ exit (42);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
- int ret = 0;
|
||||||
|
-
|
||||||
|
/* Spawn tests. */
|
||||||
|
for (int i = 0; i < array_length (teststrings); i++)
|
||||||
|
{
|
||||||
|
char buf[INT_BUFSIZE_BOUND (int)];
|
||||||
|
|
||||||
|
- printf ("Spawned test for %s (%d)\n", teststrings[i], i);
|
||||||
|
+ printf ("[%d] Spawned test for %s\n", i, teststrings[i]);
|
||||||
|
snprintf (buf, sizeof (buf), "%d\n", i);
|
||||||
|
+ fflush (stdout);
|
||||||
|
if (setenv ("GLIBC_TUNABLES", teststrings[i], 1) != 0)
|
||||||
|
- exit (1);
|
||||||
|
+ {
|
||||||
|
+ printf (" [%d] Failed to set GLIBC_TUNABLES: %m", i);
|
||||||
|
+ support_record_failure ();
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
int status = support_capture_subprogram_self_sgid (buf);
|
||||||
|
|
||||||
|
@@ -139,9 +155,14 @@ do_test (int argc, char **argv)
|
||||||
|
if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)
|
||||||
|
return EXIT_UNSUPPORTED;
|
||||||
|
|
||||||
|
- ret |= status;
|
||||||
|
+ if (WEXITSTATUS (status) != 42)
|
||||||
|
+ {
|
||||||
|
+ printf (" [%d] child failed with status %d\n", i,
|
||||||
|
+ WEXITSTATUS (status));
|
||||||
|
+ support_record_failure ();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
- return ret;
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,171 +0,0 @@
|
||||||
From 2e86602d21fcaa8353c529f2f6768125396da39f Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Wed, 19 Jul 2023 23:12:30 +0800
|
|
||||||
Subject: [PATCH 5/6] 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.27.0
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,36 +0,0 @@
|
||||||
From bf126f79dff0370d1e52ef8193da7fd593c37833 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Wed, 19 Jul 2023 23:10:48 +0800
|
|
||||||
Subject: [PATCH 4/6] 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.27.0
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
From 8b39d3b4bf2fc49ab31f31cf30aa80104afa3432 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
|
||||||
Date: Wed, 19 Jul 2023 23:14:33 +0800
|
|
||||||
Subject: [PATCH 6/6] 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 87a8ff81..731dd59f 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>
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
|
@ -1,137 +0,0 @@
|
||||||
From fe5893121176136b0ae3a5f9198536feeb6f64f8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rongwei Wang <rongwei.wang@linux.alibaba.com>
|
|
||||||
Date: Wed, 19 Jul 2023 23:05:39 +0800
|
|
||||||
Subject: [PATCH 2/6] 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 0b45e6e3..132e4233 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
|
|
||||||
@@ -1076,6 +1077,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.27.0
|
|
||||||
|
|
|
@ -1,797 +0,0 @@
|
||||||
diff --git a/iconvdata/gb18030.c b/iconvdata/gb18030.c
|
|
||||||
index 0b03b9bb..ca383dc0 100644
|
|
||||||
--- a/iconvdata/gb18030.c
|
|
||||||
+++ b/iconvdata/gb18030.c
|
|
||||||
@@ -6020,49 +6020,50 @@ static const uint16_t __twobyte_to_ucs[] =
|
|
||||||
[0x5dc2] = 0xfa0e, [0x5dc3] = 0xfa0f, [0x5dc4] = 0xfa11, [0x5dc5] = 0xfa13,
|
|
||||||
[0x5dc6] = 0xfa14, [0x5dc7] = 0xfa18, [0x5dc8] = 0xfa1f, [0x5dc9] = 0xfa20,
|
|
||||||
[0x5dca] = 0xfa21, [0x5dcb] = 0xfa23, [0x5dcc] = 0xfa24, [0x5dcd] = 0xfa27,
|
|
||||||
- [0x5dce] = 0xfa28, [0x5dcf] = 0xfa29, [0x5dd0] = 0x2e81, [0x5dd4] = 0x2e84,
|
|
||||||
- [0x5dd5] = 0x3473, [0x5dd6] = 0x3447, [0x5dd7] = 0x2e88, [0x5dd8] = 0x2e8b,
|
|
||||||
- [0x5dd9] = 0x9fb4, [0x5dda] = 0x359e, [0x5ddb] = 0x361a, [0x5ddc] = 0x360e,
|
|
||||||
- [0x5ddd] = 0x2e8c, [0x5dde] = 0x2e97, [0x5ddf] = 0x396e, [0x5de0] = 0x3918,
|
|
||||||
- [0x5de1] = 0x9fb5, [0x5de2] = 0x39cf, [0x5de3] = 0x39df, [0x5de4] = 0x3a73,
|
|
||||||
- [0x5de5] = 0x39d0, [0x5de6] = 0x9fb6, [0x5de7] = 0x9fb7, [0x5de8] = 0x3b4e,
|
|
||||||
- [0x5de9] = 0x3c6e, [0x5dea] = 0x3ce0, [0x5deb] = 0x2ea7, [0x5ded] = 0x9fb8,
|
|
||||||
+ [0x5dce] = 0xfa28, [0x5dcf] = 0xfa29, [0x5dd0] = 0x2e81, [0x5dd1] = 0xe816,
|
|
||||||
+ [0x5dd2] = 0xe817, [0x5dd3] = 0xe818, [0x5dd4] = 0x2e84, [0x5dd5] = 0x3473,
|
|
||||||
+ [0x5dd6] = 0x3447, [0x5dd7] = 0x2e88, [0x5dd8] = 0x2e8b, [0x5dd9] = 0x9fb4,
|
|
||||||
+ [0x5dda] = 0x359e, [0x5ddb] = 0x361a, [0x5ddc] = 0x360e, [0x5ddd] = 0x2e8c,
|
|
||||||
+ [0x5dde] = 0x2e97, [0x5ddf] = 0x396e, [0x5de0] = 0x3918, [0x5de1] = 0x9fb5,
|
|
||||||
+ [0x5de2] = 0x39cf, [0x5de3] = 0x39df, [0x5de4] = 0x3a73, [0x5de5] = 0x39d0,
|
|
||||||
+ [0x5de6] = 0x9fb6, [0x5de7] = 0x9fb7, [0x5de8] = 0x3b4e, [0x5de9] = 0x3c6e,
|
|
||||||
+ [0x5dea] = 0x3ce0, [0x5deb] = 0x2ea7, [0x5dec] = 0xe831, [0x5ded] = 0x9fb8,
|
|
||||||
[0x5dee] = 0x2eaa, [0x5def] = 0x4056, [0x5df0] = 0x415f, [0x5df1] = 0x2eae,
|
|
||||||
[0x5df2] = 0x4337, [0x5df3] = 0x2eb3, [0x5df4] = 0x2eb6, [0x5df5] = 0x2eb7,
|
|
||||||
- [0x5df7] = 0x43b1, [0x5df8] = 0x43ac, [0x5df9] = 0x2ebb, [0x5dfa] = 0x43dd,
|
|
||||||
- [0x5dfb] = 0x44d6, [0x5dfc] = 0x4661, [0x5dfd] = 0x464c, [0x5dfe] = 0x9fb9,
|
|
||||||
- [0x5e00] = 0x4723, [0x5e01] = 0x4729, [0x5e02] = 0x477c, [0x5e03] = 0x478d,
|
|
||||||
- [0x5e04] = 0x2eca, [0x5e05] = 0x4947, [0x5e06] = 0x497a, [0x5e07] = 0x497d,
|
|
||||||
- [0x5e08] = 0x4982, [0x5e09] = 0x4983, [0x5e0a] = 0x4985, [0x5e0b] = 0x4986,
|
|
||||||
- [0x5e0c] = 0x499f, [0x5e0d] = 0x499b, [0x5e0e] = 0x49b7, [0x5e0f] = 0x49b6,
|
|
||||||
- [0x5e10] = 0x9fba, [0x5e12] = 0x4ca3, [0x5e13] = 0x4c9f, [0x5e14] = 0x4ca0,
|
|
||||||
- [0x5e15] = 0x4ca1, [0x5e16] = 0x4c77, [0x5e17] = 0x4ca2, [0x5e18] = 0x4d13,
|
|
||||||
- [0x5e19] = 0x4d14, [0x5e1a] = 0x4d15, [0x5e1b] = 0x4d16, [0x5e1c] = 0x4d17,
|
|
||||||
- [0x5e1d] = 0x4d18, [0x5e1e] = 0x4d19, [0x5e1f] = 0x4dae, [0x5e20] = 0x9fbb,
|
|
||||||
- [0x5e21] = 0xe468, [0x5e22] = 0xe469, [0x5e23] = 0xe46a, [0x5e24] = 0xe46b,
|
|
||||||
- [0x5e25] = 0xe46c, [0x5e26] = 0xe46d, [0x5e27] = 0xe46e, [0x5e28] = 0xe46f,
|
|
||||||
- [0x5e29] = 0xe470, [0x5e2a] = 0xe471, [0x5e2b] = 0xe472, [0x5e2c] = 0xe473,
|
|
||||||
- [0x5e2d] = 0xe474, [0x5e2e] = 0xe475, [0x5e2f] = 0xe476, [0x5e30] = 0xe477,
|
|
||||||
- [0x5e31] = 0xe478, [0x5e32] = 0xe479, [0x5e33] = 0xe47a, [0x5e34] = 0xe47b,
|
|
||||||
- [0x5e35] = 0xe47c, [0x5e36] = 0xe47d, [0x5e37] = 0xe47e, [0x5e38] = 0xe47f,
|
|
||||||
- [0x5e39] = 0xe480, [0x5e3a] = 0xe481, [0x5e3b] = 0xe482, [0x5e3c] = 0xe483,
|
|
||||||
- [0x5e3d] = 0xe484, [0x5e3e] = 0xe485, [0x5e3f] = 0xe486, [0x5e40] = 0xe487,
|
|
||||||
- [0x5e41] = 0xe488, [0x5e42] = 0xe489, [0x5e43] = 0xe48a, [0x5e44] = 0xe48b,
|
|
||||||
- [0x5e45] = 0xe48c, [0x5e46] = 0xe48d, [0x5e47] = 0xe48e, [0x5e48] = 0xe48f,
|
|
||||||
- [0x5e49] = 0xe490, [0x5e4a] = 0xe491, [0x5e4b] = 0xe492, [0x5e4c] = 0xe493,
|
|
||||||
- [0x5e4d] = 0xe494, [0x5e4e] = 0xe495, [0x5e4f] = 0xe496, [0x5e50] = 0xe497,
|
|
||||||
- [0x5e51] = 0xe498, [0x5e52] = 0xe499, [0x5e53] = 0xe49a, [0x5e54] = 0xe49b,
|
|
||||||
- [0x5e55] = 0xe49c, [0x5e56] = 0xe49d, [0x5e57] = 0xe49e, [0x5e58] = 0xe49f,
|
|
||||||
- [0x5e59] = 0xe4a0, [0x5e5a] = 0xe4a1, [0x5e5b] = 0xe4a2, [0x5e5c] = 0xe4a3,
|
|
||||||
- [0x5e5d] = 0xe4a4, [0x5e5e] = 0xe4a5, [0x5e5f] = 0xe4a6, [0x5e60] = 0xe4a7,
|
|
||||||
- [0x5e61] = 0xe4a8, [0x5e62] = 0xe4a9, [0x5e63] = 0xe4aa, [0x5e64] = 0xe4ab,
|
|
||||||
- [0x5e65] = 0xe4ac, [0x5e66] = 0xe4ad, [0x5e67] = 0xe4ae, [0x5e68] = 0xe4af,
|
|
||||||
- [0x5e69] = 0xe4b0, [0x5e6a] = 0xe4b1, [0x5e6b] = 0xe4b2, [0x5e6c] = 0xe4b3,
|
|
||||||
- [0x5e6d] = 0xe4b4, [0x5e6e] = 0xe4b5, [0x5e6f] = 0xe4b6, [0x5e70] = 0xe4b7,
|
|
||||||
- [0x5e71] = 0xe4b8, [0x5e72] = 0xe4b9, [0x5e73] = 0xe4ba, [0x5e74] = 0xe4bb,
|
|
||||||
- [0x5e75] = 0xe4bc, [0x5e76] = 0xe4bd, [0x5e77] = 0xe4be, [0x5e78] = 0xe4bf,
|
|
||||||
- [0x5e79] = 0xe4c0, [0x5e7a] = 0xe4c1, [0x5e7b] = 0xe4c2, [0x5e7c] = 0xe4c3,
|
|
||||||
- [0x5e7d] = 0xe4c4, [0x5e7e] = 0xe4c5,
|
|
||||||
+ [0x5df6] = 0xe83b, [0x5df7] = 0x43b1, [0x5df8] = 0x43ac, [0x5df9] = 0x2ebb,
|
|
||||||
+ [0x5dfa] = 0x43dd, [0x5dfb] = 0x44d6, [0x5dfc] = 0x4661, [0x5dfd] = 0x464c,
|
|
||||||
+ [0x5dfe] = 0x9fb9, [0x5e00] = 0x4723, [0x5e01] = 0x4729, [0x5e02] = 0x477c,
|
|
||||||
+ [0x5e03] = 0x478d, [0x5e04] = 0x2eca, [0x5e05] = 0x4947, [0x5e06] = 0x497a,
|
|
||||||
+ [0x5e07] = 0x497d, [0x5e08] = 0x4982, [0x5e09] = 0x4983, [0x5e0a] = 0x4985,
|
|
||||||
+ [0x5e0b] = 0x4986, [0x5e0c] = 0x499f, [0x5e0d] = 0x499b, [0x5e0e] = 0x49b7,
|
|
||||||
+ [0x5e0f] = 0x49b6, [0x5e10] = 0x9fba, [0x5e11] = 0xe855, [0x5e12] = 0x4ca3,
|
|
||||||
+ [0x5e13] = 0x4c9f, [0x5e14] = 0x4ca0, [0x5e15] = 0x4ca1, [0x5e16] = 0x4c77,
|
|
||||||
+ [0x5e17] = 0x4ca2, [0x5e18] = 0x4d13, [0x5e19] = 0x4d14, [0x5e1a] = 0x4d15,
|
|
||||||
+ [0x5e1b] = 0x4d16, [0x5e1c] = 0x4d17, [0x5e1d] = 0x4d18, [0x5e1e] = 0x4d19,
|
|
||||||
+ [0x5e1f] = 0x4dae, [0x5e20] = 0x9fbb, [0x5e21] = 0xe468, [0x5e22] = 0xe469,
|
|
||||||
+ [0x5e23] = 0xe46a, [0x5e24] = 0xe46b, [0x5e25] = 0xe46c, [0x5e26] = 0xe46d,
|
|
||||||
+ [0x5e27] = 0xe46e, [0x5e28] = 0xe46f, [0x5e29] = 0xe470, [0x5e2a] = 0xe471,
|
|
||||||
+ [0x5e2b] = 0xe472, [0x5e2c] = 0xe473, [0x5e2d] = 0xe474, [0x5e2e] = 0xe475,
|
|
||||||
+ [0x5e2f] = 0xe476, [0x5e30] = 0xe477, [0x5e31] = 0xe478, [0x5e32] = 0xe479,
|
|
||||||
+ [0x5e33] = 0xe47a, [0x5e34] = 0xe47b, [0x5e35] = 0xe47c, [0x5e36] = 0xe47d,
|
|
||||||
+ [0x5e37] = 0xe47e, [0x5e38] = 0xe47f, [0x5e39] = 0xe480, [0x5e3a] = 0xe481,
|
|
||||||
+ [0x5e3b] = 0xe482, [0x5e3c] = 0xe483, [0x5e3d] = 0xe484, [0x5e3e] = 0xe485,
|
|
||||||
+ [0x5e3f] = 0xe486, [0x5e40] = 0xe487, [0x5e41] = 0xe488, [0x5e42] = 0xe489,
|
|
||||||
+ [0x5e43] = 0xe48a, [0x5e44] = 0xe48b, [0x5e45] = 0xe48c, [0x5e46] = 0xe48d,
|
|
||||||
+ [0x5e47] = 0xe48e, [0x5e48] = 0xe48f, [0x5e49] = 0xe490, [0x5e4a] = 0xe491,
|
|
||||||
+ [0x5e4b] = 0xe492, [0x5e4c] = 0xe493, [0x5e4d] = 0xe494, [0x5e4e] = 0xe495,
|
|
||||||
+ [0x5e4f] = 0xe496, [0x5e50] = 0xe497, [0x5e51] = 0xe498, [0x5e52] = 0xe499,
|
|
||||||
+ [0x5e53] = 0xe49a, [0x5e54] = 0xe49b, [0x5e55] = 0xe49c, [0x5e56] = 0xe49d,
|
|
||||||
+ [0x5e57] = 0xe49e, [0x5e58] = 0xe49f, [0x5e59] = 0xe4a0, [0x5e5a] = 0xe4a1,
|
|
||||||
+ [0x5e5b] = 0xe4a2, [0x5e5c] = 0xe4a3, [0x5e5d] = 0xe4a4, [0x5e5e] = 0xe4a5,
|
|
||||||
+ [0x5e5f] = 0xe4a6, [0x5e60] = 0xe4a7, [0x5e61] = 0xe4a8, [0x5e62] = 0xe4a9,
|
|
||||||
+ [0x5e63] = 0xe4aa, [0x5e64] = 0xe4ab, [0x5e65] = 0xe4ac, [0x5e66] = 0xe4ad,
|
|
||||||
+ [0x5e67] = 0xe4ae, [0x5e68] = 0xe4af, [0x5e69] = 0xe4b0, [0x5e6a] = 0xe4b1,
|
|
||||||
+ [0x5e6b] = 0xe4b2, [0x5e6c] = 0xe4b3, [0x5e6d] = 0xe4b4, [0x5e6e] = 0xe4b5,
|
|
||||||
+ [0x5e6f] = 0xe4b6, [0x5e70] = 0xe4b7, [0x5e71] = 0xe4b8, [0x5e72] = 0xe4b9,
|
|
||||||
+ [0x5e73] = 0xe4ba, [0x5e74] = 0xe4bb, [0x5e75] = 0xe4bc, [0x5e76] = 0xe4bd,
|
|
||||||
+ [0x5e77] = 0xe4be, [0x5e78] = 0xe4bf, [0x5e79] = 0xe4c0, [0x5e7a] = 0xe4c1,
|
|
||||||
+ [0x5e7b] = 0xe4c2, [0x5e7c] = 0xe4c3, [0x5e7d] = 0xe4c4, [0x5e7e] = 0xe4c5,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Table for GB18030 -> UCS-4, containing the four-byte characters only,
|
|
||||||
@@ -8691,7 +8692,9 @@ static const uint16_t __fourbyte_to_ucs[0x99e2 - 6637 - 2110 - 14404 - 4295] =
|
|
||||||
[0x2838] = 0x9fa6, [0x2839] = 0x9fa7, [0x283a] = 0x9fa8, [0x283b] = 0x9fa9,
|
|
||||||
[0x283c] = 0x9faa, [0x283d] = 0x9fab, [0x283e] = 0x9fac, [0x283f] = 0x9fad,
|
|
||||||
[0x2840] = 0x9fae, [0x2841] = 0x9faf, [0x2842] = 0x9fb0, [0x2843] = 0x9fb1,
|
|
||||||
- [0x2844] = 0x9fb2, [0x2845] = 0x9fb3, [0x284e] = 0xe76c, [0x284f] = 0xe7c8,
|
|
||||||
+ [0x2844] = 0x9fb2, [0x2845] = 0x9fb3, [0x2846] = 0xe81e, [0x2847] = 0xe826,
|
|
||||||
+ [0x2848] = 0xe82b, [0x2849] = 0xe82c, [0x284a] = 0xe832, [0x284b] = 0xe843,
|
|
||||||
+ [0x284c] = 0xe854, [0x284d] = 0xe864, [0x284e] = 0xe76c, [0x284f] = 0xe7c8,
|
|
||||||
[0x2850] = 0xe7e7, [0x2851] = 0xe7e8, [0x2852] = 0xe7e9, [0x2853] = 0xe7ea,
|
|
||||||
[0x2854] = 0xe7eb, [0x2855] = 0xe7ec, [0x2856] = 0xe7ed, [0x2857] = 0xe7ee,
|
|
||||||
[0x2858] = 0xe7ef, [0x2859] = 0xe7f0, [0x285a] = 0xe7f1, [0x285b] = 0xe7f2,
|
|
||||||
@@ -9019,84 +9022,86 @@ static const uint16_t __fourbyte_to_ucs[0x99e2 - 6637 - 2110 - 14404 - 4295] =
|
|
||||||
[0x2d60] = 0xfe02, [0x2d61] = 0xfe03, [0x2d62] = 0xfe04, [0x2d63] = 0xfe05,
|
|
||||||
[0x2d64] = 0xfe06, [0x2d65] = 0xfe07, [0x2d66] = 0xfe08, [0x2d67] = 0xfe09,
|
|
||||||
[0x2d68] = 0xfe0a, [0x2d69] = 0xfe0b, [0x2d6a] = 0xfe0c, [0x2d6b] = 0xfe0d,
|
|
||||||
- [0x2d6c] = 0xfe0e, [0x2d6d] = 0xfe0f, [0x2d78] = 0xfe1a, [0x2d79] = 0xfe1b,
|
|
||||||
- [0x2d7a] = 0xfe1c, [0x2d7b] = 0xfe1d, [0x2d7c] = 0xfe1e, [0x2d7d] = 0xfe1f,
|
|
||||||
- [0x2d7e] = 0xfe20, [0x2d7f] = 0xfe21, [0x2d80] = 0xfe22, [0x2d81] = 0xfe23,
|
|
||||||
- [0x2d82] = 0xfe24, [0x2d83] = 0xfe25, [0x2d84] = 0xfe26, [0x2d85] = 0xfe27,
|
|
||||||
- [0x2d86] = 0xfe28, [0x2d87] = 0xfe29, [0x2d88] = 0xfe2a, [0x2d89] = 0xfe2b,
|
|
||||||
- [0x2d8a] = 0xfe2c, [0x2d8b] = 0xfe2d, [0x2d8c] = 0xfe2e, [0x2d8d] = 0xfe2f,
|
|
||||||
- [0x2d8e] = 0xfe32, [0x2d8f] = 0xfe45, [0x2d90] = 0xfe46, [0x2d91] = 0xfe47,
|
|
||||||
- [0x2d92] = 0xfe48, [0x2d93] = 0xfe53, [0x2d94] = 0xfe58, [0x2d95] = 0xfe67,
|
|
||||||
- [0x2d96] = 0xfe6c, [0x2d97] = 0xfe6d, [0x2d98] = 0xfe6e, [0x2d99] = 0xfe6f,
|
|
||||||
- [0x2d9a] = 0xfe70, [0x2d9b] = 0xfe71, [0x2d9c] = 0xfe72, [0x2d9d] = 0xfe73,
|
|
||||||
- [0x2d9e] = 0xfe74, [0x2d9f] = 0xfe75, [0x2da0] = 0xfe76, [0x2da1] = 0xfe77,
|
|
||||||
- [0x2da2] = 0xfe78, [0x2da3] = 0xfe79, [0x2da4] = 0xfe7a, [0x2da5] = 0xfe7b,
|
|
||||||
- [0x2da6] = 0xfe7c, [0x2da7] = 0xfe7d, [0x2da8] = 0xfe7e, [0x2da9] = 0xfe7f,
|
|
||||||
- [0x2daa] = 0xfe80, [0x2dab] = 0xfe81, [0x2dac] = 0xfe82, [0x2dad] = 0xfe83,
|
|
||||||
- [0x2dae] = 0xfe84, [0x2daf] = 0xfe85, [0x2db0] = 0xfe86, [0x2db1] = 0xfe87,
|
|
||||||
- [0x2db2] = 0xfe88, [0x2db3] = 0xfe89, [0x2db4] = 0xfe8a, [0x2db5] = 0xfe8b,
|
|
||||||
- [0x2db6] = 0xfe8c, [0x2db7] = 0xfe8d, [0x2db8] = 0xfe8e, [0x2db9] = 0xfe8f,
|
|
||||||
- [0x2dba] = 0xfe90, [0x2dbb] = 0xfe91, [0x2dbc] = 0xfe92, [0x2dbd] = 0xfe93,
|
|
||||||
- [0x2dbe] = 0xfe94, [0x2dbf] = 0xfe95, [0x2dc0] = 0xfe96, [0x2dc1] = 0xfe97,
|
|
||||||
- [0x2dc2] = 0xfe98, [0x2dc3] = 0xfe99, [0x2dc4] = 0xfe9a, [0x2dc5] = 0xfe9b,
|
|
||||||
- [0x2dc6] = 0xfe9c, [0x2dc7] = 0xfe9d, [0x2dc8] = 0xfe9e, [0x2dc9] = 0xfe9f,
|
|
||||||
- [0x2dca] = 0xfea0, [0x2dcb] = 0xfea1, [0x2dcc] = 0xfea2, [0x2dcd] = 0xfea3,
|
|
||||||
- [0x2dce] = 0xfea4, [0x2dcf] = 0xfea5, [0x2dd0] = 0xfea6, [0x2dd1] = 0xfea7,
|
|
||||||
- [0x2dd2] = 0xfea8, [0x2dd3] = 0xfea9, [0x2dd4] = 0xfeaa, [0x2dd5] = 0xfeab,
|
|
||||||
- [0x2dd6] = 0xfeac, [0x2dd7] = 0xfead, [0x2dd8] = 0xfeae, [0x2dd9] = 0xfeaf,
|
|
||||||
- [0x2dda] = 0xfeb0, [0x2ddb] = 0xfeb1, [0x2ddc] = 0xfeb2, [0x2ddd] = 0xfeb3,
|
|
||||||
- [0x2dde] = 0xfeb4, [0x2ddf] = 0xfeb5, [0x2de0] = 0xfeb6, [0x2de1] = 0xfeb7,
|
|
||||||
- [0x2de2] = 0xfeb8, [0x2de3] = 0xfeb9, [0x2de4] = 0xfeba, [0x2de5] = 0xfebb,
|
|
||||||
- [0x2de6] = 0xfebc, [0x2de7] = 0xfebd, [0x2de8] = 0xfebe, [0x2de9] = 0xfebf,
|
|
||||||
- [0x2dea] = 0xfec0, [0x2deb] = 0xfec1, [0x2dec] = 0xfec2, [0x2ded] = 0xfec3,
|
|
||||||
- [0x2dee] = 0xfec4, [0x2def] = 0xfec5, [0x2df0] = 0xfec6, [0x2df1] = 0xfec7,
|
|
||||||
- [0x2df2] = 0xfec8, [0x2df3] = 0xfec9, [0x2df4] = 0xfeca, [0x2df5] = 0xfecb,
|
|
||||||
- [0x2df6] = 0xfecc, [0x2df7] = 0xfecd, [0x2df8] = 0xfece, [0x2df9] = 0xfecf,
|
|
||||||
- [0x2dfa] = 0xfed0, [0x2dfb] = 0xfed1, [0x2dfc] = 0xfed2, [0x2dfd] = 0xfed3,
|
|
||||||
- [0x2dfe] = 0xfed4, [0x2dff] = 0xfed5, [0x2e00] = 0xfed6, [0x2e01] = 0xfed7,
|
|
||||||
- [0x2e02] = 0xfed8, [0x2e03] = 0xfed9, [0x2e04] = 0xfeda, [0x2e05] = 0xfedb,
|
|
||||||
- [0x2e06] = 0xfedc, [0x2e07] = 0xfedd, [0x2e08] = 0xfede, [0x2e09] = 0xfedf,
|
|
||||||
- [0x2e0a] = 0xfee0, [0x2e0b] = 0xfee1, [0x2e0c] = 0xfee2, [0x2e0d] = 0xfee3,
|
|
||||||
- [0x2e0e] = 0xfee4, [0x2e0f] = 0xfee5, [0x2e10] = 0xfee6, [0x2e11] = 0xfee7,
|
|
||||||
- [0x2e12] = 0xfee8, [0x2e13] = 0xfee9, [0x2e14] = 0xfeea, [0x2e15] = 0xfeeb,
|
|
||||||
- [0x2e16] = 0xfeec, [0x2e17] = 0xfeed, [0x2e18] = 0xfeee, [0x2e19] = 0xfeef,
|
|
||||||
- [0x2e1a] = 0xfef0, [0x2e1b] = 0xfef1, [0x2e1c] = 0xfef2, [0x2e1d] = 0xfef3,
|
|
||||||
- [0x2e1e] = 0xfef4, [0x2e1f] = 0xfef5, [0x2e20] = 0xfef6, [0x2e21] = 0xfef7,
|
|
||||||
- [0x2e22] = 0xfef8, [0x2e23] = 0xfef9, [0x2e24] = 0xfefa, [0x2e25] = 0xfefb,
|
|
||||||
- [0x2e26] = 0xfefc, [0x2e27] = 0xfefd, [0x2e28] = 0xfefe, [0x2e29] = 0xfeff,
|
|
||||||
- [0x2e2a] = 0xff00, [0x2e2b] = 0xff5f, [0x2e2c] = 0xff60, [0x2e2d] = 0xff61,
|
|
||||||
- [0x2e2e] = 0xff62, [0x2e2f] = 0xff63, [0x2e30] = 0xff64, [0x2e31] = 0xff65,
|
|
||||||
- [0x2e32] = 0xff66, [0x2e33] = 0xff67, [0x2e34] = 0xff68, [0x2e35] = 0xff69,
|
|
||||||
- [0x2e36] = 0xff6a, [0x2e37] = 0xff6b, [0x2e38] = 0xff6c, [0x2e39] = 0xff6d,
|
|
||||||
- [0x2e3a] = 0xff6e, [0x2e3b] = 0xff6f, [0x2e3c] = 0xff70, [0x2e3d] = 0xff71,
|
|
||||||
- [0x2e3e] = 0xff72, [0x2e3f] = 0xff73, [0x2e40] = 0xff74, [0x2e41] = 0xff75,
|
|
||||||
- [0x2e42] = 0xff76, [0x2e43] = 0xff77, [0x2e44] = 0xff78, [0x2e45] = 0xff79,
|
|
||||||
- [0x2e46] = 0xff7a, [0x2e47] = 0xff7b, [0x2e48] = 0xff7c, [0x2e49] = 0xff7d,
|
|
||||||
- [0x2e4a] = 0xff7e, [0x2e4b] = 0xff7f, [0x2e4c] = 0xff80, [0x2e4d] = 0xff81,
|
|
||||||
- [0x2e4e] = 0xff82, [0x2e4f] = 0xff83, [0x2e50] = 0xff84, [0x2e51] = 0xff85,
|
|
||||||
- [0x2e52] = 0xff86, [0x2e53] = 0xff87, [0x2e54] = 0xff88, [0x2e55] = 0xff89,
|
|
||||||
- [0x2e56] = 0xff8a, [0x2e57] = 0xff8b, [0x2e58] = 0xff8c, [0x2e59] = 0xff8d,
|
|
||||||
- [0x2e5a] = 0xff8e, [0x2e5b] = 0xff8f, [0x2e5c] = 0xff90, [0x2e5d] = 0xff91,
|
|
||||||
- [0x2e5e] = 0xff92, [0x2e5f] = 0xff93, [0x2e60] = 0xff94, [0x2e61] = 0xff95,
|
|
||||||
- [0x2e62] = 0xff96, [0x2e63] = 0xff97, [0x2e64] = 0xff98, [0x2e65] = 0xff99,
|
|
||||||
- [0x2e66] = 0xff9a, [0x2e67] = 0xff9b, [0x2e68] = 0xff9c, [0x2e69] = 0xff9d,
|
|
||||||
- [0x2e6a] = 0xff9e, [0x2e6b] = 0xff9f, [0x2e6c] = 0xffa0, [0x2e6d] = 0xffa1,
|
|
||||||
- [0x2e6e] = 0xffa2, [0x2e6f] = 0xffa3, [0x2e70] = 0xffa4, [0x2e71] = 0xffa5,
|
|
||||||
- [0x2e72] = 0xffa6, [0x2e73] = 0xffa7, [0x2e74] = 0xffa8, [0x2e75] = 0xffa9,
|
|
||||||
- [0x2e76] = 0xffaa, [0x2e77] = 0xffab, [0x2e78] = 0xffac, [0x2e79] = 0xffad,
|
|
||||||
- [0x2e7a] = 0xffae, [0x2e7b] = 0xffaf, [0x2e7c] = 0xffb0, [0x2e7d] = 0xffb1,
|
|
||||||
- [0x2e7e] = 0xffb2, [0x2e7f] = 0xffb3, [0x2e80] = 0xffb4, [0x2e81] = 0xffb5,
|
|
||||||
- [0x2e82] = 0xffb6, [0x2e83] = 0xffb7, [0x2e84] = 0xffb8, [0x2e85] = 0xffb9,
|
|
||||||
- [0x2e86] = 0xffba, [0x2e87] = 0xffbb, [0x2e88] = 0xffbc, [0x2e89] = 0xffbd,
|
|
||||||
- [0x2e8a] = 0xffbe, [0x2e8b] = 0xffbf, [0x2e8c] = 0xffc0, [0x2e8d] = 0xffc1,
|
|
||||||
- [0x2e8e] = 0xffc2, [0x2e8f] = 0xffc3, [0x2e90] = 0xffc4, [0x2e91] = 0xffc5,
|
|
||||||
- [0x2e92] = 0xffc6, [0x2e93] = 0xffc7, [0x2e94] = 0xffc8, [0x2e95] = 0xffc9,
|
|
||||||
- [0x2e96] = 0xffca, [0x2e97] = 0xffcb, [0x2e98] = 0xffcc, [0x2e99] = 0xffcd,
|
|
||||||
- [0x2e9a] = 0xffce, [0x2e9b] = 0xffcf, [0x2e9c] = 0xffd0, [0x2e9d] = 0xffd1,
|
|
||||||
- [0x2e9e] = 0xffd2, [0x2e9f] = 0xffd3, [0x2ea0] = 0xffd4, [0x2ea1] = 0xffd5,
|
|
||||||
- [0x2ea2] = 0xffd6, [0x2ea3] = 0xffd7, [0x2ea4] = 0xffd8, [0x2ea5] = 0xffd9,
|
|
||||||
- [0x2ea6] = 0xffda, [0x2ea7] = 0xffdb, [0x2ea8] = 0xffdc, [0x2ea9] = 0xffdd,
|
|
||||||
- [0x2eaa] = 0xffde, [0x2eab] = 0xffdf,
|
|
||||||
+ [0x2d6c] = 0xfe0e, [0x2d6d] = 0xfe0f, [0x2d6e] = 0xe78d, [0x2d6f] = 0xe78f,
|
|
||||||
+ [0x2d70] = 0xe78e, [0x2d71] = 0xe790, [0x2d72] = 0xe791, [0x2d73] = 0xe792,
|
|
||||||
+ [0x2d74] = 0xe793, [0x2d75] = 0xe794, [0x2d76] = 0xe795, [0x2d77] = 0xe796,
|
|
||||||
+ [0x2d78] = 0xfe1a, [0x2d79] = 0xfe1b, [0x2d7a] = 0xfe1c, [0x2d7b] = 0xfe1d,
|
|
||||||
+ [0x2d7c] = 0xfe1e, [0x2d7d] = 0xfe1f, [0x2d7e] = 0xfe20, [0x2d7f] = 0xfe21,
|
|
||||||
+ [0x2d80] = 0xfe22, [0x2d81] = 0xfe23, [0x2d82] = 0xfe24, [0x2d83] = 0xfe25,
|
|
||||||
+ [0x2d84] = 0xfe26, [0x2d85] = 0xfe27, [0x2d86] = 0xfe28, [0x2d87] = 0xfe29,
|
|
||||||
+ [0x2d88] = 0xfe2a, [0x2d89] = 0xfe2b, [0x2d8a] = 0xfe2c, [0x2d8b] = 0xfe2d,
|
|
||||||
+ [0x2d8c] = 0xfe2e, [0x2d8d] = 0xfe2f, [0x2d8e] = 0xfe32, [0x2d8f] = 0xfe45,
|
|
||||||
+ [0x2d90] = 0xfe46, [0x2d91] = 0xfe47, [0x2d92] = 0xfe48, [0x2d93] = 0xfe53,
|
|
||||||
+ [0x2d94] = 0xfe58, [0x2d95] = 0xfe67, [0x2d96] = 0xfe6c, [0x2d97] = 0xfe6d,
|
|
||||||
+ [0x2d98] = 0xfe6e, [0x2d99] = 0xfe6f, [0x2d9a] = 0xfe70, [0x2d9b] = 0xfe71,
|
|
||||||
+ [0x2d9c] = 0xfe72, [0x2d9d] = 0xfe73, [0x2d9e] = 0xfe74, [0x2d9f] = 0xfe75,
|
|
||||||
+ [0x2da0] = 0xfe76, [0x2da1] = 0xfe77, [0x2da2] = 0xfe78, [0x2da3] = 0xfe79,
|
|
||||||
+ [0x2da4] = 0xfe7a, [0x2da5] = 0xfe7b, [0x2da6] = 0xfe7c, [0x2da7] = 0xfe7d,
|
|
||||||
+ [0x2da8] = 0xfe7e, [0x2da9] = 0xfe7f, [0x2daa] = 0xfe80, [0x2dab] = 0xfe81,
|
|
||||||
+ [0x2dac] = 0xfe82, [0x2dad] = 0xfe83, [0x2dae] = 0xfe84, [0x2daf] = 0xfe85,
|
|
||||||
+ [0x2db0] = 0xfe86, [0x2db1] = 0xfe87, [0x2db2] = 0xfe88, [0x2db3] = 0xfe89,
|
|
||||||
+ [0x2db4] = 0xfe8a, [0x2db5] = 0xfe8b, [0x2db6] = 0xfe8c, [0x2db7] = 0xfe8d,
|
|
||||||
+ [0x2db8] = 0xfe8e, [0x2db9] = 0xfe8f, [0x2dba] = 0xfe90, [0x2dbb] = 0xfe91,
|
|
||||||
+ [0x2dbc] = 0xfe92, [0x2dbd] = 0xfe93, [0x2dbe] = 0xfe94, [0x2dbf] = 0xfe95,
|
|
||||||
+ [0x2dc0] = 0xfe96, [0x2dc1] = 0xfe97, [0x2dc2] = 0xfe98, [0x2dc3] = 0xfe99,
|
|
||||||
+ [0x2dc4] = 0xfe9a, [0x2dc5] = 0xfe9b, [0x2dc6] = 0xfe9c, [0x2dc7] = 0xfe9d,
|
|
||||||
+ [0x2dc8] = 0xfe9e, [0x2dc9] = 0xfe9f, [0x2dca] = 0xfea0, [0x2dcb] = 0xfea1,
|
|
||||||
+ [0x2dcc] = 0xfea2, [0x2dcd] = 0xfea3, [0x2dce] = 0xfea4, [0x2dcf] = 0xfea5,
|
|
||||||
+ [0x2dd0] = 0xfea6, [0x2dd1] = 0xfea7, [0x2dd2] = 0xfea8, [0x2dd3] = 0xfea9,
|
|
||||||
+ [0x2dd4] = 0xfeaa, [0x2dd5] = 0xfeab, [0x2dd6] = 0xfeac, [0x2dd7] = 0xfead,
|
|
||||||
+ [0x2dd8] = 0xfeae, [0x2dd9] = 0xfeaf, [0x2dda] = 0xfeb0, [0x2ddb] = 0xfeb1,
|
|
||||||
+ [0x2ddc] = 0xfeb2, [0x2ddd] = 0xfeb3, [0x2dde] = 0xfeb4, [0x2ddf] = 0xfeb5,
|
|
||||||
+ [0x2de0] = 0xfeb6, [0x2de1] = 0xfeb7, [0x2de2] = 0xfeb8, [0x2de3] = 0xfeb9,
|
|
||||||
+ [0x2de4] = 0xfeba, [0x2de5] = 0xfebb, [0x2de6] = 0xfebc, [0x2de7] = 0xfebd,
|
|
||||||
+ [0x2de8] = 0xfebe, [0x2de9] = 0xfebf, [0x2dea] = 0xfec0, [0x2deb] = 0xfec1,
|
|
||||||
+ [0x2dec] = 0xfec2, [0x2ded] = 0xfec3, [0x2dee] = 0xfec4, [0x2def] = 0xfec5,
|
|
||||||
+ [0x2df0] = 0xfec6, [0x2df1] = 0xfec7, [0x2df2] = 0xfec8, [0x2df3] = 0xfec9,
|
|
||||||
+ [0x2df4] = 0xfeca, [0x2df5] = 0xfecb, [0x2df6] = 0xfecc, [0x2df7] = 0xfecd,
|
|
||||||
+ [0x2df8] = 0xfece, [0x2df9] = 0xfecf, [0x2dfa] = 0xfed0, [0x2dfb] = 0xfed1,
|
|
||||||
+ [0x2dfc] = 0xfed2, [0x2dfd] = 0xfed3, [0x2dfe] = 0xfed4, [0x2dff] = 0xfed5,
|
|
||||||
+ [0x2e00] = 0xfed6, [0x2e01] = 0xfed7, [0x2e02] = 0xfed8, [0x2e03] = 0xfed9,
|
|
||||||
+ [0x2e04] = 0xfeda, [0x2e05] = 0xfedb, [0x2e06] = 0xfedc, [0x2e07] = 0xfedd,
|
|
||||||
+ [0x2e08] = 0xfede, [0x2e09] = 0xfedf, [0x2e0a] = 0xfee0, [0x2e0b] = 0xfee1,
|
|
||||||
+ [0x2e0c] = 0xfee2, [0x2e0d] = 0xfee3, [0x2e0e] = 0xfee4, [0x2e0f] = 0xfee5,
|
|
||||||
+ [0x2e10] = 0xfee6, [0x2e11] = 0xfee7, [0x2e12] = 0xfee8, [0x2e13] = 0xfee9,
|
|
||||||
+ [0x2e14] = 0xfeea, [0x2e15] = 0xfeeb, [0x2e16] = 0xfeec, [0x2e17] = 0xfeed,
|
|
||||||
+ [0x2e18] = 0xfeee, [0x2e19] = 0xfeef, [0x2e1a] = 0xfef0, [0x2e1b] = 0xfef1,
|
|
||||||
+ [0x2e1c] = 0xfef2, [0x2e1d] = 0xfef3, [0x2e1e] = 0xfef4, [0x2e1f] = 0xfef5,
|
|
||||||
+ [0x2e20] = 0xfef6, [0x2e21] = 0xfef7, [0x2e22] = 0xfef8, [0x2e23] = 0xfef9,
|
|
||||||
+ [0x2e24] = 0xfefa, [0x2e25] = 0xfefb, [0x2e26] = 0xfefc, [0x2e27] = 0xfefd,
|
|
||||||
+ [0x2e28] = 0xfefe, [0x2e29] = 0xfeff, [0x2e2a] = 0xff00, [0x2e2b] = 0xff5f,
|
|
||||||
+ [0x2e2c] = 0xff60, [0x2e2d] = 0xff61, [0x2e2e] = 0xff62, [0x2e2f] = 0xff63,
|
|
||||||
+ [0x2e30] = 0xff64, [0x2e31] = 0xff65, [0x2e32] = 0xff66, [0x2e33] = 0xff67,
|
|
||||||
+ [0x2e34] = 0xff68, [0x2e35] = 0xff69, [0x2e36] = 0xff6a, [0x2e37] = 0xff6b,
|
|
||||||
+ [0x2e38] = 0xff6c, [0x2e39] = 0xff6d, [0x2e3a] = 0xff6e, [0x2e3b] = 0xff6f,
|
|
||||||
+ [0x2e3c] = 0xff70, [0x2e3d] = 0xff71, [0x2e3e] = 0xff72, [0x2e3f] = 0xff73,
|
|
||||||
+ [0x2e40] = 0xff74, [0x2e41] = 0xff75, [0x2e42] = 0xff76, [0x2e43] = 0xff77,
|
|
||||||
+ [0x2e44] = 0xff78, [0x2e45] = 0xff79, [0x2e46] = 0xff7a, [0x2e47] = 0xff7b,
|
|
||||||
+ [0x2e48] = 0xff7c, [0x2e49] = 0xff7d, [0x2e4a] = 0xff7e, [0x2e4b] = 0xff7f,
|
|
||||||
+ [0x2e4c] = 0xff80, [0x2e4d] = 0xff81, [0x2e4e] = 0xff82, [0x2e4f] = 0xff83,
|
|
||||||
+ [0x2e50] = 0xff84, [0x2e51] = 0xff85, [0x2e52] = 0xff86, [0x2e53] = 0xff87,
|
|
||||||
+ [0x2e54] = 0xff88, [0x2e55] = 0xff89, [0x2e56] = 0xff8a, [0x2e57] = 0xff8b,
|
|
||||||
+ [0x2e58] = 0xff8c, [0x2e59] = 0xff8d, [0x2e5a] = 0xff8e, [0x2e5b] = 0xff8f,
|
|
||||||
+ [0x2e5c] = 0xff90, [0x2e5d] = 0xff91, [0x2e5e] = 0xff92, [0x2e5f] = 0xff93,
|
|
||||||
+ [0x2e60] = 0xff94, [0x2e61] = 0xff95, [0x2e62] = 0xff96, [0x2e63] = 0xff97,
|
|
||||||
+ [0x2e64] = 0xff98, [0x2e65] = 0xff99, [0x2e66] = 0xff9a, [0x2e67] = 0xff9b,
|
|
||||||
+ [0x2e68] = 0xff9c, [0x2e69] = 0xff9d, [0x2e6a] = 0xff9e, [0x2e6b] = 0xff9f,
|
|
||||||
+ [0x2e6c] = 0xffa0, [0x2e6d] = 0xffa1, [0x2e6e] = 0xffa2, [0x2e6f] = 0xffa3,
|
|
||||||
+ [0x2e70] = 0xffa4, [0x2e71] = 0xffa5, [0x2e72] = 0xffa6, [0x2e73] = 0xffa7,
|
|
||||||
+ [0x2e74] = 0xffa8, [0x2e75] = 0xffa9, [0x2e76] = 0xffaa, [0x2e77] = 0xffab,
|
|
||||||
+ [0x2e78] = 0xffac, [0x2e79] = 0xffad, [0x2e7a] = 0xffae, [0x2e7b] = 0xffaf,
|
|
||||||
+ [0x2e7c] = 0xffb0, [0x2e7d] = 0xffb1, [0x2e7e] = 0xffb2, [0x2e7f] = 0xffb3,
|
|
||||||
+ [0x2e80] = 0xffb4, [0x2e81] = 0xffb5, [0x2e82] = 0xffb6, [0x2e83] = 0xffb7,
|
|
||||||
+ [0x2e84] = 0xffb8, [0x2e85] = 0xffb9, [0x2e86] = 0xffba, [0x2e87] = 0xffbb,
|
|
||||||
+ [0x2e88] = 0xffbc, [0x2e89] = 0xffbd, [0x2e8a] = 0xffbe, [0x2e8b] = 0xffbf,
|
|
||||||
+ [0x2e8c] = 0xffc0, [0x2e8d] = 0xffc1, [0x2e8e] = 0xffc2, [0x2e8f] = 0xffc3,
|
|
||||||
+ [0x2e90] = 0xffc4, [0x2e91] = 0xffc5, [0x2e92] = 0xffc6, [0x2e93] = 0xffc7,
|
|
||||||
+ [0x2e94] = 0xffc8, [0x2e95] = 0xffc9, [0x2e96] = 0xffca, [0x2e97] = 0xffcb,
|
|
||||||
+ [0x2e98] = 0xffcc, [0x2e99] = 0xffcd, [0x2e9a] = 0xffce, [0x2e9b] = 0xffcf,
|
|
||||||
+ [0x2e9c] = 0xffd0, [0x2e9d] = 0xffd1, [0x2e9e] = 0xffd2, [0x2e9f] = 0xffd3,
|
|
||||||
+ [0x2ea0] = 0xffd4, [0x2ea1] = 0xffd5, [0x2ea2] = 0xffd6, [0x2ea3] = 0xffd7,
|
|
||||||
+ [0x2ea4] = 0xffd8, [0x2ea5] = 0xffd9, [0x2ea6] = 0xffda, [0x2ea7] = 0xffdb,
|
|
||||||
+ [0x2ea8] = 0xffdc, [0x2ea9] = 0xffdd, [0x2eaa] = 0xffde, [0x2eab] = 0xffdf,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Table for UCS-4 -> GB18030, for the range U+0080..U+9FBB.
|
|
||||||
@@ -23448,71 +23453,79 @@ static const unsigned char __ucs_to_gb18030_tab2[][2] =
|
|
||||||
[0x0783] = "\xa5\xfd", [0x0784] = "\xa5\xfe", [0x0785] = "\xa6\xb9",
|
|
||||||
[0x0786] = "\xa6\xba", [0x0787] = "\xa6\xbb", [0x0788] = "\xa6\xbc",
|
|
||||||
[0x0789] = "\xa6\xbd", [0x078a] = "\xa6\xbe", [0x078b] = "\xa6\xbf",
|
|
||||||
- [0x078c] = "\xa6\xc0", [0x0797] = "\xa6\xf6", [0x0798] = "\xa6\xf7",
|
|
||||||
- [0x0799] = "\xa6\xf8", [0x079a] = "\xa6\xf9", [0x079b] = "\xa6\xfa",
|
|
||||||
- [0x079c] = "\xa6\xfb", [0x079d] = "\xa6\xfc", [0x079e] = "\xa6\xfd",
|
|
||||||
- [0x079f] = "\xa6\xfe", [0x07a0] = "\xa7\xc2", [0x07a1] = "\xa7\xc3",
|
|
||||||
- [0x07a2] = "\xa7\xc4", [0x07a3] = "\xa7\xc5", [0x07a4] = "\xa7\xc6",
|
|
||||||
- [0x07a5] = "\xa7\xc7", [0x07a6] = "\xa7\xc8", [0x07a7] = "\xa7\xc9",
|
|
||||||
- [0x07a8] = "\xa7\xca", [0x07a9] = "\xa7\xcb", [0x07aa] = "\xa7\xcc",
|
|
||||||
- [0x07ab] = "\xa7\xcd", [0x07ac] = "\xa7\xce", [0x07ad] = "\xa7\xcf",
|
|
||||||
- [0x07ae] = "\xa7\xd0", [0x07af] = "\xa7\xf2", [0x07b0] = "\xa7\xf3",
|
|
||||||
- [0x07b1] = "\xa7\xf4", [0x07b2] = "\xa7\xf5", [0x07b3] = "\xa7\xf6",
|
|
||||||
- [0x07b4] = "\xa7\xf7", [0x07b5] = "\xa7\xf8", [0x07b6] = "\xa7\xf9",
|
|
||||||
- [0x07b7] = "\xa7\xfa", [0x07b8] = "\xa7\xfb", [0x07b9] = "\xa7\xfc",
|
|
||||||
- [0x07ba] = "\xa7\xfd", [0x07bb] = "\xa7\xfe", [0x07bc] = "\xa8\x96",
|
|
||||||
- [0x07bd] = "\xa8\x97", [0x07be] = "\xa8\x98", [0x07bf] = "\xa8\x99",
|
|
||||||
- [0x07c0] = "\xa8\x9a", [0x07c1] = "\xa8\x9b", [0x07c2] = "\xa8\x9c",
|
|
||||||
- [0x07c3] = "\xa8\x9d", [0x07c4] = "\xa8\x9e", [0x07c5] = "\xa8\x9f",
|
|
||||||
- [0x07c6] = "\xa8\xa0", [0x07c7] = "\x00\x01", [0x07c8] = "\x65\x9e",
|
|
||||||
- [0x07c9] = "\xa8\xc1", [0x07ca] = "\xa8\xc2", [0x07cb] = "\xa8\xc3",
|
|
||||||
- [0x07cc] = "\xa8\xc4", [0x07cd] = "\xa8\xea", [0x07ce] = "\xa8\xeb",
|
|
||||||
- [0x07cf] = "\xa8\xec", [0x07d0] = "\xa8\xed", [0x07d1] = "\xa8\xee",
|
|
||||||
- [0x07d2] = "\xa8\xef", [0x07d3] = "\xa8\xf0", [0x07d4] = "\xa8\xf1",
|
|
||||||
- [0x07d5] = "\xa8\xf2", [0x07d6] = "\xa8\xf3", [0x07d7] = "\xa8\xf4",
|
|
||||||
- [0x07d8] = "\xa8\xf5", [0x07d9] = "\xa8\xf6", [0x07da] = "\xa8\xf7",
|
|
||||||
- [0x07db] = "\xa8\xf8", [0x07dc] = "\xa8\xf9", [0x07dd] = "\xa8\xfa",
|
|
||||||
- [0x07de] = "\xa8\xfb", [0x07df] = "\xa8\xfc", [0x07e0] = "\xa8\xfd",
|
|
||||||
- [0x07e1] = "\xa8\xfe", [0x07e2] = "\xa9\x58", [0x07e3] = "\xa9\x5b",
|
|
||||||
- [0x07e4] = "\xa9\x5d", [0x07e5] = "\xa9\x5e", [0x07e6] = "\xa9\x5f",
|
|
||||||
- [0x07e7] = "\x65\x9f", [0x07e8] = "\x65\xa0", [0x07e9] = "\x65\xa1",
|
|
||||||
- [0x07ea] = "\x65\xa2", [0x07eb] = "\x65\xa3", [0x07ec] = "\x65\xa4",
|
|
||||||
- [0x07ed] = "\x65\xa5", [0x07ee] = "\x65\xa6", [0x07ef] = "\x65\xa7",
|
|
||||||
- [0x07f0] = "\x65\xa8", [0x07f1] = "\x65\xa9", [0x07f2] = "\x65\xaa",
|
|
||||||
- [0x07f3] = "\x65\xab", [0x07f4] = "\xa9\x97", [0x07f5] = "\xa9\x98",
|
|
||||||
- [0x07f6] = "\xa9\x99", [0x07f7] = "\xa9\x9a", [0x07f8] = "\xa9\x9b",
|
|
||||||
- [0x07f9] = "\xa9\x9c", [0x07fa] = "\xa9\x9d", [0x07fb] = "\xa9\x9e",
|
|
||||||
- [0x07fc] = "\xa9\x9f", [0x07fd] = "\xa9\xa0", [0x07fe] = "\xa9\xa1",
|
|
||||||
- [0x07ff] = "\xa9\xa2", [0x0800] = "\xa9\xa3", [0x0801] = "\xa9\xf0",
|
|
||||||
- [0x0802] = "\xa9\xf1", [0x0803] = "\xa9\xf2", [0x0804] = "\xa9\xf3",
|
|
||||||
- [0x0805] = "\xa9\xf4", [0x0806] = "\xa9\xf5", [0x0807] = "\xa9\xf6",
|
|
||||||
- [0x0808] = "\xa9\xf7", [0x0809] = "\xa9\xf8", [0x080a] = "\xa9\xf9",
|
|
||||||
- [0x080b] = "\xa9\xfa", [0x080c] = "\xa9\xfb", [0x080d] = "\xa9\xfc",
|
|
||||||
- [0x080e] = "\xa9\xfd", [0x080f] = "\xa9\xfe", [0x0810] = "\xd7\xfa",
|
|
||||||
- [0x0811] = "\xd7\xfb", [0x0812] = "\xd7\xfc", [0x0813] = "\xd7\xfd",
|
|
||||||
- [0x0814] = "\xd7\xfe", [0x0815] = "\x65\xac", [0x0819] = "\x65\xad",
|
|
||||||
- [0x081a] = "\x65\xae", [0x081b] = "\x65\xaf", [0x081c] = "\x65\xb0",
|
|
||||||
- [0x081d] = "\x65\xb1", [0x081f] = "\x65\xb2", [0x0820] = "\x65\xb3",
|
|
||||||
- [0x0821] = "\x65\xb4", [0x0822] = "\x65\xb5", [0x0823] = "\x65\xb6",
|
|
||||||
- [0x0824] = "\x65\xb7", [0x0825] = "\x65\xb8", [0x0827] = "\x65\xb9",
|
|
||||||
+ [0x078c] = "\xa6\xc0", [0x078d] = "\x7b\x84", [0x078e] = "\x7b\x86",
|
|
||||||
+ [0x078f] = "\x7b\x85", [0x0790] = "\x7b\x87", [0x0791] = "\x7b\x88",
|
|
||||||
+ [0x0792] = "\x7b\x89", [0x0793] = "\x7b\x8a", [0x0794] = "\x7b\x8b",
|
|
||||||
+ [0x0795] = "\x7b\x8c", [0x0796] = "\x7b\x8d", [0x0797] = "\xa6\xf6",
|
|
||||||
+ [0x0798] = "\xa6\xf7", [0x0799] = "\xa6\xf8", [0x079a] = "\xa6\xf9",
|
|
||||||
+ [0x079b] = "\xa6\xfa", [0x079c] = "\xa6\xfb", [0x079d] = "\xa6\xfc",
|
|
||||||
+ [0x079e] = "\xa6\xfd", [0x079f] = "\xa6\xfe", [0x07a0] = "\xa7\xc2",
|
|
||||||
+ [0x07a1] = "\xa7\xc3", [0x07a2] = "\xa7\xc4", [0x07a3] = "\xa7\xc5",
|
|
||||||
+ [0x07a4] = "\xa7\xc6", [0x07a5] = "\xa7\xc7", [0x07a6] = "\xa7\xc8",
|
|
||||||
+ [0x07a7] = "\xa7\xc9", [0x07a8] = "\xa7\xca", [0x07a9] = "\xa7\xcb",
|
|
||||||
+ [0x07aa] = "\xa7\xcc", [0x07ab] = "\xa7\xcd", [0x07ac] = "\xa7\xce",
|
|
||||||
+ [0x07ad] = "\xa7\xcf", [0x07ae] = "\xa7\xd0", [0x07af] = "\xa7\xf2",
|
|
||||||
+ [0x07b0] = "\xa7\xf3", [0x07b1] = "\xa7\xf4", [0x07b2] = "\xa7\xf5",
|
|
||||||
+ [0x07b3] = "\xa7\xf6", [0x07b4] = "\xa7\xf7", [0x07b5] = "\xa7\xf8",
|
|
||||||
+ [0x07b6] = "\xa7\xf9", [0x07b7] = "\xa7\xfa", [0x07b8] = "\xa7\xfb",
|
|
||||||
+ [0x07b9] = "\xa7\xfc", [0x07ba] = "\xa7\xfd", [0x07bb] = "\xa7\xfe",
|
|
||||||
+ [0x07bc] = "\xa8\x96", [0x07bd] = "\xa8\x97", [0x07be] = "\xa8\x98",
|
|
||||||
+ [0x07bf] = "\xa8\x99", [0x07c0] = "\xa8\x9a", [0x07c1] = "\xa8\x9b",
|
|
||||||
+ [0x07c2] = "\xa8\x9c", [0x07c3] = "\xa8\x9d", [0x07c4] = "\xa8\x9e",
|
|
||||||
+ [0x07c5] = "\xa8\x9f", [0x07c6] = "\xa8\xa0", [0x07c7] = "\x00\x01",
|
|
||||||
+ [0x07c8] = "\x65\x9e", [0x07c9] = "\xa8\xc1", [0x07ca] = "\xa8\xc2",
|
|
||||||
+ [0x07cb] = "\xa8\xc3", [0x07cc] = "\xa8\xc4", [0x07cd] = "\xa8\xea",
|
|
||||||
+ [0x07ce] = "\xa8\xeb", [0x07cf] = "\xa8\xec", [0x07d0] = "\xa8\xed",
|
|
||||||
+ [0x07d1] = "\xa8\xee", [0x07d2] = "\xa8\xef", [0x07d3] = "\xa8\xf0",
|
|
||||||
+ [0x07d4] = "\xa8\xf1", [0x07d5] = "\xa8\xf2", [0x07d6] = "\xa8\xf3",
|
|
||||||
+ [0x07d7] = "\xa8\xf4", [0x07d8] = "\xa8\xf5", [0x07d9] = "\xa8\xf6",
|
|
||||||
+ [0x07da] = "\xa8\xf7", [0x07db] = "\xa8\xf8", [0x07dc] = "\xa8\xf9",
|
|
||||||
+ [0x07dd] = "\xa8\xfa", [0x07de] = "\xa8\xfb", [0x07df] = "\xa8\xfc",
|
|
||||||
+ [0x07e0] = "\xa8\xfd", [0x07e1] = "\xa8\xfe", [0x07e2] = "\xa9\x58",
|
|
||||||
+ [0x07e3] = "\xa9\x5b", [0x07e4] = "\xa9\x5d", [0x07e5] = "\xa9\x5e",
|
|
||||||
+ [0x07e6] = "\xa9\x5f", [0x07e7] = "\x65\x9f", [0x07e8] = "\x65\xa0",
|
|
||||||
+ [0x07e9] = "\x65\xa1", [0x07ea] = "\x65\xa2", [0x07eb] = "\x65\xa3",
|
|
||||||
+ [0x07ec] = "\x65\xa4", [0x07ed] = "\x65\xa5", [0x07ee] = "\x65\xa6",
|
|
||||||
+ [0x07ef] = "\x65\xa7", [0x07f0] = "\x65\xa8", [0x07f1] = "\x65\xa9",
|
|
||||||
+ [0x07f2] = "\x65\xaa", [0x07f3] = "\x65\xab", [0x07f4] = "\xa9\x97",
|
|
||||||
+ [0x07f5] = "\xa9\x98", [0x07f6] = "\xa9\x99", [0x07f7] = "\xa9\x9a",
|
|
||||||
+ [0x07f8] = "\xa9\x9b", [0x07f9] = "\xa9\x9c", [0x07fa] = "\xa9\x9d",
|
|
||||||
+ [0x07fb] = "\xa9\x9e", [0x07fc] = "\xa9\x9f", [0x07fd] = "\xa9\xa0",
|
|
||||||
+ [0x07fe] = "\xa9\xa1", [0x07ff] = "\xa9\xa2", [0x0800] = "\xa9\xa3",
|
|
||||||
+ [0x0801] = "\xa9\xf0", [0x0802] = "\xa9\xf1", [0x0803] = "\xa9\xf2",
|
|
||||||
+ [0x0804] = "\xa9\xf3", [0x0805] = "\xa9\xf4", [0x0806] = "\xa9\xf5",
|
|
||||||
+ [0x0807] = "\xa9\xf6", [0x0808] = "\xa9\xf7", [0x0809] = "\xa9\xf8",
|
|
||||||
+ [0x080a] = "\xa9\xf9", [0x080b] = "\xa9\xfa", [0x080c] = "\xa9\xfb",
|
|
||||||
+ [0x080d] = "\xa9\xfc", [0x080e] = "\xa9\xfd", [0x080f] = "\xa9\xfe",
|
|
||||||
+ [0x0810] = "\xd7\xfa", [0x0811] = "\xd7\xfb", [0x0812] = "\xd7\xfc",
|
|
||||||
+ [0x0813] = "\xd7\xfd", [0x0814] = "\xd7\xfe", [0x0815] = "\x65\xac",
|
|
||||||
+ [0x0816] = "\xfe\x51", [0x0817] = "\xfe\x52", [0x0818] = "\xfe\x53",
|
|
||||||
+ [0x0819] = "\x65\xad", [0x081a] = "\x65\xae", [0x081b] = "\x65\xaf",
|
|
||||||
+ [0x081c] = "\x65\xb0", [0x081d] = "\x65\xb1", [0x081e] = "\x2d\x51",
|
|
||||||
+ [0x081f] = "\x65\xb2", [0x0820] = "\x65\xb3", [0x0821] = "\x65\xb4",
|
|
||||||
+ [0x0822] = "\x65\xb5", [0x0823] = "\x65\xb6", [0x0824] = "\x65\xb7",
|
|
||||||
+ [0x0825] = "\x65\xb8", [0x0826] = "\x2d\x52", [0x0827] = "\x65\xb9",
|
|
||||||
[0x0828] = "\x65\xba", [0x0829] = "\x65\xbb", [0x082a] = "\x65\xbc",
|
|
||||||
- [0x082d] = "\x65\xbd", [0x082e] = "\x65\xbe", [0x082f] = "\x65\xbf",
|
|
||||||
- [0x0830] = "\x65\xc0", [0x0833] = "\x65\xc1", [0x0834] = "\x65\xc2",
|
|
||||||
- [0x0835] = "\x65\xc3", [0x0836] = "\x65\xc4", [0x0837] = "\x65\xc5",
|
|
||||||
- [0x0838] = "\x65\xc6", [0x0839] = "\x65\xc7", [0x083a] = "\x65\xc8",
|
|
||||||
- [0x083c] = "\x65\xc9", [0x083d] = "\x65\xca", [0x083e] = "\x65\xcb",
|
|
||||||
- [0x083f] = "\x65\xcc", [0x0840] = "\x65\xcd", [0x0841] = "\x65\xce",
|
|
||||||
- [0x0842] = "\x65\xcf", [0x0844] = "\x65\xd0", [0x0845] = "\x65\xd1",
|
|
||||||
+ [0x082b] = "\x2d\x53", [0x082c] = "\x2d\x54", [0x082d] = "\x65\xbd",
|
|
||||||
+ [0x082e] = "\x65\xbe", [0x082f] = "\x65\xbf", [0x0830] = "\x65\xc0",
|
|
||||||
+ [0x0831] = "\xfe\x6c", [0x0832] = "\x2d\x55", [0x0833] = "\x65\xc1",
|
|
||||||
+ [0x0834] = "\x65\xc2", [0x0835] = "\x65\xc3", [0x0836] = "\x65\xc4",
|
|
||||||
+ [0x0837] = "\x65\xc5", [0x0838] = "\x65\xc6", [0x0839] = "\x65\xc7",
|
|
||||||
+ [0x083a] = "\x65\xc8", [0x083b] = "\xfe\x76", [0x083c] = "\x65\xc9",
|
|
||||||
+ [0x083d] = "\x65\xca", [0x083e] = "\x65\xcb", [0x083f] = "\x65\xcc",
|
|
||||||
+ [0x0840] = "\x65\xcd", [0x0841] = "\x65\xce", [0x0842] = "\x65\xcf",
|
|
||||||
+ [0x0843] = "\x2d\x56", [0x0844] = "\x65\xd0", [0x0845] = "\x65\xd1",
|
|
||||||
[0x0846] = "\x65\xd2", [0x0847] = "\x65\xd3", [0x0848] = "\x65\xd4",
|
|
||||||
[0x0849] = "\x65\xd5", [0x084a] = "\x65\xd6", [0x084b] = "\x65\xd7",
|
|
||||||
[0x084c] = "\x65\xd8", [0x084d] = "\x65\xd9", [0x084e] = "\x65\xda",
|
|
||||||
[0x084f] = "\x65\xdb", [0x0850] = "\x65\xdc", [0x0851] = "\x65\xdd",
|
|
||||||
- [0x0852] = "\x65\xde", [0x0853] = "\x65\xdf", [0x0856] = "\x65\xe0",
|
|
||||||
- [0x0857] = "\x65\xe1", [0x0858] = "\x65\xe2", [0x0859] = "\x65\xe3",
|
|
||||||
- [0x085a] = "\x65\xe4", [0x085b] = "\x65\xe5", [0x085c] = "\x65\xe6",
|
|
||||||
- [0x085d] = "\x65\xe7", [0x085e] = "\x65\xe8", [0x085f] = "\x65\xe9",
|
|
||||||
- [0x0860] = "\x65\xea", [0x0861] = "\x65\xeb", [0x0862] = "\x65\xec",
|
|
||||||
- [0x0863] = "\x65\xed", [0x0865] = "\xfd\x9c", [0x0866] = "\x76\xb5",
|
|
||||||
+ [0x0852] = "\x65\xde", [0x0853] = "\x65\xdf", [0x0854] = "\x2d\x57",
|
|
||||||
+ [0x0855] = "\xfe\x91", [0x0856] = "\x65\xe0", [0x0857] = "\x65\xe1",
|
|
||||||
+ [0x0858] = "\x65\xe2", [0x0859] = "\x65\xe3", [0x085a] = "\x65\xe4",
|
|
||||||
+ [0x085b] = "\x65\xe5", [0x085c] = "\x65\xe6", [0x085d] = "\x65\xe7",
|
|
||||||
+ [0x085e] = "\x65\xe8", [0x085f] = "\x65\xe9", [0x0860] = "\x65\xea",
|
|
||||||
+ [0x0861] = "\x65\xeb", [0x0862] = "\x65\xec", [0x0863] = "\x65\xed",
|
|
||||||
+ [0x0864] = "\x2d\x58", [0x0865] = "\xfd\x9c", [0x0866] = "\x76\xb5",
|
|
||||||
[0x0867] = "\x76\xb6", [0x0868] = "\x76\xb7", [0x0869] = "\x76\xb8",
|
|
||||||
[0x086a] = "\x76\xb9", [0x086b] = "\x76\xba", [0x086c] = "\x76\xbb",
|
|
||||||
[0x086d] = "\x76\xbc", [0x086e] = "\x76\xbd", [0x086f] = "\x76\xbe",
|
|
||||||
@@ -24222,24 +24235,8 @@ static const unsigned char __ucs_to_gb18030_tab2[][2] =
|
|
||||||
|| (ch = __twobyte_to_ucs[idx], \
|
|
||||||
ch == 0 && *inptr != '\0')) \
|
|
||||||
{ \
|
|
||||||
- /* Handle a few special cases. */ \
|
|
||||||
- if (idx == 0x5dd1) \
|
|
||||||
- ch = 0x20087; \
|
|
||||||
- else if (idx == 0x5dd2) \
|
|
||||||
- ch = 0x20089; \
|
|
||||||
- else if (idx == 0x5dd3) \
|
|
||||||
- ch = 0x200cc; \
|
|
||||||
- else if (idx == 0x5dec) \
|
|
||||||
- ch = 0x215D7; \
|
|
||||||
- else if (idx == 0x5df6) \
|
|
||||||
- ch = 0x2298F; \
|
|
||||||
- else if (idx == 0x5e11) \
|
|
||||||
- ch = 0x241FE; \
|
|
||||||
- else \
|
|
||||||
- { \
|
|
||||||
- /* This is an illegal character. */ \
|
|
||||||
- STANDARD_FROM_LOOP_ERR_HANDLER (2); \
|
|
||||||
- } \
|
|
||||||
+ /* This is an illegal character. */ \
|
|
||||||
+ STANDARD_FROM_LOOP_ERR_HANDLER (2); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
inptr += 2; \
|
|
||||||
@@ -24331,17 +24328,35 @@ static const unsigned char __ucs_to_gb18030_tab2[][2] =
|
|
||||||
len = 4; \
|
|
||||||
} \
|
|
||||||
else if (ch == 0x20087) \
|
|
||||||
- cp = (const unsigned char *) "\xfe\x51"; \
|
|
||||||
+ { \
|
|
||||||
+ idx = 0x3E2CF; \
|
|
||||||
+ len = 4; \
|
|
||||||
+ } \
|
|
||||||
else if (ch == 0x20089) \
|
|
||||||
- cp = (const unsigned char *) "\xfe\x52"; \
|
|
||||||
+ { \
|
|
||||||
+ idx = 0x3E2D1; \
|
|
||||||
+ len = 4; \
|
|
||||||
+ } \
|
|
||||||
else if (ch == 0x200CC) \
|
|
||||||
- cp = (const unsigned char *) "\xfe\x53"; \
|
|
||||||
+ { \
|
|
||||||
+ idx = 0x3E314; \
|
|
||||||
+ len = 4; \
|
|
||||||
+ } \
|
|
||||||
else if (ch == 0x215d7) \
|
|
||||||
- cp = (const unsigned char *) "\xfe\x6c"; \
|
|
||||||
+ { \
|
|
||||||
+ idx = 0x3F81F; \
|
|
||||||
+ len = 4; \
|
|
||||||
+ } \
|
|
||||||
else if (ch == 0x2298F) \
|
|
||||||
- cp = (const unsigned char *) "\xfe\x76"; \
|
|
||||||
+ { \
|
|
||||||
+ idx = 0x40BD7; \
|
|
||||||
+ len = 4; \
|
|
||||||
+ } \
|
|
||||||
else if (ch == 0x241FE) \
|
|
||||||
- cp = (const unsigned char *) "\xfe\x91"; \
|
|
||||||
+ { \
|
|
||||||
+ idx = 0x42446; \
|
|
||||||
+ len = 4; \
|
|
||||||
+ } \
|
|
||||||
else if (ch >= 0x10000 && ch <= 0x10FFFF) \
|
|
||||||
{ \
|
|
||||||
idx = ch + 0x1E248; \
|
|
||||||
diff --git a/iconvdata/tst-table-from.c b/iconvdata/tst-table-from.c
|
|
||||||
index 9ad1f44e..c881c86b 100644
|
|
||||||
--- a/iconvdata/tst-table-from.c
|
|
||||||
+++ b/iconvdata/tst-table-from.c
|
|
||||||
@@ -195,10 +195,9 @@ main (int argc, char *argv[])
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* When testing UTF-8 or GB18030, stop at 0x10000, otherwise the output
|
|
||||||
+ /* When testing UTF-8, stop at 0x10000, otherwise the output
|
|
||||||
file gets too big. */
|
|
||||||
- bmp_only = (strcmp (charset, "UTF-8") == 0
|
|
||||||
- || strcmp (charset, "GB18030") == 0);
|
|
||||||
+ bmp_only = (strcmp (charset, "UTF-8") == 0);
|
|
||||||
search_depth = (strcmp (charset, "UTF-8") == 0 ? 3 : 4);
|
|
||||||
|
|
||||||
{
|
|
||||||
diff --git a/iconvdata/tst-table-to.c b/iconvdata/tst-table-to.c
|
|
||||||
index 6f0aa29c..8d097527 100644
|
|
||||||
--- a/iconvdata/tst-table-to.c
|
|
||||||
+++ b/iconvdata/tst-table-to.c
|
|
||||||
@@ -33,6 +33,7 @@ main (int argc, char *argv[])
|
|
||||||
const char *charset;
|
|
||||||
iconv_t cd;
|
|
||||||
int bmp_only;
|
|
||||||
+ int no_tags;
|
|
||||||
|
|
||||||
if (argc != 2)
|
|
||||||
{
|
|
||||||
@@ -48,16 +49,19 @@ main (int argc, char *argv[])
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* When testing UTF-8 or GB18030, stop at 0x10000, otherwise the output
|
|
||||||
+ /* When testing UTF-8, stop at 0x10000, otherwise the output
|
|
||||||
file gets too big. */
|
|
||||||
- bmp_only = (strcmp (charset, "UTF-8") == 0
|
|
||||||
+ bmp_only = (strcmp (charset, "UTF-8") == 0);
|
|
||||||
+ /* When testing any encoding other than UTF-8 or GB18030, stop at 0xE0000,
|
|
||||||
+ because the conversion drops Unicode tag characters (range
|
|
||||||
+ U+E0000..U+E007F). */
|
|
||||||
+ no_tags = !(strcmp (charset, "UTF-8") == 0
|
|
||||||
|| strcmp (charset, "GB18030") == 0);
|
|
||||||
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
unsigned char buf[10];
|
|
||||||
-
|
|
||||||
- for (i = 0; i < (bmp_only ? 0x10000 : 0x30000); i++)
|
|
||||||
+ for (i = 0; i < (bmp_only ? 0x10000 : no_tags ? 0xE0000 : 0x110000); i++)
|
|
||||||
{
|
|
||||||
unsigned char in[6];
|
|
||||||
unsigned int incount =
|
|
||||||
diff --git a/iconvdata/tst-table.sh b/iconvdata/tst-table.sh
|
|
||||||
index 04c06136..3c6927ee 100755
|
|
||||||
--- a/iconvdata/tst-table.sh
|
|
||||||
+++ b/iconvdata/tst-table.sh
|
|
||||||
@@ -38,7 +38,8 @@ set -e
|
|
||||||
< ../localedata/charmaps/${charmap:-$charset} \
|
|
||||||
> ${objpfx}tst-${charset}.charmap.table
|
|
||||||
# When the charset is GB18030, truncate this table because for this encoding,
|
|
||||||
-# the tst-table-from and tst-table-to programs scan the Unicode BMP only.
|
|
||||||
+# the charmap contains ranges (<Unnnn>..<Ummmm> notation), which the
|
|
||||||
+# tst-table-charmap.sh script does not grok.
|
|
||||||
if test ${charset} = GB18030; then
|
|
||||||
grep '0x....$' < ${objpfx}tst-${charset}.charmap.table \
|
|
||||||
> ${objpfx}tst-${charset}.truncated.table
|
|
||||||
@@ -74,25 +75,42 @@ diff ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.inverse.table
|
|
||||||
|
|
||||||
# Check 1: charmap and iconv forward should be identical, except for
|
|
||||||
# precomposed characters.
|
|
||||||
-if test -f ${precomposed}; then
|
|
||||||
- cat ${objpfx}tst-${charset}.table ${precomposed} | sort | uniq -u \
|
|
||||||
- > ${objpfx}tst-${charset}.tmp.table
|
|
||||||
- cmp -s ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.tmp.table ||
|
|
||||||
+{ if test -f ${precomposed}; then
|
|
||||||
+ cat ${objpfx}tst-${charset}.table ${precomposed} | sort | uniq -u
|
|
||||||
+ else
|
|
||||||
+ cat ${objpfx}tst-${charset}.table
|
|
||||||
+ fi
|
|
||||||
+} | { if test ${charset} = GB18030; then grep '0x....$'; else cat; fi; } \
|
|
||||||
+ > ${objpfx}tst-${charset}.tmp1.table
|
|
||||||
+cmp -s ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.tmp1.table ||
|
|
||||||
exit 1
|
|
||||||
-else
|
|
||||||
- cmp -s ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.table ||
|
|
||||||
- exit 1
|
|
||||||
-fi
|
|
||||||
|
|
||||||
# Check 2: the difference between the charmap and iconv backward.
|
|
||||||
-if test -f ${irreversible}; then
|
|
||||||
- cat ${objpfx}tst-${charset}.charmap.table ${irreversible} | sort | uniq -u \
|
|
||||||
- > ${objpfx}tst-${charset}.tmp.table
|
|
||||||
- cmp -s ${objpfx}tst-${charset}.tmp.table ${objpfx}tst-${charset}.inverse.table ||
|
|
||||||
- exit 1
|
|
||||||
-else
|
|
||||||
- cmp -s ${objpfx}tst-${charset}.charmap.table ${objpfx}tst-${charset}.inverse.table ||
|
|
||||||
+{ if test -f ${irreversible}; then
|
|
||||||
+ cat ${objpfx}tst-${charset}.charmap.table ${irreversible} | sort | uniq -u
|
|
||||||
+ else
|
|
||||||
+ cat ${objpfx}tst-${charset}.charmap.table
|
|
||||||
+ fi
|
|
||||||
+} | { if test ${charset} = GB18030; then grep '0x....$'; else cat; fi; } \
|
|
||||||
+ > ${objpfx}tst-${charset}.tmp2c.table
|
|
||||||
+cat ${objpfx}tst-${charset}.inverse.table \
|
|
||||||
+ | { if test ${charset} = GB18030; then grep '0x....$'; else cat; fi; } \
|
|
||||||
+ > ${objpfx}tst-${charset}.tmp2i.table
|
|
||||||
+cmp -s ${objpfx}tst-${charset}.tmp2c.table ${objpfx}tst-${charset}.tmp2i.table ||
|
|
||||||
exit 1
|
|
||||||
+
|
|
||||||
+# Check 3: the difference between iconv forward and iconv backward. This is
|
|
||||||
+# necessary only for GB18030, because ${objpfx}tst-${charset}.charmap.table
|
|
||||||
+# is truncated for this encoding (see above).
|
|
||||||
+if test ${charset} = GB18030; then
|
|
||||||
+ { if test -f ${irreversible}; then
|
|
||||||
+ cat ${objpfx}tst-${charset}.table ${irreversible} | sort | uniq -u
|
|
||||||
+ else
|
|
||||||
+ cat ${objpfx}tst-${charset}.table
|
|
||||||
+ fi
|
|
||||||
+ } > ${objpfx}tst-${charset}.tmp3.table
|
|
||||||
+ cmp -s ${objpfx}tst-${charset}.tmp3.table ${objpfx}tst-${charset}.inverse.table ||
|
|
||||||
+ exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
diff --git a/localedata/charmaps/GB18030 b/localedata/charmaps/GB18030
|
|
||||||
index ad6728c5..fc3b1d2d 100644
|
|
||||||
--- a/localedata/charmaps/GB18030
|
|
||||||
+++ b/localedata/charmaps/GB18030
|
|
||||||
@@ -57234,32 +57234,16 @@ CHARMAP
|
|
||||||
<UE78A> /xa6/xbe <Private Use>
|
|
||||||
<UE78B> /xa6/xbf <Private Use>
|
|
||||||
<UE78C> /xa6/xc0 <Private Use>
|
|
||||||
-% The newest GB 18030-2005 standard still uses some private use area
|
|
||||||
-% code points. Any implementation which has Unicode 4.1 or newer
|
|
||||||
-% support should not use these PUA code points, and instead should
|
|
||||||
-% map these entries to their equivalent non-PUA code points. There
|
|
||||||
-% are 24 idiograms in GB 18030-2005 which have non-PUA equivalents.
|
|
||||||
-% In glibc we only support roundtrip code points, and so must choose
|
|
||||||
-% between supporting the old PUA code points, or using the newer
|
|
||||||
-% non-PUA code points. We choose to use the non-PUA code points to
|
|
||||||
-% be compatible with ICU's similar choice. In choosing the non-PUA
|
|
||||||
-% code points we can no longer convert the old PUA code points back
|
|
||||||
-% to GB-18030-2005 (technically only fixable if we added support
|
|
||||||
-% for non-roundtrip code points e.g. ICU's "fallback mapping").
|
|
||||||
-% The recommendation to use the non-PUA code points, where available,
|
|
||||||
-% is based on "CJKV Information Processing" 2nd Ed. by Dr. Ken Lunde.
|
|
||||||
-%
|
|
||||||
-% These 10 PUA mappings use equivalents from <UFE10> to <UFE19>.
|
|
||||||
-% <UE78D> /xa6/xd9 <Private Use>
|
|
||||||
-% <UE78E> /xa6/xda <Private Use>
|
|
||||||
-% <UE78F> /xa6/xdb <Private Use>
|
|
||||||
-% <UE790> /xa6/xdc <Private Use>
|
|
||||||
-% <UE791> /xa6/xdd <Private Use>
|
|
||||||
-% <UE792> /xa6/xde <Private Use>
|
|
||||||
-% <UE793> /xa6/xdf <Private Use>
|
|
||||||
-% <UE794> /xa6/xec <Private Use>
|
|
||||||
-% <UE795> /xa6/xed <Private Use>
|
|
||||||
-% <UE796> /xa6/xf3 <Private Use>
|
|
||||||
+<UE78D> /x84/x31/x82/x36 <Private Use>
|
|
||||||
+<UE78E> /x84/x31/x82/x38 <Private Use>
|
|
||||||
+<UE78F> /x84/x31/x82/x37 <Private Use>
|
|
||||||
+<UE790> /x84/x31/x82/x39 <Private Use>
|
|
||||||
+<UE791> /x84/x31/x83/x30 <Private Use>
|
|
||||||
+<UE792> /x84/x31/x83/x31 <Private Use>
|
|
||||||
+<UE793> /x84/x31/x83/x32 <Private Use>
|
|
||||||
+<UE794> /x84/x31/x83/x33 <Private Use>
|
|
||||||
+<UE795> /x84/x31/x83/x34 <Private Use>
|
|
||||||
+<UE796> /x84/x31/x83/x35 <Private Use>
|
|
||||||
<UE797> /xa6/xf6 <Private Use>
|
|
||||||
<UE798> /xa6/xf7 <Private Use>
|
|
||||||
<UE799> /xa6/xf8 <Private Use>
|
|
||||||
@@ -57387,17 +57371,15 @@ CHARMAP
|
|
||||||
<UE813> /xd7/xfd <Private Use>
|
|
||||||
<UE814> /xd7/xfe <Private Use>
|
|
||||||
<UE815> /x83/x36/xc9/x34 <Private Use>
|
|
||||||
-% These 3 PUA mappings use equivalents <U20087>, <U20089> and <U200CC>.
|
|
||||||
-% <UE816> /xfe/x51 <Private Use>
|
|
||||||
-% <UE817> /xfe/x52 <Private Use>
|
|
||||||
-% <UE818> /xfe/x53 <Private Use>
|
|
||||||
+<UE816> /xfe/x51 <Private Use>
|
|
||||||
+<UE817> /xfe/x52 <Private Use>
|
|
||||||
+<UE818> /xfe/x53 <Private Use>
|
|
||||||
<UE819> /x83/x36/xc9/x35 <Private Use>
|
|
||||||
<UE81A> /x83/x36/xc9/x36 <Private Use>
|
|
||||||
<UE81B> /x83/x36/xc9/x37 <Private Use>
|
|
||||||
<UE81C> /x83/x36/xc9/x38 <Private Use>
|
|
||||||
<UE81D> /x83/x36/xc9/x39 <Private Use>
|
|
||||||
-% This 1 PUA mapping uses the equivalent <U9FB4>.
|
|
||||||
-% <UE81E> /xfe/x59 <Private Use>
|
|
||||||
+<UE81E> /x82/x35/x90/x37 <Private Use>
|
|
||||||
<UE81F> /x83/x36/xca/x30 <Private Use>
|
|
||||||
<UE820> /x83/x36/xca/x31 <Private Use>
|
|
||||||
<UE821> /x83/x36/xca/x32 <Private Use>
|
|
||||||
@@ -57405,22 +57387,19 @@ CHARMAP
|
|
||||||
<UE823> /x83/x36/xca/x34 <Private Use>
|
|
||||||
<UE824> /x83/x36/xca/x35 <Private Use>
|
|
||||||
<UE825> /x83/x36/xca/x36 <Private Use>
|
|
||||||
-% This 1 PUA mapping uses the equivalent <U9FB5>.
|
|
||||||
-% <UE826> /xfe/x61 <Private Use>
|
|
||||||
+<UE826> /x82/x35/x90/x38 <Private Use>
|
|
||||||
<UE827> /x83/x36/xca/x37 <Private Use>
|
|
||||||
<UE828> /x83/x36/xca/x38 <Private Use>
|
|
||||||
<UE829> /x83/x36/xca/x39 <Private Use>
|
|
||||||
<UE82A> /x83/x36/xcb/x30 <Private Use>
|
|
||||||
-% These 2 PUA mappings use the equivalents <U9FB6> and <U9FB7>.
|
|
||||||
-% <UE82B> /xfe/x66 <Private Use>
|
|
||||||
-% <UE82C> /xfe/x67 <Private Use>
|
|
||||||
+<UE82B> /x82/x35/x90/x39 <Private Use>
|
|
||||||
+<UE82C> /x82/x35/x91/x30 <Private Use>
|
|
||||||
<UE82D> /x83/x36/xcb/x31 <Private Use>
|
|
||||||
<UE82E> /x83/x36/xcb/x32 <Private Use>
|
|
||||||
<UE82F> /x83/x36/xcb/x33 <Private Use>
|
|
||||||
<UE830> /x83/x36/xcb/x34 <Private Use>
|
|
||||||
-% These 2 PUA mappings use the equivalents <U215D7> and <U9FB8>.
|
|
||||||
-% <UE831> /xfe/x6c <Private Use>
|
|
||||||
-% <UE832> /xfe/x6d <Private Use>
|
|
||||||
+<UE831> /xfe/x6c <Private Use>
|
|
||||||
+<UE832> /x82/x35/x91/x31 <Private Use>
|
|
||||||
<UE833> /x83/x36/xcb/x35 <Private Use>
|
|
||||||
<UE834> /x83/x36/xcb/x36 <Private Use>
|
|
||||||
<UE835> /x83/x36/xcb/x37 <Private Use>
|
|
||||||
@@ -57429,8 +57408,7 @@ CHARMAP
|
|
||||||
<UE838> /x83/x36/xcc/x30 <Private Use>
|
|
||||||
<UE839> /x83/x36/xcc/x31 <Private Use>
|
|
||||||
<UE83A> /x83/x36/xcc/x32 <Private Use>
|
|
||||||
-% This 1 PUA mapping uses the equivalent <U2298F>.
|
|
||||||
-% <UE83B> /xfe/x76 <Private Use>
|
|
||||||
+<UE83B> /xfe/x76 <Private Use>
|
|
||||||
<UE83C> /x83/x36/xcc/x33 <Private Use>
|
|
||||||
<UE83D> /x83/x36/xcc/x34 <Private Use>
|
|
||||||
<UE83E> /x83/x36/xcc/x35 <Private Use>
|
|
||||||
@@ -57438,8 +57416,7 @@ CHARMAP
|
|
||||||
<UE840> /x83/x36/xcc/x37 <Private Use>
|
|
||||||
<UE841> /x83/x36/xcc/x38 <Private Use>
|
|
||||||
<UE842> /x83/x36/xcc/x39 <Private Use>
|
|
||||||
-% This 1 PUA mapping uses the equivalent <U9FB9>.
|
|
||||||
-% <UE843> /xfe/x7e <Private Use>
|
|
||||||
+<UE843> /x82/x35/x91/x32 <Private Use>
|
|
||||||
<UE844> /x83/x36/xcd/x30 <Private Use>
|
|
||||||
<UE845> /x83/x36/xcd/x31 <Private Use>
|
|
||||||
<UE846> /x83/x36/xcd/x32 <Private Use>
|
|
||||||
@@ -57456,9 +57433,8 @@ CHARMAP
|
|
||||||
<UE851> /x83/x36/xce/x33 <Private Use>
|
|
||||||
<UE852> /x83/x36/xce/x34 <Private Use>
|
|
||||||
<UE853> /x83/x36/xce/x35 <Private Use>
|
|
||||||
-% These 2 PUA mappings use the equivalents <U9FBA> and <U241FE>.
|
|
||||||
-% <UE854> /xfe/x90 <Private Use>
|
|
||||||
-% <UE855> /xfe/x91 <Private Use>
|
|
||||||
+<UE854> /x82/x35/x91/x33 <Private Use>
|
|
||||||
+<UE855> /xfe/x91 <Private Use>
|
|
||||||
<UE856> /x83/x36/xce/x36 <Private Use>
|
|
||||||
<UE857> /x83/x36/xce/x37 <Private Use>
|
|
||||||
<UE858> /x83/x36/xce/x38 <Private Use>
|
|
||||||
@@ -57473,8 +57449,7 @@ CHARMAP
|
|
||||||
<UE861> /x83/x36/xcf/x37 <Private Use>
|
|
||||||
<UE862> /x83/x36/xcf/x38 <Private Use>
|
|
||||||
<UE863> /x83/x36/xcf/x39 <Private Use>
|
|
||||||
-% This 1 PUA mapping uses the equivalent <U9FBB>.
|
|
||||||
-% <UE864> /xfe/xa0 <Private Use>
|
|
||||||
+<UE864> /x82/x35/x91/x34 <Private Use>
|
|
||||||
<UE865> /x83/x36/xd0/x30 <Private Use>
|
|
||||||
<UE866> /x83/x36/xd0/x31 <Private Use>
|
|
||||||
<UE867> /x83/x36/xd0/x32 <Private Use>
|
|
||||||
@@ -70447,19 +70422,14 @@ CHARMAP
|
|
||||||
<U00020068>..<U00020071> /x95/x32/x8d/x30 <CJK>
|
|
||||||
<U00020072>..<U0002007B> /x95/x32/x8e/x30 <CJK>
|
|
||||||
<U0002007C>..<U00020085> /x95/x32/x8f/x30 <CJK>
|
|
||||||
-<U00020086> /x95/x32/x90/x30 <CJK>
|
|
||||||
-<U00020087> /xfe/x51 <CJK>
|
|
||||||
-<U00020088> /x95/x32/x90/x32 <CJK>
|
|
||||||
-<U00020089> /xfe/x52 <CJK>
|
|
||||||
-<U0002008A>..<U0002008F> /x95/x32/x90/x34 <CJK>
|
|
||||||
+<U00020086>..<U0002008F> /x95/x32/x90/x30 <CJK>
|
|
||||||
<U00020090>..<U00020099> /x95/x32/x91/x30 <CJK>
|
|
||||||
<U0002009A>..<U000200A3> /x95/x32/x92/x30 <CJK>
|
|
||||||
<U000200A4>..<U000200AD> /x95/x32/x93/x30 <CJK>
|
|
||||||
<U000200AE>..<U000200B7> /x95/x32/x94/x30 <CJK>
|
|
||||||
<U000200B8>..<U000200C1> /x95/x32/x95/x30 <CJK>
|
|
||||||
<U000200C2>..<U000200CB> /x95/x32/x96/x30 <CJK>
|
|
||||||
-<U000200CC> /xfe/x53 <CJK>
|
|
||||||
-<U000200CD>..<U000200D5> /x95/x32/x97/x31 <CJK>
|
|
||||||
+<U000200CC>..<U000200D5> /x95/x32/x97/x30 <CJK>
|
|
||||||
<U000200D6>..<U000200DF> /x95/x32/x98/x30 <CJK>
|
|
||||||
<U000200E0>..<U000200E9> /x95/x32/x99/x30 <CJK>
|
|
||||||
<U000200EA>..<U000200F3> /x95/x32/x9a/x30 <CJK>
|
|
||||||
@@ -70998,8 +70968,7 @@ CHARMAP
|
|
||||||
<U000215BC>..<U000215C5> /x95/x36/xb7/x30 <CJK>
|
|
||||||
<U000215C6>..<U000215CF> /x95/x36/xb8/x30 <CJK>
|
|
||||||
<U000215D0>..<U000215D6> /x95/x36/xb9/x30 <CJK>
|
|
||||||
-<U000215D7> /xfe/x6c <CJK>
|
|
||||||
-<U000215D8>..<U000215D9> /x95/x36/xb9/x38 <CJK>
|
|
||||||
+<U000215D7>..<U000215D9> /x95/x36/xb9/x37 <CJK>
|
|
||||||
<U000215DA>..<U000215E3> /x95/x36/xba/x30 <CJK>
|
|
||||||
<U000215E4>..<U000215ED> /x95/x36/xbb/x30 <CJK>
|
|
||||||
<U000215EE>..<U000215F7> /x95/x36/xbc/x30 <CJK>
|
|
||||||
@@ -71505,8 +71474,7 @@ CHARMAP
|
|
||||||
<U00022976>..<U0002297F> /x96/x30/xb8/x30 <CJK>
|
|
||||||
<U00022980>..<U00022989> /x96/x30/xb9/x30 <CJK>
|
|
||||||
<U0002298A>..<U0002298E> /x96/x30/xba/x30 <CJK>
|
|
||||||
-<U0002298F> /xfe/x76 <CJK>
|
|
||||||
-<U00022990>..<U00022993> /x96/x30/xba/x36 <CJK>
|
|
||||||
+<U0002298F>..<U00022993> /x96/x30/xba/x35 <CJK>
|
|
||||||
<U00022994>..<U0002299D> /x96/x30/xbb/x30 <CJK>
|
|
||||||
<U0002299E>..<U000229A7> /x96/x30/xbc/x30 <CJK>
|
|
||||||
<U000229A8>..<U000229B1> /x96/x30/xbd/x30 <CJK>
|
|
||||||
@@ -72132,8 +72100,7 @@ CHARMAP
|
|
||||||
<U000241E0>..<U000241E9> /x96/x35/xb3/x30 <CJK>
|
|
||||||
<U000241EA>..<U000241F3> /x96/x35/xb4/x30 <CJK>
|
|
||||||
<U000241F4>..<U000241FD> /x96/x35/xb5/x30 <CJK>
|
|
||||||
-<U000241FE> /xfe/x91 <CJK>
|
|
||||||
-<U000241FF>..<U00024207> /x96/x35/xb6/x31 <CJK>
|
|
||||||
+<U000241FE>..<U00024207> /x96/x35/xb6/x30 <CJK>
|
|
||||||
<U00024208>..<U00024211> /x96/x35/xb7/x30 <CJK>
|
|
||||||
<U00024212>..<U0002421B> /x96/x35/xb8/x30 <CJK>
|
|
||||||
<U0002421C>..<U00024225> /x96/x35/xb9/x30 <CJK>
|
|
187
glibc-rh2234713.patch
Normal file
187
glibc-rh2234713.patch
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
commit bd77dd7e73e3530203be1c52c8a29d08270cb25d
|
||||||
|
Author: Florian Weimer <fweimer@redhat.com>
|
||||||
|
Date: Wed Sep 13 14:10:56 2023 +0200
|
||||||
|
|
||||||
|
CVE-2023-4527: Stack read overflow with large TCP responses in no-aaaa mode
|
||||||
|
|
||||||
|
Without passing alt_dns_packet_buffer, __res_context_search can only
|
||||||
|
store 2048 bytes (what fits into dns_packet_buffer). However,
|
||||||
|
the function returns the total packet size, and the subsequent
|
||||||
|
DNS parsing code in _nss_dns_gethostbyname4_r reads beyond the end
|
||||||
|
of the stack-allocated buffer.
|
||||||
|
|
||||||
|
Fixes commit f282cdbe7f436c75864e5640a4 ("resolv: Implement no-aaaa
|
||||||
|
stub resolver option") and bug 30842.
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
resolv/nss_dns/dns-host.c
|
||||||
|
(missing dns_packet_buffer cleanup downstream)
|
||||||
|
|
||||||
|
diff --git a/resolv/Makefile b/resolv/Makefile
|
||||||
|
index ab8ad49b5318ad41..4f4eaf060443c128 100644
|
||||||
|
--- a/resolv/Makefile
|
||||||
|
+++ b/resolv/Makefile
|
||||||
|
@@ -58,6 +58,7 @@ tests += \
|
||||||
|
tst-resolv-edns \
|
||||||
|
tst-resolv-network \
|
||||||
|
tst-resolv-noaaaa \
|
||||||
|
+ tst-resolv-noaaaa-vc \
|
||||||
|
tst-resolv-nondecimal \
|
||||||
|
tst-resolv-res_init-multi \
|
||||||
|
tst-resolv-search \
|
||||||
|
@@ -202,6 +203,7 @@ $(objpfx)tst-resolv-res_init-multi: $(objpfx)libresolv.so \
|
||||||
|
$(objpfx)tst-resolv-res_init-thread: $(libdl) $(objpfx)libresolv.so \
|
||||||
|
$(shared-thread-library)
|
||||||
|
$(objpfx)tst-resolv-noaaaa: $(objpfx)libresolv.so $(shared-thread-library)
|
||||||
|
+$(objpfx)tst-resolv-noaaaa-vc: $(objpfx)libresolv.so $(shared-thread-library)
|
||||||
|
$(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)
|
||||||
|
$(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library)
|
||||||
|
$(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library)
|
||||||
|
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
|
||||||
|
index ff0a0b6f7f1f4703..f678c7d7caa3a026 100644
|
||||||
|
--- a/resolv/nss_dns/dns-host.c
|
||||||
|
+++ b/resolv/nss_dns/dns-host.c
|
||||||
|
@@ -392,7 +392,7 @@ _nss_dns_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n = __res_context_search (ctx, name, C_IN, T_A,
|
||||||
|
- host_buffer.buf->buf, 2048, NULL,
|
||||||
|
+ host_buffer.buf->buf, 2048, &host_buffer.ptr,
|
||||||
|
NULL, NULL, NULL, NULL);
|
||||||
|
if (n >= 0)
|
||||||
|
status = gaih_getanswer_noaaaa (host_buffer.buf, n,
|
||||||
|
diff --git a/resolv/tst-resolv-noaaaa-vc.c b/resolv/tst-resolv-noaaaa-vc.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000..9f5aebd99f2d74a2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/resolv/tst-resolv-noaaaa-vc.c
|
||||||
|
@@ -0,0 +1,129 @@
|
||||||
|
+/* Test the RES_NOAAAA resolver option with a large response.
|
||||||
|
+ Copyright (C) 2022-2023 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 <netdb.h>
|
||||||
|
+#include <resolv.h>
|
||||||
|
+#include <stdbool.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <support/check.h>
|
||||||
|
+#include <support/check_nss.h>
|
||||||
|
+#include <support/resolv_test.h>
|
||||||
|
+#include <support/support.h>
|
||||||
|
+#include <support/xmemstream.h>
|
||||||
|
+
|
||||||
|
+/* Used to keep track of the number of queries. */
|
||||||
|
+static volatile unsigned int queries;
|
||||||
|
+
|
||||||
|
+/* If true, add a large TXT record at the start of the answer section. */
|
||||||
|
+static volatile bool stuff_txt;
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+response (const struct resolv_response_context *ctx,
|
||||||
|
+ struct resolv_response_builder *b,
|
||||||
|
+ const char *qname, uint16_t qclass, uint16_t qtype)
|
||||||
|
+{
|
||||||
|
+ /* If not using TCP, just force its use. */
|
||||||
|
+ if (!ctx->tcp)
|
||||||
|
+ {
|
||||||
|
+ struct resolv_response_flags flags = {.tc = true};
|
||||||
|
+ resolv_response_init (b, flags);
|
||||||
|
+ resolv_response_add_question (b, qname, qclass, qtype);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* The test needs to send four queries, the first three are used to
|
||||||
|
+ grow the NSS buffer via the ERANGE handshake. */
|
||||||
|
+ ++queries;
|
||||||
|
+ TEST_VERIFY (queries <= 4);
|
||||||
|
+
|
||||||
|
+ /* AAAA queries are supposed to be disabled. */
|
||||||
|
+ TEST_COMPARE (qtype, T_A);
|
||||||
|
+ TEST_COMPARE (qclass, C_IN);
|
||||||
|
+ TEST_COMPARE_STRING (qname, "example.com");
|
||||||
|
+
|
||||||
|
+ struct resolv_response_flags flags = {};
|
||||||
|
+ resolv_response_init (b, flags);
|
||||||
|
+ resolv_response_add_question (b, qname, qclass, qtype);
|
||||||
|
+
|
||||||
|
+ resolv_response_section (b, ns_s_an);
|
||||||
|
+
|
||||||
|
+ if (stuff_txt)
|
||||||
|
+ {
|
||||||
|
+ resolv_response_open_record (b, qname, qclass, T_TXT, 60);
|
||||||
|
+ int zero = 0;
|
||||||
|
+ for (int i = 0; i <= 15000; ++i)
|
||||||
|
+ resolv_response_add_data (b, &zero, sizeof (zero));
|
||||||
|
+ resolv_response_close_record (b);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ for (int i = 0; i < 200; ++i)
|
||||||
|
+ {
|
||||||
|
+ resolv_response_open_record (b, qname, qclass, qtype, 60);
|
||||||
|
+ char ipv4[4] = {192, 0, 2, i + 1};
|
||||||
|
+ resolv_response_add_data (b, &ipv4, sizeof (ipv4));
|
||||||
|
+ resolv_response_close_record (b);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
+do_test (void)
|
||||||
|
+{
|
||||||
|
+ struct resolv_test *obj = resolv_test_start
|
||||||
|
+ ((struct resolv_redirect_config)
|
||||||
|
+ {
|
||||||
|
+ .response_callback = response
|
||||||
|
+ });
|
||||||
|
+
|
||||||
|
+ _res.options |= RES_NOAAAA;
|
||||||
|
+
|
||||||
|
+ for (int do_stuff_txt = 0; do_stuff_txt < 2; ++do_stuff_txt)
|
||||||
|
+ {
|
||||||
|
+ queries = 0;
|
||||||
|
+ stuff_txt = do_stuff_txt;
|
||||||
|
+
|
||||||
|
+ struct addrinfo *ai = NULL;
|
||||||
|
+ int ret;
|
||||||
|
+ ret = getaddrinfo ("example.com", "80",
|
||||||
|
+ &(struct addrinfo)
|
||||||
|
+ {
|
||||||
|
+ .ai_family = AF_UNSPEC,
|
||||||
|
+ .ai_socktype = SOCK_STREAM,
|
||||||
|
+ }, &ai);
|
||||||
|
+
|
||||||
|
+ char *expected_result;
|
||||||
|
+ {
|
||||||
|
+ struct xmemstream mem;
|
||||||
|
+ xopen_memstream (&mem);
|
||||||
|
+ for (int i = 0; i < 200; ++i)
|
||||||
|
+ fprintf (mem.out, "address: STREAM/TCP 192.0.2.%d 80\n", i + 1);
|
||||||
|
+ xfclose_memstream (&mem);
|
||||||
|
+ expected_result = mem.buffer;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ check_addrinfo ("example.com", ai, ret, expected_result);
|
||||||
|
+
|
||||||
|
+ free (expected_result);
|
||||||
|
+ freeaddrinfo (ai);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ resolv_test_end (obj);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#include <support/test-driver.c>
|
51
glibc.spec
51
glibc.spec
|
@ -1,7 +1,6 @@
|
||||||
%global anolis_release .0.4
|
|
||||||
%define glibcsrcdir glibc-2.28
|
%define glibcsrcdir glibc-2.28
|
||||||
%define glibcversion 2.28
|
%define glibcversion 2.28
|
||||||
%define glibcrelease 225%{anolis_release}%{?dist}
|
%define glibcrelease 225%{?dist}
|
||||||
# Pre-release tarballs are pulled in from git using a command that is
|
# Pre-release tarballs are pulled in from git using a command that is
|
||||||
# effectively:
|
# effectively:
|
||||||
#
|
#
|
||||||
|
@ -133,7 +132,7 @@ end \
|
||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: %{glibcversion}
|
Version: %{glibcversion}
|
||||||
Release: %{glibcrelease}
|
Release: %{glibcrelease}.6
|
||||||
|
|
||||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||||
# libraries.
|
# libraries.
|
||||||
|
@ -179,7 +178,6 @@ Source12: ChangeLog.old
|
||||||
|
|
||||||
Source13: wrap-find-debuginfo.sh
|
Source13: wrap-find-debuginfo.sh
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Activate the wrapper script for debuginfo generation, by rewriting
|
# Activate the wrapper script for debuginfo generation, by rewriting
|
||||||
# the definition of __debug_install_post.
|
# the definition of __debug_install_post.
|
||||||
|
@ -200,9 +198,6 @@ rpm.define("__find_debuginfo " .. wrapper .. " " .. sysroot .. " " .. original)
|
||||||
# - See each individual patch file for origin and upstream status.
|
# - See each individual patch file for origin and upstream status.
|
||||||
# - For new patches follow template.patch format.
|
# - For new patches follow template.patch format.
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# https://sourceware.org/bugzilla/show_bug.cgi?id=30243
|
|
||||||
Patch0: glibc-gb18030-2022-bug30243.patch
|
|
||||||
|
|
||||||
Patch2: glibc-fedora-nscd.patch
|
Patch2: glibc-fedora-nscd.patch
|
||||||
Patch3: glibc-rh697421.patch
|
Patch3: glibc-rh697421.patch
|
||||||
Patch4: glibc-fedora-linux-tcsetattr.patch
|
Patch4: glibc-fedora-linux-tcsetattr.patch
|
||||||
|
@ -1036,16 +1031,11 @@ Patch838: glibc-rh2142937-3.patch
|
||||||
Patch839: glibc-rh2144568.patch
|
Patch839: glibc-rh2144568.patch
|
||||||
Patch840: glibc-rh2154914-1.patch
|
Patch840: glibc-rh2154914-1.patch
|
||||||
Patch841: glibc-rh2154914-2.patch
|
Patch841: glibc-rh2154914-2.patch
|
||||||
|
# (Reverted fixes for rh2237433 were here.)
|
||||||
Patch842: glibc-Properly-check-stack-alignment-BZ-27901.patch
|
Patch848: glibc-rh2234713.patch
|
||||||
Patch843: glibc-elf-Properly-align-PT_LOAD-segments-BZ-28676-1.patch
|
Patch849: glibc-RHEL-2434.patch
|
||||||
Patch844: glibc-Add-a-testcase-to-check-alignment-of-PT_LOAD-segment-2.patch
|
Patch850: glibc-RHEL-2422.patch
|
||||||
Patch845: glibc-elf-Align-argument-of-__munmap-to-page-size-BZ-28676-3.patch
|
Patch851: glibc-RHEL-3035.patch
|
||||||
Patch846: glibc-Support-target-specific-ALIGN-for-variable-alignment-4.patch
|
|
||||||
Patch847: glibc-elf-Fix-tst-align3.patch
|
|
||||||
|
|
||||||
Patch848: glibc-Sync-to-lnd-35-for-LoongArch.patch
|
|
||||||
Patch849: Fix-tst-cancel21.c-to-suit-kernel-struct-sigcontext-.patch
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Continued list of core "glibc" package information:
|
# Continued list of core "glibc" package information:
|
||||||
|
@ -1726,11 +1716,6 @@ build()
|
||||||
%ifarch %{ix86}
|
%ifarch %{ix86}
|
||||||
--disable-multi-arch \
|
--disable-multi-arch \
|
||||||
%endif
|
%endif
|
||||||
%ifarch loongarch64
|
|
||||||
--enable-stackguard-randomization \
|
|
||||||
--with-selinux \
|
|
||||||
--enable-shared \
|
|
||||||
%endif
|
|
||||||
%if %{without werror}
|
%if %{without werror}
|
||||||
--disable-werror \
|
--disable-werror \
|
||||||
%endif
|
%endif
|
||||||
|
@ -2881,17 +2866,23 @@ fi
|
||||||
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Thu Aug 3 2023 Funda Wang <fundawang@yeah.net> - 2.28-225.0.4
|
* Wed Sep 20 2023 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.28-236.6
|
||||||
- Add patch for gb18030-2022 from upstream bug#30243
|
- CVE-2023-4911 glibc: buffer overflow in ld.so leading to privilege escalation (RHEL-3035)
|
||||||
|
|
||||||
* Mon Jul 31 2023 lixing <lixing@loongson.cn> - 2.28-225.0.3
|
* Tue Sep 19 2023 Carlos O'Donell <carlos@redhat.com> - 2.28-236.5
|
||||||
- Sync loongarch64 code to lnd.35.
|
- Revert: Always call destructors in reverse constructor order (#2237433)
|
||||||
|
|
||||||
* Wed Jul 19 2023 Rongwei Wang <rongwei.wang@linux.alibaba.com> - 2.28-225.0.2
|
* Mon Sep 18 2023 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.28-225.4
|
||||||
- elf: Properly align PT_LOAD segments
|
- CVE-2023-4806: potential use-after-free in getaddrinfo (RHEL-2422)
|
||||||
|
|
||||||
* Sat Jul 1 2023 Weisson <Weisson@linux.alibaba.com> - 2.28-225.0.1
|
* Fri Sep 15 2023 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.28-225.3
|
||||||
- Remove loongarch64.
|
- CVE-2023-4813: potential use-after-free in gaih_inet (RHEL-2434)
|
||||||
|
|
||||||
|
* Fri Sep 15 2023 Carlos O'Donell <carlos@redhat.com> - 2.28-225.2
|
||||||
|
- CVE-2023-4527: Stack read overflow in getaddrinfo in no-aaaa mode (#2234713)
|
||||||
|
|
||||||
|
* Tue Sep 12 2023 Florian Weimer <fweimer@redhat.com> - 2.28-225.1
|
||||||
|
- Always call destructors in reverse constructor order (#2237433)
|
||||||
|
|
||||||
* Fri Jan 20 2023 Florian Weimer <fweimer@redhat.com> - 2.28-225
|
* Fri Jan 20 2023 Florian Weimer <fweimer@redhat.com> - 2.28-225
|
||||||
- Enforce a specififc internal ordering for tunables (#2154914)
|
- Enforce a specififc internal ordering for tunables (#2154914)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue