GNU C Library master sources branch release/2.24/master updated. glibc-2.24-98-ge853f05

aurel32@sourceware.org aurel32@sourceware.org
Fri Dec 28 22:26:00 GMT 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, release/2.24/master has been updated
       via  e853f05a5757dfee0c8b7f301e6a52047cc9864a (commit)
       via  d8d97c0539c4258ecf8d46a184e853acad577199 (commit)
       via  9ae4fa0c5b5087f3a1391753d54d7f3086224f77 (commit)
       via  fff112f4c4442af52bec90353e80bc4e801ab79b (commit)
       via  23758d3539232de8368ea601f2df1c2a9da145e8 (commit)
      from  659b3df5db97948f4c6042203163873fb96ec512 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=e853f05a5757dfee0c8b7f301e6a52047cc9864a

commit e853f05a5757dfee0c8b7f301e6a52047cc9864a
Author: Florian Weimer <fweimer@redhat.com>
Date:   Thu Jan 11 13:13:28 2018 +0100

    csu: Update __libgcc_s_init comment
    
    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
    (cherry picked from commit 08c6e95234c60a5c2f37532d1111acf084f39345)

diff --git a/ChangeLog b/ChangeLog
index 4d6686a..82767ac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-11  Florian Weimer  <fweimer@redhat.com>
+
+	* sysdeps/gnu/unwind-resume.c (__libgcc_s_init): Update comment
+	and error message.
+
 2018-01-16  Florian Weimer  <fweimer@redhat.com>
 
 	* nptl/Makefile (CFLAGS-tst-minstack-throw.o): Compile in C++11
diff --git a/sysdeps/gnu/unwind-resume.c b/sysdeps/gnu/unwind-resume.c
index 5d25e73..e81b656 100644
--- a/sysdeps/gnu/unwind-resume.c
+++ b/sysdeps/gnu/unwind-resume.c
@@ -35,13 +35,17 @@ __libgcc_s_init (void)
   void *resume, *personality;
   void *handle;
 
-  handle = __libc_dlopen (LIBGCC_S_SO);
+  /* Use RTLD_NOW here for consistency with pthread_cancel_init.
+     RTLD_NOW will rarely make a difference here because unwinding is
+     already in progress, so libgcc_s.so has already been loaded if
+     its unwinder is used.  */
+  handle = __libc_dlopen_mode (LIBGCC_S_SO, RTLD_NOW | __RTLD_DLOPEN);
 
   if (handle == NULL
       || (resume = __libc_dlsym (handle, "_Unwind_Resume")) == NULL
       || (personality = __libc_dlsym (handle, "__gcc_personality_v0")) == NULL)
     __libc_fatal (LIBGCC_S_SO
-                  " must be installed for pthread_cancel to work\n");
+                  " must be installed for unwinding to work\n");
 
 #ifdef PTR_MANGLE
   PTR_MANGLE (resume);

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=d8d97c0539c4258ecf8d46a184e853acad577199

commit d8d97c0539c4258ecf8d46a184e853acad577199
Author: Florian Weimer <fweimer@redhat.com>
Date:   Tue Jan 16 07:19:28 2018 +0100

    nptl/tst-minstack-throw: Compile in C++11 mode with GNU extensions
    
    (cherry picked from commit b725132d2b0aeddf970b1ce3e5a24f8637a7b4c2)

