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