forked from rpms/glibc
import glibc-2.28-223.el8
This commit is contained in:
parent
d7b7c4067c
commit
b3063e390f
101
SOURCES/glibc-rh2141989.patch
Normal file
101
SOURCES/glibc-rh2141989.patch
Normal file
@ -0,0 +1,101 @@
|
||||
This change is equivalent to this upstream change:
|
||||
|
||||
commit 22a46dee24351fd5f4f188ad80554cad79c82524
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Tue Nov 8 14:15:02 2022 +0100
|
||||
|
||||
Linux: Support __IPC_64 in sysvctl *ctl command arguments (bug 29771)
|
||||
|
||||
Old applications pass __IPC_64 as part of the command argument because
|
||||
old glibc did not check for unknown commands, and passed through the
|
||||
arguments directly to the kernel, without adding __IPC_64.
|
||||
Applications need to continue doing that for old glibc compatibility,
|
||||
so this commit enables this approach in current glibc.
|
||||
|
||||
For msgctl and shmctl, if no translation is required, make
|
||||
direct system calls, as we did before the time64 changes. If
|
||||
translation is required, mask __IPC_64 from the command argument.
|
||||
|
||||
For semctl, the union-in-vararg argument handling means that
|
||||
translation is needed on all architectures.
|
||||
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
The downstream versions of shmctl and msgctl did not produce
|
||||
errors because they lacked a -1 error return path. There is no
|
||||
translation requirement downstream on any architecture, so we
|
||||
can remove the switch from shmctl and msgctl.
|
||||
|
||||
For semctl, we have to do the varargs translation, so this patch adds
|
||||
the same masking as the upstream commit.
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/msgctl.c b/sysdeps/unix/sysv/linux/msgctl.c
|
||||
index 3362f4562f58f28b..7280cba31a8815a2 100644
|
||||
--- a/sysdeps/unix/sysv/linux/msgctl.c
|
||||
+++ b/sysdeps/unix/sysv/linux/msgctl.c
|
||||
@@ -29,20 +29,6 @@
|
||||
int
|
||||
__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
|
||||
{
|
||||
- switch (cmd)
|
||||
- {
|
||||
- case IPC_RMID:
|
||||
- case IPC_SET:
|
||||
- case IPC_STAT:
|
||||
- case MSG_STAT:
|
||||
- case MSG_STAT_ANY:
|
||||
- case IPC_INFO:
|
||||
- case MSG_INFO:
|
||||
- break;
|
||||
- default:
|
||||
- __set_errno (EINVAL);
|
||||
- return -1;
|
||||
- }
|
||||
#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||
return INLINE_SYSCALL_CALL (msgctl, msqid, cmd | __IPC_64, buf);
|
||||
#else
|
||||
diff --git a/sysdeps/unix/sysv/linux/semctl.c b/sysdeps/unix/sysv/linux/semctl.c
|
||||
index 03c56c69a5412c82..16d3f04fadd039ab 100644
|
||||
--- a/sysdeps/unix/sysv/linux/semctl.c
|
||||
+++ b/sysdeps/unix/sysv/linux/semctl.c
|
||||
@@ -42,6 +42,13 @@ __new_semctl (int semid, int semnum, int cmd, ...)
|
||||
union semun arg = { 0 };
|
||||
va_list ap;
|
||||
|
||||
+ /* Some applications pass the __IPC_64 flag in cmd, to invoke
|
||||
+ previously unsupported commands back when there was no EINVAL
|
||||
+ error checking in glibc. Mask the flag for the switch statements
|
||||
+ below. msgctl_syscall adds back the __IPC_64 flag for the actual
|
||||
+ system call. */
|
||||
+ cmd &= ~__IPC_64;
|
||||
+
|
||||
/* Get the argument only if required. */
|
||||
switch (cmd)
|
||||
{
|
||||
diff --git a/sysdeps/unix/sysv/linux/shmctl.c b/sysdeps/unix/sysv/linux/shmctl.c
|
||||
index 00768bc47614f9aa..25c5152944a6fcf3 100644
|
||||
--- a/sysdeps/unix/sysv/linux/shmctl.c
|
||||
+++ b/sysdeps/unix/sysv/linux/shmctl.c
|
||||
@@ -33,22 +33,6 @@
|
||||
int
|
||||
__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
|
||||
{
|
||||
- switch (cmd)
|
||||
- {
|
||||
- case IPC_RMID:
|
||||
- case SHM_LOCK:
|
||||
- case SHM_UNLOCK:
|
||||
- case IPC_SET:
|
||||
- case IPC_STAT:
|
||||
- case SHM_STAT:
|
||||
- case SHM_STAT_ANY:
|
||||
- case IPC_INFO:
|
||||
- case SHM_INFO:
|
||||
- break;
|
||||
- default:
|
||||
- __set_errno (EINVAL);
|
||||
- break;
|
||||
- }
|
||||
#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
|
||||
return INLINE_SYSCALL_CALL (shmctl, shmid, cmd | __IPC_64, buf);
|
||||
#else
|
354
SOURCES/glibc-rh2142937-1.patch
Normal file
354
SOURCES/glibc-rh2142937-1.patch
Normal file
@ -0,0 +1,354 @@
|
||||
commit 2fe64148a81f0d78050c302f34a6853d21f7cae4
|
||||
Author: DJ Delorie <dj@redhat.com>
|
||||
Date: Mon Mar 28 23:53:33 2022 -0400
|
||||
|
||||
Allow for unpriviledged nested containers
|
||||
|
||||
If the build itself is run in a container, we may not be able to
|
||||
fully set up a nested container for test-container testing.
|
||||
Notably is the mounting of /proc, since it's critical that it
|
||||
be mounted from within the same PID namespace as its users, and
|
||||
thus cannot be bind mounted from outside the container like other
|
||||
mounts.
|
||||
|
||||
This patch defaults to using the parent's PID namespace instead of
|
||||
creating a new one, as this is more likely to be allowed.
|
||||
|
||||
If the test needs an isolated PID namespace, it should add the "pidns"
|
||||
command to its init script.
|
||||
|
||||
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||
|
||||
Conflicts:
|
||||
nss/tst-reload2.c
|
||||
(not in RHEL-8)
|
||||
support/Makefile
|
||||
(RHEL-8 missing some routines in libsupport-routines)
|
||||
|
||||
diff --git a/elf/tst-pldd.c b/elf/tst-pldd.c
|
||||
index f381cb0fa7e6b93d..45ac033a0f897088 100644
|
||||
--- a/elf/tst-pldd.c
|
||||
+++ b/elf/tst-pldd.c
|
||||
@@ -85,6 +85,8 @@ in_str_list (const char *libname, const char *const strlist[])
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
+ support_need_proc ("needs /proc/sys/kernel/yama/ptrace_scope and /proc/$child");
|
||||
+
|
||||
/* Check if our subprocess can be debugged with ptrace. */
|
||||
{
|
||||
int ptrace_scope = support_ptrace_scope ();
|
||||
diff --git a/nptl/tst-pthread-getattr.c b/nptl/tst-pthread-getattr.c
|
||||
index 273b6073abe9cb60..f1c0b39f3a27724c 100644
|
||||
--- a/nptl/tst-pthread-getattr.c
|
||||
+++ b/nptl/tst-pthread-getattr.c
|
||||
@@ -28,6 +28,8 @@
|
||||
#include <unistd.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
+#include <support/support.h>
|
||||
+
|
||||
/* There is an obscure bug in the kernel due to which RLIMIT_STACK is sometimes
|
||||
returned as unlimited when it is not, which may cause this test to fail.
|
||||
There is also the other case where RLIMIT_STACK is intentionally set as
|
||||
@@ -152,6 +154,8 @@ check_stack_top (void)
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
+ support_need_proc ("Reads /proc/self/maps to get stack size.");
|
||||
+
|
||||
pagesize = sysconf (_SC_PAGESIZE);
|
||||
return check_stack_top ();
|
||||
}
|
||||
diff --git a/support/Makefile b/support/Makefile
|
||||
index 636d69c4f8e7e139..e184fccbe7d2310c 100644
|
||||
--- a/support/Makefile
|
||||
+++ b/support/Makefile
|
||||
@@ -59,6 +59,7 @@ libsupport-routines = \
|
||||
support_format_hostent \
|
||||
support_format_netent \
|
||||
support_isolate_in_subprocess \
|
||||
+ support_need_proc \
|
||||
support_process_state \
|
||||
support_ptrace \
|
||||
support_openpty \
|
||||
diff --git a/support/support.h b/support/support.h
|
||||
index 96833bd4e992e6d3..1466eb29f840fa59 100644
|
||||
--- a/support/support.h
|
||||
+++ b/support/support.h
|
||||
@@ -81,6 +81,11 @@ char *support_quote_string (const char *);
|
||||
regular file open for writing, and initially empty. */
|
||||
int support_descriptor_supports_holes (int fd);
|
||||
|
||||
+/* Predicates that a test requires a working /proc filesystem. This
|
||||
+ call will exit with UNSUPPORTED if /proc is not available, printing
|
||||
+ WHY_MSG as part of the diagnostic. */
|
||||
+void support_need_proc (const char *why_msg);
|
||||
+
|
||||
/* Error-checking wrapper functions which terminate the process on
|
||||
error. */
|
||||
|
||||
diff --git a/support/support_need_proc.c b/support/support_need_proc.c
|
||||
new file mode 100644
|
||||
index 0000000000000000..9b4eab7539b2d6c3
|
||||
--- /dev/null
|
||||
+++ b/support/support_need_proc.c
|
||||
@@ -0,0 +1,35 @@
|
||||
+/* Indicate that a test requires a working /proc.
|
||||
+ Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <unistd.h>
|
||||
+#include <support/check.h>
|
||||
+#include <support/support.h>
|
||||
+
|
||||
+/* We test for /proc/self/maps since that's one of the files that one
|
||||
+ of our tests actually uses, but the general idea is if Linux's
|
||||
+ /proc/ (procfs) filesystem is mounted. If not, the process exits
|
||||
+ with an UNSUPPORTED result code. */
|
||||
+
|
||||
+void
|
||||
+support_need_proc (const char *why_msg)
|
||||
+{
|
||||
+#ifdef __linux__
|
||||
+ if (access ("/proc/self/maps", R_OK))
|
||||
+ FAIL_UNSUPPORTED ("/proc is not available, %s", why_msg);
|
||||
+#endif
|
||||
+}
|
||||
diff --git a/support/test-container.c b/support/test-container.c
|
||||
index 9975c8cb7bc9a955..2bce4db841ff7668 100644
|
||||
--- a/support/test-container.c
|
||||
+++ b/support/test-container.c
|
||||
@@ -95,6 +95,7 @@ int verbose = 0;
|
||||
* mytest.root/mytest.script has a list of "commands" to run:
|
||||
syntax:
|
||||
# comment
|
||||
+ pidns <comment>
|
||||
su
|
||||
mv FILE FILE
|
||||
cp FILE FILE
|
||||
@@ -120,6 +121,8 @@ int verbose = 0;
|
||||
|
||||
details:
|
||||
- '#': A comment.
|
||||
+ - 'pidns': Require a separate PID namespace, prints comment if it can't
|
||||
+ (default is a shared pid namespace)
|
||||
- 'su': Enables running test as root in the container.
|
||||
- 'mv': A minimal move files command.
|
||||
- 'cp': A minimal copy files command.
|
||||
@@ -143,7 +146,7 @@ int verbose = 0;
|
||||
* Simple, easy to review code (i.e. prefer simple naive code over
|
||||
complex efficient code)
|
||||
|
||||
- * The current implementation ist parallel-make-safe, but only in
|
||||
+ * The current implementation is parallel-make-safe, but only in
|
||||
that it uses a lock to prevent parallel access to the testroot. */
|
||||
|
||||
|
||||
@@ -222,11 +225,37 @@ concat (const char *str, ...)
|
||||
return bufs[n];
|
||||
}
|
||||
|
||||
+/* Like the above, but put spaces between words. Caller frees. */
|
||||
+static char *
|
||||
+concat_words (char **words, int num_words)
|
||||
+{
|
||||
+ int len = 0;
|
||||
+ int i;
|
||||
+ char *rv, *p;
|
||||
+
|
||||
+ for (i = 0; i < num_words; i ++)
|
||||
+ {
|
||||
+ len += strlen (words[i]);
|
||||
+ len ++;
|
||||
+ }
|
||||
+
|
||||
+ p = rv = (char *) xmalloc (len);
|
||||
+
|
||||
+ for (i = 0; i < num_words; i ++)
|
||||
+ {
|
||||
+ if (i > 0)
|
||||
+ p = stpcpy (p, " ");
|
||||
+ p = stpcpy (p, words[i]);
|
||||
+ }
|
||||
+
|
||||
+ return rv;
|
||||
+}
|
||||
+
|
||||
/* Try to mount SRC onto DEST. */
|
||||
static void
|
||||
trymount (const char *src, const char *dest)
|
||||
{
|
||||
- if (mount (src, dest, "", MS_BIND, NULL) < 0)
|
||||
+ if (mount (src, dest, "", MS_BIND | MS_REC, NULL) < 0)
|
||||
FAIL_EXIT1 ("can't mount %s onto %s\n", src, dest);
|
||||
}
|
||||
|
||||
@@ -709,6 +738,9 @@ main (int argc, char **argv)
|
||||
gid_t original_gid;
|
||||
/* If set, the test runs as root instead of the user running the testsuite. */
|
||||
int be_su = 0;
|
||||
+ int require_pidns = 0;
|
||||
+ const char *pidns_comment = NULL;
|
||||
+ int do_proc_mounts = 0;
|
||||
int UMAP;
|
||||
int GMAP;
|
||||
/* Used for "%lld %lld 1" so need not be large. */
|
||||
@@ -991,6 +1023,12 @@ main (int argc, char **argv)
|
||||
{
|
||||
be_su = 1;
|
||||
}
|
||||
+ else if (nt >= 1 && strcmp (the_words[0], "pidns") == 0)
|
||||
+ {
|
||||
+ require_pidns = 1;
|
||||
+ if (nt > 1)
|
||||
+ pidns_comment = concat_words (the_words + 1, nt - 1);
|
||||
+ }
|
||||
else if (nt == 3 && strcmp (the_words[0], "mkdirp") == 0)
|
||||
{
|
||||
long int m;
|
||||
@@ -1048,7 +1086,8 @@ main (int argc, char **argv)
|
||||
|
||||
#ifdef CLONE_NEWNS
|
||||
/* The unshare here gives us our own spaces and capabilities. */
|
||||
- if (unshare (CLONE_NEWUSER | CLONE_NEWPID | CLONE_NEWNS) < 0)
|
||||
+ if (unshare (CLONE_NEWUSER | CLONE_NEWNS
|
||||
+ | (require_pidns ? CLONE_NEWPID : 0)) < 0)
|
||||
{
|
||||
/* Older kernels may not support all the options, or security
|
||||
policy may block this call. */
|
||||
@@ -1059,6 +1098,11 @@ main (int argc, char **argv)
|
||||
check_for_unshare_hints ();
|
||||
FAIL_UNSUPPORTED ("unable to unshare user/fs: %s", strerror (saved_errno));
|
||||
}
|
||||
+ /* We're about to exit anyway, it's "safe" to call unshare again
|
||||
+ just to see if the CLONE_NEWPID caused the error. */
|
||||
+ else if (require_pidns && unshare (CLONE_NEWUSER | CLONE_NEWNS) >= 0)
|
||||
+ FAIL_EXIT1 ("unable to unshare pid ns: %s : %s", strerror (errno),
|
||||
+ pidns_comment ? pidns_comment : "required by test");
|
||||
else
|
||||
FAIL_EXIT1 ("unable to unshare user/fs: %s", strerror (errno));
|
||||
}
|
||||
@@ -1074,6 +1118,15 @@ main (int argc, char **argv)
|
||||
trymount (support_srcdir_root, new_srcdir_path);
|
||||
trymount (support_objdir_root, new_objdir_path);
|
||||
|
||||
+ /* It may not be possible to mount /proc directly. */
|
||||
+ if (! require_pidns)
|
||||
+ {
|
||||
+ char *new_proc = concat (new_root_path, "/proc", NULL);
|
||||
+ xmkdirp (new_proc, 0755);
|
||||
+ trymount ("/proc", new_proc);
|
||||
+ do_proc_mounts = 1;
|
||||
+ }
|
||||
+
|
||||
xmkdirp (concat (new_root_path, "/dev", NULL), 0755);
|
||||
devmount (new_root_path, "null");
|
||||
devmount (new_root_path, "zero");
|
||||
@@ -1136,42 +1189,60 @@ main (int argc, char **argv)
|
||||
|
||||
maybe_xmkdir ("/tmp", 0755);
|
||||
|
||||
- /* Now that we're pid 1 (effectively "root") we can mount /proc */
|
||||
- maybe_xmkdir ("/proc", 0777);
|
||||
- if (mount ("proc", "/proc", "proc", 0, NULL) < 0)
|
||||
- FAIL_EXIT1 ("Unable to mount /proc: ");
|
||||
-
|
||||
- /* We map our original UID to the same UID in the container so we
|
||||
- can own our own files normally. */
|
||||
- UMAP = open ("/proc/self/uid_map", O_WRONLY);
|
||||
- if (UMAP < 0)
|
||||
- FAIL_EXIT1 ("can't write to /proc/self/uid_map\n");
|
||||
-
|
||||
- sprintf (tmp, "%lld %lld 1\n",
|
||||
- (long long) (be_su ? 0 : original_uid), (long long) original_uid);
|
||||
- write (UMAP, tmp, strlen (tmp));
|
||||
- xclose (UMAP);
|
||||
-
|
||||
- /* We must disable setgroups () before we can map our groups, else we
|
||||
- get EPERM. */
|
||||
- GMAP = open ("/proc/self/setgroups", O_WRONLY);
|
||||
- if (GMAP >= 0)
|
||||
+ if (require_pidns)
|
||||
{
|
||||
- /* We support kernels old enough to not have this. */
|
||||
- write (GMAP, "deny\n", 5);
|
||||
- xclose (GMAP);
|
||||
+ /* Now that we're pid 1 (effectively "root") we can mount /proc */
|
||||
+ maybe_xmkdir ("/proc", 0777);
|
||||
+ if (mount ("proc", "/proc", "proc", 0, NULL) != 0)
|
||||
+ {
|
||||
+ /* This happens if we're trying to create a nested container,
|
||||
+ like if the build is running under podman, and we lack
|
||||
+ priviledges.
|
||||
+
|
||||
+ Ideally we would WARN here, but that would just add noise to
|
||||
+ *every* test-container test, and the ones that care should
|
||||
+ have their own relevent diagnostics.
|
||||
+
|
||||
+ FAIL_EXIT1 ("Unable to mount /proc: "); */
|
||||
+ }
|
||||
+ else
|
||||
+ do_proc_mounts = 1;
|
||||
}
|
||||
|
||||
- /* We map our original GID to the same GID in the container so we
|
||||
- can own our own files normally. */
|
||||
- GMAP = open ("/proc/self/gid_map", O_WRONLY);
|
||||
- if (GMAP < 0)
|
||||
- FAIL_EXIT1 ("can't write to /proc/self/gid_map\n");
|
||||
+ if (do_proc_mounts)
|
||||
+ {
|
||||
+ /* We map our original UID to the same UID in the container so we
|
||||
+ can own our own files normally. */
|
||||
+ UMAP = open ("/proc/self/uid_map", O_WRONLY);
|
||||
+ if (UMAP < 0)
|
||||
+ FAIL_EXIT1 ("can't write to /proc/self/uid_map\n");
|
||||
+
|
||||
+ sprintf (tmp, "%lld %lld 1\n",
|
||||
+ (long long) (be_su ? 0 : original_uid), (long long) original_uid);
|
||||
+ write (UMAP, tmp, strlen (tmp));
|
||||
+ xclose (UMAP);
|
||||
+
|
||||
+ /* We must disable setgroups () before we can map our groups, else we
|
||||
+ get EPERM. */
|
||||
+ GMAP = open ("/proc/self/setgroups", O_WRONLY);
|
||||
+ if (GMAP >= 0)
|
||||
+ {
|
||||
+ /* We support kernels old enough to not have this. */
|
||||
+ write (GMAP, "deny\n", 5);
|
||||
+ xclose (GMAP);
|
||||
+ }
|
||||
|
||||
- sprintf (tmp, "%lld %lld 1\n",
|
||||
- (long long) (be_su ? 0 : original_gid), (long long) original_gid);
|
||||
- write (GMAP, tmp, strlen (tmp));
|
||||
- xclose (GMAP);
|
||||
+ /* We map our original GID to the same GID in the container so we
|
||||
+ can own our own files normally. */
|
||||
+ GMAP = open ("/proc/self/gid_map", O_WRONLY);
|
||||
+ if (GMAP < 0)
|
||||
+ FAIL_EXIT1 ("can't write to /proc/self/gid_map\n");
|
||||
+
|
||||
+ sprintf (tmp, "%lld %lld 1\n",
|
||||
+ (long long) (be_su ? 0 : original_gid), (long long) original_gid);
|
||||
+ write (GMAP, tmp, strlen (tmp));
|
||||
+ xclose (GMAP);
|
||||
+ }
|
||||
|
||||
if (change_cwd)
|
||||
{
|
24
SOURCES/glibc-rh2142937-2.patch
Normal file
24
SOURCES/glibc-rh2142937-2.patch
Normal file
@ -0,0 +1,24 @@
|
||||
commit b2cd93fce666fdc8c9a5c64af2741a8a6940ac99
|
||||
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Fri Mar 25 11:16:49 2022 -0300
|
||||
|
||||
elf: Fix wrong fscanf usage on tst-pldd
|
||||
|
||||
To take in consideration the extra '\0'.
|
||||
|
||||
Checked on x86_64-linux-gnu.
|
||||
|
||||
diff --git a/elf/tst-pldd.c b/elf/tst-pldd.c
|
||||
index 45ac033a0f897088..ab89798e250fdccc 100644
|
||||
--- a/elf/tst-pldd.c
|
||||
+++ b/elf/tst-pldd.c
|
||||
@@ -115,7 +115,8 @@ do_test (void)
|
||||
TEST_VERIFY (out != NULL);
|
||||
|
||||
/* First line is in the form of <pid>: <full path of executable> */
|
||||
- TEST_COMPARE (fscanf (out, "%u: " STRINPUT (512), &pid, buffer), 2);
|
||||
+ TEST_COMPARE (fscanf (out, "%u: " STRINPUT (sizeof (buffer) - 1), &pid,
|
||||
+ buffer), 2);
|
||||
|
||||
TEST_COMPARE (pid, *target_pid_ptr);
|
||||
TEST_COMPARE (strcmp (basename (buffer), "tst-pldd"), 0);
|
37
SOURCES/glibc-rh2142937-3.patch
Normal file
37
SOURCES/glibc-rh2142937-3.patch
Normal file
@ -0,0 +1,37 @@
|
||||
commit c353689e49e72f3aafa1a9e68d4f7a4f33a79cbe
|
||||
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Tue Jul 5 12:58:40 2022 -0300
|
||||
|
||||
elf: Fix wrong fscanf usage on tst-pldd
|
||||
|
||||
The fix done b2cd93fce666fdc8c9a5c64af2741a8a6940ac99 does not really
|
||||
work since macro strification does not expand the sizeof nor the
|
||||
arithmetic operation.
|
||||
|
||||
Checked on x86_64-linux-gnu.
|
||||
|
||||
diff --git a/elf/tst-pldd.c b/elf/tst-pldd.c
|
||||
index ab89798e250fdccc..52c0a75be5a808d1 100644
|
||||
--- a/elf/tst-pldd.c
|
||||
+++ b/elf/tst-pldd.c
|
||||
@@ -108,15 +108,16 @@ do_test (void)
|
||||
loader and libc. */
|
||||
{
|
||||
pid_t pid;
|
||||
- char buffer[512];
|
||||
-#define STRINPUT(size) "%" # size "s"
|
||||
+#define BUFFERLEN 511
|
||||
+ char buffer[BUFFERLEN + 1];
|
||||
+#define STRINPUT(size) XSTRINPUT(size)
|
||||
+#define XSTRINPUT(size) "%" # size "s"
|
||||
|
||||
FILE *out = fmemopen (pldd.out.buffer, pldd.out.length, "r");
|
||||
TEST_VERIFY (out != NULL);
|
||||
|
||||
/* First line is in the form of <pid>: <full path of executable> */
|
||||
- TEST_COMPARE (fscanf (out, "%u: " STRINPUT (sizeof (buffer) - 1), &pid,
|
||||
- buffer), 2);
|
||||
+ TEST_COMPARE (fscanf (out, "%u: " STRINPUT (BUFFERLEN), &pid, buffer), 2);
|
||||
|
||||
TEST_COMPARE (pid, *target_pid_ptr);
|
||||
TEST_COMPARE (strcmp (basename (buffer), "tst-pldd"), 0);
|
@ -1,6 +1,6 @@
|
||||
%define glibcsrcdir glibc-2.28
|
||||
%define glibcversion 2.28
|
||||
%define glibcrelease 221%{?dist}
|
||||
%define glibcrelease 223%{?dist}
|
||||
# Pre-release tarballs are pulled in from git using a command that is
|
||||
# effectively:
|
||||
#
|
||||
@ -1024,6 +1024,10 @@ Patch831: glibc-rh1159809-9.patch
|
||||
Patch832: glibc-rh1159809-10.patch
|
||||
Patch833: glibc-rh1159809-11.patch
|
||||
Patch834: glibc-rh1159809-12.patch
|
||||
Patch835: glibc-rh2141989.patch
|
||||
Patch836: glibc-rh2142937-1.patch
|
||||
Patch837: glibc-rh2142937-2.patch
|
||||
Patch838: glibc-rh2142937-3.patch
|
||||
|
||||
##############################################################################
|
||||
# Continued list of core "glibc" package information:
|
||||
@ -2854,6 +2858,12 @@ fi
|
||||
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
||||
|
||||
%changelog
|
||||
* Fri Nov 25 2022 Arjun Shankar <arjun@redhat.com> - 2.28-223
|
||||
- Backport upstream fixes to tst-pldd (#2142937)
|
||||
|
||||
* Tue Nov 22 2022 Florian Weimer <fweimer@redhat.com> - 2.28-222
|
||||
- Restore IPC_64 support in sysvipc *ctl functions (#2141989)
|
||||
|
||||
* Fri Nov 18 2022 Florian Weimer <fweimer@redhat.com> - 2.28-221
|
||||
- Switch to fast DSO dependency sorting algorithm (#1159809)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user