forked from rpms/glibc
Import glibc-2.34-24.fc35 from f35
* Thu Feb 3 2022 Florian Weimer <fweimer@redhat.com> - 2.34-25 - Sync with upstream branch release/2.34/master, commit 6eaf10cbb78d22eae7999d9de55f6b93999e0860: - socket: Do not use AF_NETLINK in __opensock - hurd if_index: Explicitly use AF_INET for if index discovery - Linux: Simplify __opensock and fix race condition [BZ #28353] - linux: __get_nprocs_sched: do not feed CPU_COUNT_S with garbage [BZ #28850] Related: #2037056
This commit is contained in:
parent
234a1c0ad2
commit
63da4f7958
26
glibc-upstream-2.34-104.patch
Normal file
26
glibc-upstream-2.34-104.patch
Normal file
@ -0,0 +1,26 @@
|
||||
commit 05c83ccaf50aef2dd30d92cbb814383f6bddea2c
|
||||
Author: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
|
||||
Date: Tue Feb 1 22:39:02 2022 +0000
|
||||
|
||||
linux: __get_nprocs_sched: do not feed CPU_COUNT_S with garbage [BZ #28850]
|
||||
|
||||
Pass the actual number of bytes returned by the kernel.
|
||||
|
||||
Fixes: 33099d72e41c ("linux: Simplify get_nprocs")
|
||||
Reviewed-by: Dmitry V. Levin <ldv@altlinux.org>
|
||||
|
||||
(cherry picked from commit 97ba273b505763325efd802dc3a9562dbba79579)
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
|
||||
index 7fc6521942e87293..7babd947aa902e77 100644
|
||||
--- a/sysdeps/unix/sysv/linux/getsysstats.c
|
||||
+++ b/sysdeps/unix/sysv/linux/getsysstats.c
|
||||
@@ -45,7 +45,7 @@ __get_nprocs_sched (void)
|
||||
int r = INTERNAL_SYSCALL_CALL (sched_getaffinity, 0, cpu_bits_size,
|
||||
cpu_bits);
|
||||
if (r > 0)
|
||||
- return CPU_COUNT_S (cpu_bits_size, (cpu_set_t*) cpu_bits);
|
||||
+ return CPU_COUNT_S (r, (cpu_set_t*) cpu_bits);
|
||||
else if (r == -EINVAL)
|
||||
/* The input buffer is still not enough to store the number of cpus. This
|
||||
is an arbitrary values assuming such systems should be rare and there
|
234
glibc-upstream-2.34-105.patch
Normal file
234
glibc-upstream-2.34-105.patch
Normal file
@ -0,0 +1,234 @@
|
||||
commit ad615b59c78d6d37fee921fb2b2ae6b72c930625
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Tue Sep 28 18:55:49 2021 +0200
|
||||
|
||||
Linux: Simplify __opensock and fix race condition [BZ #28353]
|
||||
|
||||
AF_NETLINK support is not quite optional on modern Linux systems
|
||||
anymore, so it is likely that the first attempt will always succeed.
|
||||
Consequently, there is no need to cache the result. Keep AF_UNIX
|
||||
and the Internet address families as a fallback, for the rare case
|
||||
that AF_NETLINK is missing. The other address families previously
|
||||
probed are totally obsolete be now, so remove them.
|
||||
|
||||
Use this simplified version as the generic implementation, disabling
|
||||
Netlink support as needed.
|
||||
|
||||
(cherry picked from commit 5bf07e1b3a74232bfb8332275110be1a5da50f83)
|
||||
|
||||
diff --git a/socket/opensock.c b/socket/opensock.c
|
||||
index 37148d4743343ff4..ff94d27a61bd3889 100644
|
||||
--- a/socket/opensock.c
|
||||
+++ b/socket/opensock.c
|
||||
@@ -1,4 +1,5 @@
|
||||
-/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
|
||||
+/* Create socket with an unspecified address family for use with ioctl.
|
||||
+ Copyright (C) 1999-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,56 +16,34 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
-#include <stdio.h>
|
||||
+#include <errno.h>
|
||||
#include <sys/socket.h>
|
||||
-#include <libc-lock.h>
|
||||
|
||||
/* Return a socket of any type. The socket can be used in subsequent
|
||||
ioctl calls to talk to the kernel. */
|
||||
int
|
||||
__opensock (void)
|
||||
{
|
||||
- /* Cache the last AF that worked, to avoid many redundant calls to
|
||||
- socket(). */
|
||||
- static int sock_af = -1;
|
||||
- int fd = -1;
|
||||
- __libc_lock_define_initialized (static, lock);
|
||||
-
|
||||
- if (sock_af != -1)
|
||||
- {
|
||||
- fd = __socket (sock_af, SOCK_DGRAM, 0);
|
||||
- if (fd != -1)
|
||||
- return fd;
|
||||
- }
|
||||
-
|
||||
- __libc_lock_lock (lock);
|
||||
-
|
||||
- if (sock_af != -1)
|
||||
- fd = __socket (sock_af, SOCK_DGRAM, 0);
|
||||
-
|
||||
- if (fd == -1)
|
||||
- {
|
||||
-#ifdef AF_INET
|
||||
- fd = __socket (sock_af = AF_INET, SOCK_DGRAM, 0);
|
||||
-#endif
|
||||
-#ifdef AF_INET6
|
||||
- if (fd < 0)
|
||||
- fd = __socket (sock_af = AF_INET6, SOCK_DGRAM, 0);
|
||||
-#endif
|
||||
-#ifdef AF_IPX
|
||||
- if (fd < 0)
|
||||
- fd = __socket (sock_af = AF_IPX, SOCK_DGRAM, 0);
|
||||
-#endif
|
||||
-#ifdef AF_AX25
|
||||
- if (fd < 0)
|
||||
- fd = __socket (sock_af = AF_AX25, SOCK_DGRAM, 0);
|
||||
-#endif
|
||||
-#ifdef AF_APPLETALK
|
||||
- if (fd < 0)
|
||||
- fd = __socket (sock_af = AF_APPLETALK, SOCK_DGRAM, 0);
|
||||
+ /* SOCK_DGRAM is supported by all address families. (Netlink does
|
||||
+ not support SOCK_STREAM.) */
|
||||
+ int type = SOCK_DGRAM | SOCK_CLOEXEC;
|
||||
+ int fd;
|
||||
+
|
||||
+#ifdef AF_NETLINK
|
||||
+ fd = __socket (AF_NETLINK, type, 0);
|
||||
+ if (fd >= 0)
|
||||
+ return fd;
|
||||
#endif
|
||||
- }
|
||||
|
||||
- __libc_lock_unlock (lock);
|
||||
+ fd = __socket (AF_UNIX, type, 0);
|
||||
+ if (fd >= 0)
|
||||
+ return fd;
|
||||
+ fd = __socket (AF_INET, type, 0);
|
||||
+ if (fd >= 0)
|
||||
+ return fd;
|
||||
+ fd = __socket (AF_INET6, type, 0);
|
||||
+ if (fd >= 0)
|
||||
+ return fd;
|
||||
+ __set_errno (ENOENT);
|
||||
return fd;
|
||||
}
|
||||
diff --git a/sysdeps/unix/sysv/linux/opensock.c b/sysdeps/unix/sysv/linux/opensock.c
|
||||
deleted file mode 100644
|
||||
index e87d6e58b0b84f82..0000000000000000
|
||||
--- a/sysdeps/unix/sysv/linux/opensock.c
|
||||
+++ /dev/null
|
||||
@@ -1,114 +0,0 @@
|
||||
-/* Copyright (C) 1999-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 <assert.h>
|
||||
-#include <errno.h>
|
||||
-#include <stdio.h>
|
||||
-#include <string.h>
|
||||
-#include <unistd.h>
|
||||
-#include <sys/socket.h>
|
||||
-
|
||||
-/* Return a socket of any type. The socket can be used in subsequent
|
||||
- ioctl calls to talk to the kernel. */
|
||||
-int
|
||||
-__opensock (void)
|
||||
-{
|
||||
- static int last_family; /* Available socket family we will use. */
|
||||
- static int last_type;
|
||||
- static const struct
|
||||
- {
|
||||
- int family;
|
||||
- const char procname[15];
|
||||
- } afs[] =
|
||||
- {
|
||||
- { AF_UNIX, "net/unix" },
|
||||
- { AF_INET, "" },
|
||||
- { AF_INET6, "net/if_inet6" },
|
||||
- { AF_AX25, "net/ax25" },
|
||||
- { AF_NETROM, "net/nr" },
|
||||
- { AF_ROSE, "net/rose" },
|
||||
- { AF_IPX, "net/ipx" },
|
||||
- { AF_APPLETALK, "net/appletalk" },
|
||||
- { AF_ECONET, "sys/net/econet" },
|
||||
- { AF_ASH, "sys/net/ash" },
|
||||
- { AF_X25, "net/x25" },
|
||||
-#ifdef NEED_AF_IUCV
|
||||
- { AF_IUCV, "net/iucv" }
|
||||
-#endif
|
||||
- };
|
||||
-#define nafs (sizeof (afs) / sizeof (afs[0]))
|
||||
- char fname[sizeof "/proc/" + 14];
|
||||
- int result;
|
||||
- int has_proc;
|
||||
- size_t cnt;
|
||||
-
|
||||
- /* We already know which family to use from the last call. Use it
|
||||
- again. */
|
||||
- if (last_family != 0)
|
||||
- {
|
||||
- assert (last_type != 0);
|
||||
-
|
||||
- result = __socket (last_family, last_type | SOCK_CLOEXEC, 0);
|
||||
- if (result != -1 || errno != EAFNOSUPPORT)
|
||||
- /* Maybe the socket type isn't supported anymore (module is
|
||||
- unloaded). In this case again try to find the type. */
|
||||
- return result;
|
||||
-
|
||||
- /* Reset the values. They seem not valid anymore. */
|
||||
- last_family = 0;
|
||||
- last_type = 0;
|
||||
- }
|
||||
-
|
||||
- /* Check whether the /proc filesystem is available. */
|
||||
- has_proc = __access ("/proc/net", R_OK) != -1;
|
||||
- strcpy (fname, "/proc/");
|
||||
-
|
||||
- /* Iterate over the interface families and find one which is
|
||||
- available. */
|
||||
- for (cnt = 0; cnt < nafs; ++cnt)
|
||||
- {
|
||||
- int type = SOCK_DGRAM;
|
||||
-
|
||||
- if (has_proc && afs[cnt].procname[0] != '\0')
|
||||
- {
|
||||
- strcpy (fname + 6, afs[cnt].procname);
|
||||
- if (__access (fname, R_OK) == -1)
|
||||
- /* The /proc entry is not available. I.e., we cannot
|
||||
- create a socket of this type (without loading the
|
||||
- module). Don't look for it since this might trigger
|
||||
- loading the module. */
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
- if (afs[cnt].family == AF_NETROM || afs[cnt].family == AF_X25)
|
||||
- type = SOCK_SEQPACKET;
|
||||
-
|
||||
- result = __socket (afs[cnt].family, type | SOCK_CLOEXEC, 0);
|
||||
- if (result != -1)
|
||||
- {
|
||||
- /* Found an available family. */
|
||||
- last_type = type;
|
||||
- last_family = afs[cnt].family;
|
||||
- return result;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- /* None of the protocol families is available. It is unclear what kind
|
||||
- of error is returned. ENOENT seems like a reasonable choice. */
|
||||
- __set_errno (ENOENT);
|
||||
- return -1;
|
||||
-}
|
||||
diff --git a/sysdeps/unix/sysv/linux/s390/opensock.c b/sysdeps/unix/sysv/linux/s390/opensock.c
|
||||
deleted file mode 100644
|
||||
index f099d651ff04d211..0000000000000000
|
||||
--- a/sysdeps/unix/sysv/linux/s390/opensock.c
|
||||
+++ /dev/null
|
||||
@@ -1,2 +0,0 @@
|
||||
-#define NEED_AF_IUCV 1
|
||||
-#include "../opensock.c"
|
44
glibc-upstream-2.34-106.patch
Normal file
44
glibc-upstream-2.34-106.patch
Normal file
@ -0,0 +1,44 @@
|
||||
commit d8302ba2da1e5ac59a1c4dc1c1207a10fdafdb08
|
||||
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
Date: Mon Oct 18 01:39:02 2021 +0200
|
||||
|
||||
hurd if_index: Explicitly use AF_INET for if index discovery
|
||||
|
||||
5bf07e1b3a74 ("Linux: Simplify __opensock and fix race condition [BZ #28353]")
|
||||
made __opensock try NETLINK then UNIX then INET. On the Hurd, only INET
|
||||
knows about network interfaces, so better actually specify that in
|
||||
if_index.
|
||||
|
||||
(cherry picked from commit 1d3decee997ba2fc24af81803299b2f4f3c47063)
|
||||
|
||||
diff --git a/sysdeps/mach/hurd/if_index.c b/sysdeps/mach/hurd/if_index.c
|
||||
index 0eab510453c9e861..e785ac15aa6a1002 100644
|
||||
--- a/sysdeps/mach/hurd/if_index.c
|
||||
+++ b/sysdeps/mach/hurd/if_index.c
|
||||
@@ -32,7 +32,7 @@ unsigned int
|
||||
__if_nametoindex (const char *ifname)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
- int fd = __opensock ();
|
||||
+ int fd = __socket (AF_INET, SOCK_DGRAM, 0);
|
||||
|
||||
if (fd < 0)
|
||||
return 0;
|
||||
@@ -84,7 +84,7 @@ __if_nameindex (void)
|
||||
error_t err = 0;
|
||||
char data[2048];
|
||||
file_t server;
|
||||
- int fd = __opensock ();
|
||||
+ int fd = __socket (AF_INET, SOCK_DGRAM, 0);
|
||||
struct ifconf ifc;
|
||||
unsigned int nifs, i;
|
||||
struct if_nameindex *idx = NULL;
|
||||
@@ -169,7 +169,7 @@ char *
|
||||
__if_indextoname (unsigned int ifindex, char ifname[IF_NAMESIZE])
|
||||
{
|
||||
struct ifreq ifr;
|
||||
- int fd = __opensock ();
|
||||
+ int fd = __socket (AF_INET, SOCK_DGRAM, 0);
|
||||
|
||||
if (fd < 0)
|
||||
return NULL;
|
35
glibc-upstream-2.34-107.patch
Normal file
35
glibc-upstream-2.34-107.patch
Normal file
@ -0,0 +1,35 @@
|
||||
commit 6eaf10cbb78d22eae7999d9de55f6b93999e0860
|
||||
Author: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Mon Nov 22 14:41:14 2021 +0100
|
||||
|
||||
socket: Do not use AF_NETLINK in __opensock
|
||||
|
||||
It is not possible to use interface ioctls with netlink sockets
|
||||
on all Linux kernels.
|
||||
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
(cherry picked from commit 3d981795cd00cc9b73c3ee5087c308361acd62e5)
|
||||
|
||||
diff --git a/socket/opensock.c b/socket/opensock.c
|
||||
index ff94d27a61bd3889..3e35821f91643456 100644
|
||||
--- a/socket/opensock.c
|
||||
+++ b/socket/opensock.c
|
||||
@@ -24,17 +24,10 @@
|
||||
int
|
||||
__opensock (void)
|
||||
{
|
||||
- /* SOCK_DGRAM is supported by all address families. (Netlink does
|
||||
- not support SOCK_STREAM.) */
|
||||
+ /* SOCK_DGRAM is supported by all address families. */
|
||||
int type = SOCK_DGRAM | SOCK_CLOEXEC;
|
||||
int fd;
|
||||
|
||||
-#ifdef AF_NETLINK
|
||||
- fd = __socket (AF_NETLINK, type, 0);
|
||||
- if (fd >= 0)
|
||||
- return fd;
|
||||
-#endif
|
||||
-
|
||||
fd = __socket (AF_UNIX, type, 0);
|
||||
if (fd >= 0)
|
||||
return fd;
|
14
glibc.spec
14
glibc.spec
@ -148,7 +148,7 @@ end \
|
||||
Summary: The GNU libc libraries
|
||||
Name: glibc
|
||||
Version: %{glibcversion}
|
||||
Release: 24%{?dist}
|
||||
Release: 25%{?dist}
|
||||
|
||||
# In general, GPLv2+ is used by programs, LGPLv2+ is used for
|
||||
# libraries.
|
||||
@ -371,6 +371,10 @@ Patch166: glibc-upstream-2.34-100.patch
|
||||
Patch167: glibc-upstream-2.34-101.patch
|
||||
Patch168: glibc-upstream-2.34-102.patch
|
||||
Patch169: glibc-upstream-2.34-103.patch
|
||||
Patch170: glibc-upstream-2.34-104.patch
|
||||
Patch171: glibc-upstream-2.34-105.patch
|
||||
Patch172: glibc-upstream-2.34-106.patch
|
||||
Patch173: glibc-upstream-2.34-107.patch
|
||||
|
||||
##############################################################################
|
||||
# Continued list of core "glibc" package information:
|
||||
@ -2414,6 +2418,14 @@ fi
|
||||
%files -f compat-libpthread-nonshared.filelist -n compat-libpthread-nonshared
|
||||
|
||||
%changelog
|
||||
* Thu Feb 3 2022 Florian Weimer <fweimer@redhat.com> - 2.34-25
|
||||
- Sync with upstream branch release/2.34/master,
|
||||
commit 6eaf10cbb78d22eae7999d9de55f6b93999e0860:
|
||||
- socket: Do not use AF_NETLINK in __opensock
|
||||
- hurd if_index: Explicitly use AF_INET for if index discovery
|
||||
- Linux: Simplify __opensock and fix race condition [BZ #28353]
|
||||
- linux: __get_nprocs_sched: do not feed CPU_COUNT_S with garbage [BZ #28850]
|
||||
|
||||
* Tue Feb 1 2022 Florian Weimer <fweimer@redhat.com> - 2.34-24
|
||||
- Sync with upstream branch release/2.34/master,
|
||||
commit 008003dc6e83439c5e04a744b7fd8197df19096e:
|
||||
|
Loading…
Reference in New Issue
Block a user