From cc0e6ed81fa3ab0eeecfc576098b4522f0323c4b Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 3 May 2013 16:33:26 -0700 Subject: [PATCH] Consolidate definitions of _FORTIFY_SOURCE wrappers for open{,64}{,at}. --- ChangeLog | 19 +++++++++++++ io/Makefile | 4 +-- io/open.c | 14 ++-------- io/open64.c | 13 ++------- {sysdeps/unix/sysv/linux => io}/open64_2.c | 8 ++---- {sysdeps/unix/sysv/linux => io}/open_2.c | 8 ++---- io/openat.c | 14 ++-------- io/openat64.c | 14 ++-------- io/openat64_2.c | 29 ++++++++++++++++++++ io/openat_2.c | 29 ++++++++++++++++++++ sysdeps/mach/hurd/open.c | 11 -------- sysdeps/mach/hurd/openat.c | 13 --------- sysdeps/unix/sysv/linux/Makefile | 2 +- sysdeps/unix/sysv/linux/openat.c | 16 ----------- sysdeps/unix/sysv/linux/openat64.c | 1 - sysdeps/unix/sysv/linux/wordsize-64/openat.c | 8 ++---- 16 files changed, 97 insertions(+), 106 deletions(-) rename {sysdeps/unix/sysv/linux => io}/open64_2.c (87%) rename {sysdeps/unix/sysv/linux => io}/open_2.c (87%) create mode 100644 io/openat64_2.c create mode 100644 io/openat_2.c diff --git a/ChangeLog b/ChangeLog index 9d0eeb76f3..fac3208a18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,24 @@ 2013-05-03 Roland McGrath + * io/open.c (__open_2): Moved to ... + * io/open_2.c: ... this new file. + * io/open64.c (__open64_2): Moved to ... + * io/open64_2.c: ... this new file. + * io/openat.c (__openat_2): Moved to ... + * io/openat_2.c: ... this new file. + * io/openat64.c (__openat64_2): Moved to ... + * io/openat64_2.c: ... this new file. + * io/Makefile (routines): Add them. + * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove them. + * sysdeps/unix/sysv/linux/open_2.c: File removed. + * sysdeps/unix/sysv/linux/open64_2.c: File removed. + * sysdeps/unix/sysv/linux/openat.c (__OPENAT_2): Removed. + * sysdeps/unix/sysv/linux/openat64.c (__OPENAT_2): Removed. + * sysdeps/unix/sysv/linux/wordsize-64/openat.c (__openat_2): Removed. + (__openat64): Add hidden_ver. + * sysdeps/mach/hurd/open.c (__open_2, __open64_2): Removed. + * sysdeps/mach/hurd/openat.c (__openat_2): Removed. + * elf/dl-sysdep.c (_dl_sysdep_start) [NEED_DL_SYSINFO]: Separately conditionalize setting of GLRO(dl_sysinfo) so that the GLRO(dl_sysinfo_dso) test is under [NEED_DL_SYSINFO_DSO] diff --git a/io/Makefile b/io/Makefile index 86453d45bc..a7a8044a88 100644 --- a/io/Makefile +++ b/io/Makefile @@ -36,10 +36,10 @@ routines := \ statvfs fstatvfs statvfs64 fstatvfs64 \ umask chmod fchmod lchmod fchmodat \ mkdir mkdirat \ - open open64 openat openat64 close \ + open open_2 open64 open64_2 openat openat_2 openat64 openat64_2 \ read write lseek lseek64 access euidaccess faccessat \ fcntl flock lockf lockf64 \ - dup dup2 dup3 pipe pipe2 \ + close dup dup2 dup3 pipe pipe2 \ creat creat64 \ chdir fchdir \ getcwd getwd getdirname \ diff --git a/io/open.c b/io/open.c index 89e8a78b68..b01ba6eac5 100644 --- a/io/open.c +++ b/io/open.c @@ -22,7 +22,6 @@ #include #include -extern char **__libc_argv attribute_hidden; /* Open FILE with access OFLAG. If OFLAG includes O_CREAT, a third argument is the file protection. */ @@ -57,15 +56,6 @@ weak_alias (__libc_open, open) stub_warning (open) - -int -__open_2 (file, oflag) - const char *file; - int oflag; -{ - if (oflag & O_CREAT) - __fortify_fail ("invalid open call: O_CREAT without mode"); - - return __open (file, oflag); -} +/* __open_2 is a generic wrapper that calls __open. + So give a stub warning for that symbol too. */ stub_warning (__open_2) diff --git a/io/open64.c b/io/open64.c index 40d2bca200..818d3819f8 100644 --- a/io/open64.c +++ b/io/open64.c @@ -53,15 +53,6 @@ weak_alias (__libc_open64, open64) stub_warning (open64) - -int -__open64_2 (file, oflag) - const char *file; - int oflag; -{ - if (oflag & O_CREAT) - __fortify_fail ("invalid open64 call: O_CREAT without mode"); - - return __open64 (file, oflag); -} +/* __open64_2 is a generic wrapper that calls __open64. + So give a stub warning for that symbol too. */ stub_warning (__open64_2) diff --git a/sysdeps/unix/sysv/linux/open64_2.c b/io/open64_2.c similarity index 87% rename from sysdeps/unix/sysv/linux/open64_2.c rename to io/open64_2.c index bff2222716..c9a83f9ff2 100644 --- a/sysdeps/unix/sysv/linux/open64_2.c +++ b/io/open64_2.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2007-2013 Free Software Foundation, Inc. +/* _FORTIFY_SOURCE wrapper for open64. + Copyright (C) 2013 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 @@ -18,11 +19,8 @@ #include #include - int -__open64_2 (file, oflag) - const char *file; - int oflag; +__open64_2 (const char *file, int oflag) { if (oflag & O_CREAT) __fortify_fail ("invalid open64 call: O_CREAT without mode"); diff --git a/sysdeps/unix/sysv/linux/open_2.c b/io/open_2.c similarity index 87% rename from sysdeps/unix/sysv/linux/open_2.c rename to io/open_2.c index 5726157703..3b9fe28670 100644 --- a/sysdeps/unix/sysv/linux/open_2.c +++ b/io/open_2.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2007-2013 Free Software Foundation, Inc. +/* _FORTIFY_SOURCE wrapper for open. + Copyright (C) 2013 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 @@ -18,11 +19,8 @@ #include #include - int -__open_2 (file, oflag) - const char *file; - int oflag; +__open_2 (const char *file, int oflag) { if (oflag & O_CREAT) __fortify_fail ("invalid open call: O_CREAT without mode"); diff --git a/io/openat.c b/io/openat.c index 16b11916bd..3722c58236 100644 --- a/io/openat.c +++ b/io/openat.c @@ -75,16 +75,6 @@ libc_hidden_def (__openat) weak_alias (__openat, openat) stub_warning (openat) - -int -__openat_2 (fd, file, oflag) - int fd; - const char *file; - int oflag; -{ - if (oflag & O_CREAT) - __fortify_fail ("invalid openat call: O_CREAT without mode"); - - return __openat (fd, file, oflag); -} +/* __openat_2 is a generic wrapper that calls __openat. + So give a stub warning for that symbol too. */ stub_warning (__openat_2) diff --git a/io/openat64.c b/io/openat64.c index fabfa5d380..506da3cf07 100644 --- a/io/openat64.c +++ b/io/openat64.c @@ -68,16 +68,6 @@ libc_hidden_def (__openat64) weak_alias (__openat64, openat64) stub_warning (openat64) - -int -__openat64_2 (fd, file, oflag) - int fd; - const char *file; - int oflag; -{ - if (oflag & O_CREAT) - __fortify_fail ("invalid openat64 call: O_CREAT without mode"); - - return __openat64 (fd, file, oflag); -} +/* __openat64_2 is a generic wrapper that calls __openat64. + So give a stub warning for that symbol too. */ stub_warning (__openat_2) diff --git a/io/openat64_2.c b/io/openat64_2.c new file mode 100644 index 0000000000..e69fce41a9 --- /dev/null +++ b/io/openat64_2.c @@ -0,0 +1,29 @@ +/* _FORTIFY_SOURCE wrapper for openat64. + Copyright (C) 2013 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 + +int +__openat64_2 (int fd, const char *file, int oflag) +{ + if (oflag & O_CREAT) + __fortify_fail ("invalid openat64 call: O_CREAT without mode"); + + return __openat64 (fd, file, oflag); +} diff --git a/io/openat_2.c b/io/openat_2.c new file mode 100644 index 0000000000..b423f1dc6b --- /dev/null +++ b/io/openat_2.c @@ -0,0 +1,29 @@ +/* _FORTIFY_SOURCE wrapper for openat. + Copyright (C) 2013 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 + +int +__openat_2 (int fd, const char *file, int oflag) +{ + if (oflag & O_CREAT) + __fortify_fail ("invalid openat call: O_CREAT without mode"); + + return __openat (fd, file, oflag); +} diff --git a/sysdeps/mach/hurd/open.c b/sysdeps/mach/hurd/open.c index 2ba2b5d6e9..49dd287c00 100644 --- a/sysdeps/mach/hurd/open.c +++ b/sysdeps/mach/hurd/open.c @@ -52,20 +52,9 @@ weak_alias (__libc_open, __open) libc_hidden_weak (__open) weak_alias (__libc_open, open) -int -__open_2 (file, oflag) - const char *file; - int oflag; -{ - if (oflag & O_CREAT) - __fortify_fail ("invalid open call: O_CREAT without mode"); - - return __open (file, oflag); -} /* open64 is just the same as open for us. */ weak_alias (__libc_open, __libc_open64) weak_alias (__libc_open, __open64) libc_hidden_weak (_open64) weak_alias (__libc_open, open64) -strong_alias (__open_2, __open64_2) diff --git a/sysdeps/mach/hurd/openat.c b/sysdeps/mach/hurd/openat.c index 9eb163f84a..e568acc875 100644 --- a/sysdeps/mach/hurd/openat.c +++ b/sysdeps/mach/hurd/openat.c @@ -56,20 +56,7 @@ __openat (fd, file, oflag) libc_hidden_def (__openat) weak_alias (__openat, openat) -int -__openat_2 (fd, file, oflag) - int fd; - const char *file; - int oflag; -{ - if (oflag & O_CREAT) - __fortify_fail ("invalid openat call: O_CREAT without mode"); - - return __openat (fd, file, oflag); -} - /* openat64 is just the same as openat for us. */ weak_alias (__openat, __openat64) libc_hidden_weak (__openat64) weak_alias (__openat, openat64) -strong_alias (__openat_2, __openat64_2) diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index f82c94982e..f580635c84 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -152,7 +152,7 @@ endif ifeq ($(subdir),io) sysdep_routines += xstatconv internal_statvfs internal_statvfs64 \ - sync_file_range open_2 open64_2 fallocate fallocate64 + sync_file_range fallocate fallocate64 sysdep_headers += bits/fcntl-linux.h endif diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c index d2ef429736..6e838dfd0c 100644 --- a/sysdeps/unix/sysv/linux/openat.c +++ b/sysdeps/unix/sysv/linux/openat.c @@ -29,7 +29,6 @@ #ifndef OPENAT # define OPENAT openat -# define __OPENAT_2 __openat_2 # ifndef __ASSUME_ATFCTS /* Set errno after a failed call. If BUF is not null, @@ -179,18 +178,3 @@ __OPENAT (fd, file, oflag) } libc_hidden_def (__OPENAT) weak_alias (__OPENAT, OPENAT) - - -int -__OPENAT_2 (fd, file, oflag) - int fd; - const char *file; - int oflag; -{ - if (oflag & O_CREAT) -#define MSG(s) MSG2 (s) -#define MSG2(s) "invalid " #s " call: O_CREAT without mode" - __fortify_fail (MSG (OPENAT)); - - return __OPENAT (fd, file, oflag); -} diff --git a/sysdeps/unix/sysv/linux/openat64.c b/sysdeps/unix/sysv/linux/openat64.c index 013a13effa..9e7a2b3737 100644 --- a/sysdeps/unix/sysv/linux/openat64.c +++ b/sysdeps/unix/sysv/linux/openat64.c @@ -1,5 +1,4 @@ #define OPENAT openat64 -#define __OPENAT_2 __openat64_2 #define MORE_OFLAGS O_LARGEFILE #include "openat.c" diff --git a/sysdeps/unix/sysv/linux/wordsize-64/openat.c b/sysdeps/unix/sysv/linux/wordsize-64/openat.c index 4921fca335..12e027158c 100644 --- a/sysdeps/unix/sysv/linux/wordsize-64/openat.c +++ b/sysdeps/unix/sysv/linux/wordsize-64/openat.c @@ -1,16 +1,14 @@ #define __openat64 __rename___openat64 -#define __openat64_2 __rename___openat64_2 #define __openat64_nocancel __rename___openat64_nocancel #define openat64 __rename_openat64 #include "../openat.c" #undef __openat64 -#undef __openat64_2 #undef __openat64_nocancel #undef openat64 -weak_alias (__openat, __openat64) -weak_alias (__openat_2, __openat64_2) -weak_alias (__openat_nocancel, __openat64_nocancel) +strong_alias (__openat, __openat64) +hidden_ver (__openat, __openat64) +strong_alias (__openat_nocancel, __openat64_nocancel) weak_alias (openat, openat64)