diff --git a/glibc-upstream-2.34-104.patch b/glibc-upstream-2.34-104.patch new file mode 100644 index 0000000..4ae7486 --- /dev/null +++ b/glibc-upstream-2.34-104.patch @@ -0,0 +1,26 @@ +commit 05c83ccaf50aef2dd30d92cbb814383f6bddea2c +Author: Gleb Fotengauer-Malinovskiy +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 + + (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 diff --git a/glibc-upstream-2.34-105.patch b/glibc-upstream-2.34-105.patch new file mode 100644 index 0000000..423f65f --- /dev/null +++ b/glibc-upstream-2.34-105.patch @@ -0,0 +1,234 @@ +commit ad615b59c78d6d37fee921fb2b2ae6b72c930625 +Author: Florian Weimer +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 + . */ + +-#include ++#include + #include +-#include + + /* 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 +- . */ +- +-#include +-#include +-#include +-#include +-#include +-#include +- +-/* 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" diff --git a/glibc-upstream-2.34-106.patch b/glibc-upstream-2.34-106.patch new file mode 100644 index 0000000..296f32a --- /dev/null +++ b/glibc-upstream-2.34-106.patch @@ -0,0 +1,44 @@ +commit d8302ba2da1e5ac59a1c4dc1c1207a10fdafdb08 +Author: Samuel Thibault +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; diff --git a/glibc-upstream-2.34-107.patch b/glibc-upstream-2.34-107.patch new file mode 100644 index 0000000..650aa2b --- /dev/null +++ b/glibc-upstream-2.34-107.patch @@ -0,0 +1,35 @@ +commit 6eaf10cbb78d22eae7999d9de55f6b93999e0860 +Author: Florian Weimer +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 + (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; diff --git a/glibc.spec b/glibc.spec index 654c2d2..fca6312 100644 --- a/glibc.spec +++ b/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 - 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 - 2.34-24 - Sync with upstream branch release/2.34/master, commit 008003dc6e83439c5e04a744b7fd8197df19096e: