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.25-783-g95a7339


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  95a73392580761abc62fc9b1386d232cd55878e9 (commit)
      from  422ff87c249ddc06701d096421db63343e4754be (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=95a73392580761abc62fc9b1386d232cd55878e9

commit 95a73392580761abc62fc9b1386d232cd55878e9
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Jul 17 18:11:12 2017 -0300

    tunables: Use direct syscall for access (BZ#21744)
    
    The function maybe_enable_malloc_check, which is called by
    __tunables_init, calls __access_noerrno.  It isn't problem when
    symbol is is in ld.so, which has a special version of __access_noerrno
    without stack protector.  But when glibc is built with stack protector,
    maybe_enable_malloc_check in libc.a can't call the regular version of
    __access_noerrno with stack protector.
    
    This patch changes how Linux defines the __access_noerrno to be an
    inline call instead and thus preventing defining different build
    rules for ld/static and shared.
    
    	H.J. Lu  <hongjiu.lu@intel.com>
    	Adhemerval Zanella  <adhemerval.zanella@linaro.org>
    
    	[BZ #21744]
    	* elf/dl-tunables.c: Include not-errno.h header.
    	* include/unistd.h (__access_noerrno): Remove definition.
    	* sysdeps/unix/sysv/linux/access.c (__access_noerrno): Likewise.
    	* sysdeps/generic/not-errno.h: New file.
    	* sysdeps/unix/sysv/linux/not-errno.h: Likewise.

diff --git a/ChangeLog b/ChangeLog
index 7da4510..554fdac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2017-07-24  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+	    H.J. Lu  <hongjiu.lu@intel.com>
+
+	[BZ #21744]
+	* elf/dl-tunables.c: Include not-errno.h header.
+	* include/unistd.h (__access_noerrno): Remove definition.
+	* sysdeps/unix/sysv/linux/access.c (__access_noerrno): Likewise.
+	* sysdeps/generic/not-errno.h: New file.
+	* sysdeps/unix/sysv/linux/not-errno.h: Likewise.
+
 2017-07-24  H.J. Lu  <hongjiu.lu@intel.com>
 
 	[BZ #21752]
diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c
index 44c160c..231fb8c 100644
--- a/elf/dl-tunables.c
+++ b/elf/dl-tunables.c
@@ -29,6 +29,8 @@
 #define TUNABLES_INTERNAL 1
 #include "dl-tunables.h"
 
+#include <not-errno.h>
+
 #if TUNABLES_FRONTEND == TUNABLES_FRONTEND_valstring
 # define GLIBC_TUNABLES "GLIBC_TUNABLES"
 #endif
diff --git a/include/unistd.h b/include/unistd.h
index 5b2a414..7f1c2cc 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -182,12 +182,5 @@ extern int __getlogin_r_loginuid (char *name, size_t namesize)
 #   include <dl-unistd.h>
 #  endif
 
-#  if IS_IN (rtld) || !defined SHARED
-/* __access variant that does not set errno.  Used in very early initialization
-   code in libc.a and ld.so.  It follows access return semantics (zero for
-   sucess otherwise a value different than 0).  */
-extern __typeof (__access) __access_noerrno attribute_hidden;
-#  endif
-
 # endif
 #endif
diff --git a/sysdeps/generic/not-errno.h b/sysdeps/generic/not-errno.h
new file mode 100644
index 0000000..2aac095
--- /dev/null
+++ b/sysdeps/generic/not-errno.h
@@ -0,0 +1,19 @@
+/* Syscall wrapper that do not set errno.  Generic version.
+   Copyright (C) 2017 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/>.  */
+
+extern __typeof (__access) __access_noerrno attribute_hidden;
diff --git a/sysdeps/unix/sysv/linux/access.c b/sysdeps/unix/sysv/linux/access.c
index 67e69bd..366b6b6 100644
--- a/sysdeps/unix/sysv/linux/access.c
+++ b/sysdeps/unix/sysv/linux/access.c
@@ -21,21 +21,6 @@
 #include <sysdep-cancel.h>
 
 int
-__access_noerrno (const char *file, int type)
-{
-  int res;
-  INTERNAL_SYSCALL_DECL (err);
-#ifdef __NR_access
-  res = INTERNAL_SYSCALL_CALL (access, err, file, type);
-#else
-  res = INTERNAL_SYSCALL_CALL (faccessat, err, AT_FDCWD, file, type);
-#endif
-  if (INTERNAL_SYSCALL_ERROR_P (res, err))
-    return INTERNAL_SYSCALL_ERRNO (res, err);
-  return 0;
-}
-
-int
 __access (const char *file, int type)
 {
 #ifdef __NR_access
diff --git a/sysdeps/unix/sysv/linux/access.c b/sysdeps/unix/sysv/linux/not-errno.h
similarity index 57%
copy from sysdeps/unix/sysv/linux/access.c
copy to sysdeps/unix/sysv/linux/not-errno.h
index 67e69bd..65f93f3 100644
--- a/sysdeps/unix/sysv/linux/access.c
+++ b/sysdeps/unix/sysv/linux/not-errno.h
@@ -1,5 +1,5 @@
-/* Linux implementation for access function.
-   Copyright (C) 2016-2017 Free Software Foundation, Inc.
+/* Syscall wrapper that do not set errno.  Linux version.
+   Copyright (C) 2017 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
@@ -13,35 +13,23 @@
    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
+   License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <fcntl.h>
-#include <unistd.h>
-#include <sysdep-cancel.h>
-
-int
-__access_noerrno (const char *file, int type)
+/* This function is used on maybe_enable_malloc_check (elf/dl-tunables.c)
+   and to avoid having to build/use multiple versions if stack protection
+   in enabled it is defined as inline.  */
+static inline int
+__access_noerrno (const char *pathname, int mode)
 {
   int res;
   INTERNAL_SYSCALL_DECL (err);
 #ifdef __NR_access
-  res = INTERNAL_SYSCALL_CALL (access, err, file, type);
+  res = INTERNAL_SYSCALL_CALL (access, err, pathname, mode);
 #else
-  res = INTERNAL_SYSCALL_CALL (faccessat, err, AT_FDCWD, file, type);
+  res = INTERNAL_SYSCALL_CALL (faccessat, err, AT_FDCWD, pathname, mode);
 #endif
   if (INTERNAL_SYSCALL_ERROR_P (res, err))
     return INTERNAL_SYSCALL_ERRNO (res, err);
   return 0;
 }
-
-int
-__access (const char *file, int type)
-{
-#ifdef __NR_access
-  return INLINE_SYSCALL_CALL (access, file, type);
-#else
-  return INLINE_SYSCALL_CALL (faccessat, AT_FDCWD, file, type);
-#endif
-}
-weak_alias (__access, access)

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

Summary of changes:
 ChangeLog                                          |   10 ++++++
 elf/dl-tunables.c                                  |    2 +
 include/unistd.h                                   |    7 ----
 .../float1282mpn.c => generic/not-errno.h}         |    5 +--
 sysdeps/unix/sysv/linux/access.c                   |   15 ---------
 sysdeps/unix/sysv/linux/{access.c => not-errno.h}  |   32 ++++++-------------
 6 files changed, 24 insertions(+), 47 deletions(-)
 copy sysdeps/{ieee754/float128/float1282mpn.c => generic/not-errno.h} (86%)
 copy sysdeps/unix/sysv/linux/{access.c => not-errno.h} (57%)


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]