This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.28.9000-583-g3367acd


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, master has been updated
       via  3367acdb344a1d7fcf8f53748d301d652c8911dd (commit)
       via  8e889c5da3c5981c5a46a93fec02de40131ac5a6 (commit)
      from  ee4d79026da2c21c75cccd5795cb4357643f4f5c (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=3367acdb344a1d7fcf8f53748d301d652c8911dd

commit 3367acdb344a1d7fcf8f53748d301d652c8911dd
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Thu Jan 24 09:36:25 2019 -0200

    hurd: Fix libsupport xsigstack build
    
    Hurd does not support MAP_NORESERVE and MAP_STACK.
    
    Checked on i686-gnu build.
    
    	* support/xsigstack.c (MAP_NORESERVE, MAP_STACK): Define if they
    	are not defined.

diff --git a/ChangeLog b/ChangeLog
index dfad23b..af78b36 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2019-01-24  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+	* support/xsigstack.c (MAP_NORESERVE, MAP_STACK): Define if they
+	are not defined.
+
 	[BZ #24122]
 	* elf/Makefile (tests): Add tst-audit13.
 	(modules-names): Add tst-audit13mod1.
diff --git a/support/xsigstack.c b/support/xsigstack.c
index cebfa19..45ad41e 100644
--- a/support/xsigstack.c
+++ b/support/xsigstack.c
@@ -26,6 +26,13 @@
 #include <sys/mman.h>
 #include <sys/param.h> /* roundup, MAX */
 
+#ifndef MAP_NORESERVE
+# define MAP_NORESERVE 0
+#endif
+#ifndef MAP_STACK
+# define MAP_STACK 0
+#endif
+
 /* The "cookie" returned by xalloc_sigstack points to one of these
    structures.  */
 struct sigstack_desc

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

commit 8e889c5da3c5981c5a46a93fec02de40131ac5a6
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Wed Jan 23 11:42:54 2019 -0200

    elf: Fix LD_AUDIT for modules with invalid version (BZ#24122)
    
    The error handling patch for invalid audit modules version access
    invalid memory:
    
    elf/rtld.c:
    
    1454               unsigned int (*laversion) (unsigned int);
    1455               unsigned int lav;
    1456               if  (err_str == NULL
    1457                    && (laversion = largs.result) != NULL
    1458                    && (lav = laversion (LAV_CURRENT)) > 0
    1459                    && lav <= LAV_CURRENT)
    1460                 {
    [...]
    1526               else
    1527                 {
    1528                   /* We cannot use the DSO, it does not have the
    1529                      appropriate interfaces or it expects something
    1530                      more recent.  */
    1531 #ifndef NDEBUG
    1532                   Lmid_t ns = dlmargs.map->l_ns;
    1533 #endif
    1534                   _dl_close (dlmargs.map);
    1535
    1536                   /* Make sure the namespace has been cleared entirely.  */
    1537                   assert (GL(dl_ns)[ns]._ns_loaded == NULL);
    1538                   assert (GL(dl_ns)[ns]._ns_nloaded == 0);
    1539
    1540                   GL(dl_tls_max_dtv_idx) = tls_idx;
    1541                   goto not_loaded;
    1542                 }
    
    1431           const char *err_str = NULL;
    1432           bool malloced;
    1433           (void) _dl_catch_error (&objname, &err_str, &malloced, dlmopen_doit,
    1434                                   &dlmargs);
    1435           if (__glibc_unlikely (err_str != NULL))
    1436             {
    1437             not_loaded:
    1438               _dl_error_printf ("\
    1439 ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
    1440                                 name, err_str);
    1441               if (malloced)
    1442                 free ((char *) err_str);
    1443             }
    
    On failure the err_str will be NULL and _dl_debug_vdprintf does not handle
    it properly:
    
    elf/dl-misc.c:
    200             case 's':
    201               /* Get the string argument.  */
    202               iov[niov].iov_base = va_arg (arg, char *);
    203               iov[niov].iov_len = strlen (iov[niov].iov_base);
    204               if (prec != -1)
    205                 iov[niov].iov_len = MIN ((size_t) prec, iov[niov].iov_len);
    206               ++niov;
    207               break;
    
    This patch fixes the issues and improves the error message.
    
    Checked on x86_64-linux-gnu and i686-linux-gnu
    
    	[BZ #24122]
    	* elf/Makefile (tests): Add tst-audit13.
    	(modules-names): Add tst-audit13mod1.
    	(tst-audit13.out, LDFLAGS-tst-audit13mod1.so, tst-audit13-ENV): New
    	rule.
    	* elf/rtld.c (dl_main): Handle invalid audit module version.
    	* elf/tst-audit13.c: New file.
    	* elf/tst-audit13mod1.c: Likewise.
    
    Reviewed-by: Carlos O'Donell <carlos@redhat.com>

diff --git a/ChangeLog b/ChangeLog
index fed239c..dfad23b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2019-01-24  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+	[BZ #24122]
+	* elf/Makefile (tests): Add tst-audit13.
+	(modules-names): Add tst-audit13mod1.
+	(tst-audit13.out, LDFLAGS-tst-audit13mod1.so, tst-audit13-ENV): New
+	rule.
+	* elf/rtld.c (dl_main): Handle invalid audit module version.
+	* elf/tst-audit13.c: New file.
+	* elf/tst-audit13mod1.c: Likewise.
+
 2019-01-22  Samuel Thibault  <samuel.thibault@ens-lyon.org>
 
 	* sysdeps/mach/hurd/faccessat.c (__faccessat_common): Check for errors
diff --git a/elf/Makefile b/elf/Makefile
index 9cf5cd8..c24d765 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -187,7 +187,7 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
 	 tst-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error tst-noload \
 	 tst-latepthread tst-tls-manydynamic tst-nodelete-dlclose \
 	 tst-debug1 tst-main1 tst-absolute-sym tst-absolute-zero tst-big-note \
-	 tst-unwind-ctor tst-unwind-main
+	 tst-unwind-ctor tst-unwind-main tst-audit13
 #	 reldep9
 tests-internal += loadtest unload unload2 circleload1 \
 	 neededtest neededtest2 neededtest3 neededtest4 \
@@ -275,7 +275,8 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
 		tst-latepthreadmod $(tst-tls-many-dynamic-modules) \
 		tst-nodelete-dlclose-dso tst-nodelete-dlclose-plugin \
 		tst-main1mod tst-libc_dlvsym-dso tst-absolute-sym-lib \
-		tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib
+		tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
+		tst-audit13mod1
 # Most modules build with _ISOMAC defined, but those filtered out
 # depend on internal headers.
 modules-names-tests = $(filter-out ifuncmod% tst-libc_dlvsym-dso tst-tlsmod%,\
@@ -1382,6 +1383,10 @@ tst-audit12-ENV = LD_AUDIT=$(objpfx)tst-auditmod12.so
 $(objpfx)tst-audit12mod1.so: $(objpfx)tst-audit12mod2.so
 LDFLAGS-tst-audit12mod2.so = -Wl,--version-script=tst-audit12mod2.map
 
+$(objpfx)tst-audit13.out: $(objpfx)tst-audit13mod1.so
+LDFLAGS-tst-audit13mod1.so = -Wl,-z,lazy
+tst-audit13-ENV = LD_AUDIT=$(objpfx)tst-audit13mod1.so
+
 # Override -z defs, so that we can reference an undefined symbol.
 # Force lazy binding for the same reason.
 LDFLAGS-tst-latepthreadmod.so = \
diff --git a/elf/rtld.c b/elf/rtld.c
index 5d97f41..9e0f752 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -1453,10 +1453,12 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
 
 	      unsigned int (*laversion) (unsigned int);
 	      unsigned int lav;
-	      if  (err_str == NULL
-		   && (laversion = largs.result) != NULL
-		   && (lav = laversion (LAV_CURRENT)) > 0
-		   && lav <= LAV_CURRENT)
+	      if (err_str != NULL)
+		goto not_loaded;
+
+	      if ((laversion = largs.result) != NULL
+		  && (lav = laversion (LAV_CURRENT)) > 0
+		  && lav <= LAV_CURRENT)
 		{
 		  /* Allocate structure for the callback function pointers.
 		     This call can never fail.  */
@@ -1538,7 +1540,25 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
 		  assert (GL(dl_ns)[ns]._ns_nloaded == 0);
 
 		  GL(dl_tls_max_dtv_idx) = tls_idx;
-		  goto not_loaded;
+		  if (GLRO(dl_debug_mask) & DL_DEBUG_FILES)
+		    {
+		      _dl_debug_printf ("\
+\nfile=%s cannot be loaded as audit interface; ignored.\n", name);
+		      if (laversion == NULL)
+			_dl_debug_printf (
+"  la_version function not found.\n");
+		      else
+			{
+			  if (lav == 0)
+			    _dl_debug_printf (
+"  auditor requested to be ignored (returned version of 0).\n");
+			  else
+			    _dl_debug_printf (
+"  auditor disabled since expected version %d is greater than "
+"supported version %d.\n",
+					      lav, LAV_CURRENT);
+			}
+		    }
 		}
 	    }
 	}
diff --git a/elf/tst-audit13.c b/elf/tst-audit13.c
new file mode 100644
index 0000000..6f587ba
--- /dev/null
+++ b/elf/tst-audit13.c
@@ -0,0 +1,28 @@
+/* Check for invalid audit version (BZ#24122).
+   Copyright (C) 2019 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/>.  */
+
+#include <stdio.h>
+
+static int
+do_test (void)
+{
+  puts ("plt call");
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/elf/tst-audit13mod1.c b/elf/tst-audit13mod1.c
new file mode 100644
index 0000000..cf017e2
--- /dev/null
+++ b/elf/tst-audit13mod1.c
@@ -0,0 +1,93 @@
+/* Check for invalid audit version (BZ#24122).
+   Copyright (C) 2019 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/>.  */
+
+#include <link.h>
+#include <stdlib.h>
+
+unsigned int
+la_version (unsigned int version)
+{
+  /* The audit specification says that a version of 0 or a version
+     greater than any version supported by the dynamic loader shall
+     cause the module to be ignored.  */
+  return 0;
+}
+
+void
+la_activity (uintptr_t *cookie, unsigned int flag)
+{
+  exit (EXIT_FAILURE);
+}
+
+char *
+la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag)
+{
+  exit (EXIT_FAILURE);
+}
+
+unsigned int
+la_objopen (struct link_map *map, Lmid_t lmid, uintptr_t * cookie)
+{
+  exit (EXIT_FAILURE);
+}
+
+void
+la_preinit (uintptr_t * cookie)
+{
+  exit (EXIT_FAILURE);
+}
+
+uintptr_t
+#if __ELF_NATIVE_CLASS == 32
+la_symbind32 (Elf32_Sym *sym, unsigned int ndx, uintptr_t *refcook,
+              uintptr_t *defcook, unsigned int *flags, const char *symname)
+#else
+la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
+              uintptr_t *defcook, unsigned int *flags, const char *symname)
+#endif
+{
+  exit (EXIT_FAILURE);
+}
+
+unsigned int
+la_objclose (uintptr_t * cookie)
+{
+  exit (EXIT_FAILURE);
+}
+
+#include <tst-audit.h>
+#if (!defined (pltenter) || !defined (pltexit) || !defined (La_regs) \
+     || !defined (La_retval) || !defined (int_retval))
+# error "architecture specific code needed in sysdeps/CPU/tst-audit.h"
+#endif
+
+ElfW(Addr)
+pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
+          uintptr_t *defcook, La_regs *regs, unsigned int *flags,
+          const char *symname, long int *framesizep)
+{
+  exit (EXIT_FAILURE);
+}
+
+unsigned int
+pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
+         uintptr_t *defcook, const La_regs *inregs, La_retval *outregs,
+         const char *symname)
+{
+  exit (EXIT_FAILURE);
+}

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

Summary of changes:
 ChangeLog                             |   14 +++++
 elf/Makefile                          |    9 +++-
 elf/rtld.c                            |   30 +++++++++--
 elf/{tst-main1mod.c => tst-audit13.c} |    7 ++-
 elf/tst-audit13mod1.c                 |   93 +++++++++++++++++++++++++++++++++
 support/xsigstack.c                   |    7 +++
 6 files changed, 151 insertions(+), 9 deletions(-)
 copy elf/{tst-main1mod.c => tst-audit13.c} (85%)
 create mode 100644 elf/tst-audit13mod1.c


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]