diff --git a/ChangeLog b/ChangeLog
index 1062e4f..4d6686a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-16  Florian Weimer  <fweimer@redhat.com>
+
+	* nptl/Makefile (CFLAGS-tst-minstack-throw.o): Compile in C++11
+	mode with GNU extensions.
+
 2018-01-11  Florian Weimer  <fweimer@redhat.com>
 
 	[BZ #22636]

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=9ae4fa0c5b5087f3a1391753d54d7f3086224f77

commit 9ae4fa0c5b5087f3a1391753d54d7f3086224f77
Author: Florian Weimer <fweimer@redhat.com>
Date:   Thu Jan 11 13:13:14 2018 +0100

    nptl: Add tst-minstack-cancel, tst-minstack-exit [BZ #22636]
    
    I verified that without the guard accounting change in commit
    630f4cc3aa019ede55976ea561f1a7af2f068639 (Fix stack guard size
    accounting) and RTLD_NOW for libgcc_s introduced by commit
    f993b8754080ac7572b692870e926d8b493db16c (nptl: Open libgcc.so with
    RTLD_NOW during pthread_cancel), the tst-minstack-cancel test fails on
    an AVX-512F machine.  tst-minstack-exit still passes, and either of
    the mentioned commit by itself frees sufficient stack space to make
    tst-minstack-cancel pass, too.
    
    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
    (cherry picked from commit d8b778907e5270fdeb70459842ffbc20bd2ca5e1)

diff --git a/ChangeLog b/ChangeLog
index 48292d6..1062e4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-11  Florian Weimer  <fweimer@redhat.com>
+
+	[BZ #22636]
+	* nptl/Makefile (tests): Add tst-minstack-cancel, tst-minstack-exit.
+	* nptl/tst-minstack-cancel.c, nptl/tst-minstack-exit.c: New files.
+
 2018-01-10  Florian Weimer  <fweimer@redhat.com>
 
 	[BZ #22636]
diff --git a/nptl/Makefile b/nptl/Makefile
index fa92581..1aa52af 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -290,7 +290,9 @@ tests = tst-typesizes \
 	tst-initializers1 $(addprefix tst-initializers1-,\
 			    c89 gnu89 c99 gnu99 c11 gnu11) \
 	tst-bad-schedattr \
-	tst-thread_local1 tst-mutex-errorcheck tst-robust10
+	tst-thread_local1 tst-mutex-errorcheck tst-robust10 \
+	tst-minstack-cancel tst-minstack-exit
+
 xtests = tst-setuid1 tst-setuid1-static tst-setuid2 \
 	tst-mutexpp1 tst-mutexpp6 tst-mutexpp10
 test-srcs = tst-oddstacklimit
diff --git a/nptl/tst-minstack-cancel.c b/nptl/tst-minstack-cancel.c
new file mode 100644
index 0000000..a306320
--- /dev/null
+++ b/nptl/tst-minstack-cancel.c
@@ -0,0 +1,48 @@
+/* Test cancellation with a minimal stack size.
+   Copyright (C) 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/>.  */
+
+/* Note: This test is similar to tst-minstack-exit, but is separate to
+   avoid spurious test passes due to warm-up effects.  */
+
+#include <limits.h>
+#include <unistd.h>
+#include <support/check.h>
+#include <support/xthread.h>
+
+static void *
+threadfunc (void *closure)
+{
+  while (1)
+    pause ();
+  return NULL;
+}
+
+static int
+do_test (void)
+{
+  pthread_attr_t attr;
+  xpthread_attr_init (&attr);
+  xpthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);
+  pthread_t thr = xpthread_create (&attr, threadfunc, NULL);
+  xpthread_cancel (thr);
+  TEST_VERIFY (xpthread_join (thr) == PTHREAD_CANCELED);
+  xpthread_attr_destroy (&attr);
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/nptl/tst-minstack-exit.c b/nptl/tst-minstack-exit.c
new file mode 100644
index 0000000..9c7e9a4
--- /dev/null
+++ b/nptl/tst-minstack-exit.c
@@ -0,0 +1,46 @@
+/* Test that pthread_exit works with the minimum stack size.
+   Copyright (C) 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/>.  */
+
+/* Note: This test is similar to tst-minstack-cancel, but is separate
+   to avoid spurious test passes due to warm-up effects.  */
+
+#include <limits.h>
+#include <unistd.h>
+#include <support/check.h>
+#include <support/xthread.h>
+
+static void *
+threadfunc (void *closure)
+{
+  pthread_exit (threadfunc);
+  return NULL;
+}
+
+static int
+do_test (void)
+{
+  pthread_attr_t attr;
+  xpthread_attr_init (&attr);
+  xpthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN);
+  pthread_t thr = xpthread_create (&attr, threadfunc, NULL);
+  TEST_VERIFY (xpthread_join (thr) == threadfunc);
+  xpthread_attr_destroy (&attr);
+  return 0;
+}
+
+#include <support/test-driver.c>

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=fff112f4c4442af52bec90353e80bc4e801ab79b

commit fff112f4c4442af52bec90353e80bc4e801ab79b
Author: Florian Weimer <fweimer@redhat.com>
Date:   Mon Jan 15 16:05:36 2018 +0100

    nptl: Open libgcc.so with RTLD_NOW during pthread_cancel [BZ #22636]
    
    Disabling lazy binding reduces stack usage during unwinding.
    
    Note that RTLD_NOW only makes a difference if libgcc.so has not
    already been loaded, so this is only a partial fix.
    
    Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
    (cherry picked from commit f993b8754080ac7572b692870e926d8b493db16c)

diff --git a/ChangeLog b/ChangeLog
index 7f37d67..48292d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-10  Florian Weimer  <fweimer@redhat.com>
+
+	[BZ #22636]
+	* sysdeps/nptl/unwind-forcedunwind.c (pthread_cancel_init): Open
+	libgcc.so with RTLD_NOW, to avoid lazy binding during unwind.
+
 2018-01-08  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
 	[BZ #22637]
diff --git a/NEWS b/NEWS
index f2e9b3b..9a11b86 100644
--- a/NEWS
+++ b/NEWS
@@ -71,6 +71,7 @@ The following bugs are resolved with this release:
   [21609] x86-64: Align the stack in __tls_get_addr
   [21624] Unsafe alloca allows local attackers to alias stack and heap (CVE-2017-1000366)
   [21654] nss: Fix invalid cast in group merging
+  [22636] PTHREAD_STACK_MIN is too small on x86-64
   [22637] nptl: Fix stack guard size accounting
   [22644] string: memmove-sse2-unaligned on 32bit x86 produces garbage when
     crossing 2GB threshold (CVE-2017-18269)
diff --git a/sysdeps/nptl/unwind-forcedunwind.c b/sysdeps/nptl/unwind-forcedunwind.c
index ca757c4..24a1c5b 100644
--- a/sysdeps/nptl/unwind-forcedunwind.c
+++ b/sysdeps/nptl/unwind-forcedunwind.c
@@ -49,7 +49,7 @@ pthread_cancel_init (void)
       return;
     }
 
-  handle = __libc_dlopen (LIBGCC_S_SO);
+  handle = __libc_dlopen_mode (LIBGCC_S_SO, RTLD_NOW | __RTLD_DLOPEN);
 
   if (handle == NULL
       || (resume = __libc_dlsym (handle, "_Unwind_Resume")) == NULL

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=23758d3539232de8368ea601f2df1c2a9da145e8

commit 23758d3539232de8368ea601f2df1c2a9da145e8
Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
Date:   Mon Jan 15 16:06:31 2018 +0100

    [BZ #22637] Fix stack guard size accounting
    
    Previously if user requested S stack and G guard when creating a
    thread, the total mapping was S and the actual available stack was
    S - G - static_tls, which is not what the user requested.
    
    This patch fixes the guard size accounting by pretending the user
    requested S+G stack.  This way all later logic works out except
    when reporting the user requested stack size (pthread_getattr_np)
    or when computing the minimal stack size (__pthread_get_minstack).
    
    Normally this will increase thread stack allocations by one page.
    TLS accounting is not affected, that will require a separate fix.
    
    	[BZ #22637]
    	* nptl/descr.h (stackblock, stackblock_size): Update comments.
    	* nptl/allocatestack.c (allocate_stack): Add guardsize to stacksize.
    	* nptl/nptl-init.c (__pthread_get_minstack): Remove guardsize from
    	stacksize.
    	* nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
    
    (cherry picked from commit 630f4cc3aa019ede55976ea561f1a7af2f068639)

diff --git a/ChangeLog b/ChangeLog
index 988615f..7f37d67 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-01-08  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	[BZ #22637]
+	* nptl/descr.h (stackblock, stackblock_size): Update comments.
+	* nptl/allocatestack.c (allocate_stack): Add guardsize to stacksize.
+	* nptl/nptl-init.c (__pthread_get_minstack): Remove guardsize from
+	stacksize.
+	* nptl/pthread_getattr_np.c (pthread_getattr_np): Likewise.
+
 2018-05-23  Andreas Schwab  <schwab@suse.de>
 
 	[BZ #23196]
diff --git a/NEWS b/NEWS
index 13ac8dd..f2e9b3b 100644
--- a/NEWS
+++ b/NEWS
@@ -71,6 +71,7 @@ The following bugs are resolved with this release:
   [21609] x86-64: Align the stack in __tls_get_addr
   [21624] Unsafe alloca allows local attackers to alias stack and heap (CVE-2017-1000366)
   [21654] nss: Fix invalid cast in group merging
+  [22637] nptl: Fix stack guard size accounting
   [22644] string: memmove-sse2-unaligned on 32bit x86 produces garbage when
     crossing 2GB threshold (CVE-2017-18269)
   [22715] x86-64: Properly align La_x86_64_retval to VEC_SIZE
diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 7365ca6..9aba97f 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -484,6 +484,10 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
       /* Make sure the size of the stack is enough for the guard and
 	 eventually the thread descriptor.  */
       guardsize = (attr->guardsize + pagesize_m1) & ~pagesize_m1;
+      if (guardsize < attr->guardsize || size + guardsize < guardsize)
+	/* Arithmetic overflow.  */
+	return EINVAL;
+      size += guardsize;
       if (__builtin_expect (size < ((guardsize + __static_tls_size
 				     + MINIMAL_REST_STACK + pagesize_m1)
 				    & ~pagesize_m1),
diff --git a/nptl/descr.h b/nptl/descr.h
index bc92abf..7e62c3c 100644
--- a/nptl/descr.h
+++ b/nptl/descr.h
@@ -363,9 +363,9 @@ struct pthread
   /* Machine-specific unwind info.  */
   struct _Unwind_Exception exc;
 
-  /* If nonzero pointer to area allocated for the stack and its
-     size.  */
+  /* If nonzero, pointer to the area allocated for the stack and guard. */
   void *stackblock;
+  /* Size of the stackblock area including the guard.  */
   size_t stackblock_size;
   /* Size of the included guard area.  */
   size_t guardsize;
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 48fab50..4dabb64 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -493,8 +493,5 @@ strong_alias (__pthread_initialize_minimal_internal,
 size_t
 __pthread_get_minstack (const pthread_attr_t *attr)
 {
-  struct pthread_attr *iattr = (struct pthread_attr *) attr;
-
-  return (GLRO(dl_pagesize) + __static_tls_size + PTHREAD_STACK_MIN
-	  + iattr->guardsize);
+  return GLRO(dl_pagesize) + __static_tls_size + PTHREAD_STACK_MIN;
 }
diff --git a/nptl/pthread_getattr_np.c b/nptl/pthread_getattr_np.c
index 32d7484..c2dfa13 100644
--- a/nptl/pthread_getattr_np.c
+++ b/nptl/pthread_getattr_np.c
@@ -57,9 +57,12 @@ pthread_getattr_np (pthread_t thread_id, pthread_attr_t *attr)
   /* The sizes are subject to alignment.  */
   if (__glibc_likely (thread->stackblock != NULL))
     {
-      iattr->stacksize = thread->stackblock_size;
+      /* The stack size reported to the user should not include the
+	 guard size.  */
+      iattr->stacksize = thread->stackblock_size - thread->guardsize;
 #if _STACK_GROWS_DOWN
-      iattr->stackaddr = (char *) thread->stackblock + iattr->stacksize;
+      iattr->stackaddr = (char *) thread->stackblock
+			 + thread->stackblock_size;
 #else
       iattr->stackaddr = (char *) thread->stackblock;
 #endif

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |   31 +++++++++++++++++
 NEWS                                          |    2 +
 nptl/Makefile                                 |    4 ++-
 nptl/allocatestack.c                          |    4 ++
 nptl/descr.h                                  |    4 +-
 nptl/nptl-init.c                              |    5 +--
 nptl/pthread_getattr_np.c                     |    7 +++-
 nptl/{tst-detach1.c => tst-minstack-cancel.c} |   45 ++++++++++--------------
 nptl/{tst-detach1.c => tst-minstack-exit.c}   |   43 +++++++++--------------
 sysdeps/gnu/unwind-resume.c                   |    8 +++-
 sysdeps/nptl/unwind-forcedunwind.c            |    2 +-
 11 files changed, 91 insertions(+), 64 deletions(-)
 copy nptl/{tst-detach1.c => tst-minstack-cancel.c} (55%)
 copy nptl/{tst-detach1.c => tst-minstack-exit.c} (55%)


hooks/post-receive
-- 
GNU C Library master sources



More information about the Glibc-cvs mailing list