From 0a587a8a98ca32c98e6b00f557e6af6c8eedc602 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 4 Sep 2017 13:38:36 -0700 Subject: [PATCH] Hide __chmod and __mkdir [BZ #18822] Hide internal __chmod and __mkdir functions to allow direct access within libc.so and libc.a without using GOT nor PLT. [BZ #18822] * include/sys/stat.h (__chmod): Add libc_hidden_proto. (__mkdir): Likewise. * io/chmod.c (__chmod): Add libc_hidden_def. * io/mkdir.c (__mkdir): Likewise. * sysdeps/mach/hurd/chmod.c (__chmod): Likewise. * sysdeps/mach/hurd/mkdir.c (__mkdir): Likewise. * sysdeps/unix/sysv/linux/generic/chmod.c (__chmod): Likewise. * sysdeps/unix/sysv/linux/generic/mkdir.c (__mkdir): Likewise. --- ChangeLog | 12 ++++++++++++ include/sys/stat.h | 2 ++ io/chmod.c | 1 + io/mkdir.c | 1 + sysdeps/mach/hurd/chmod.c | 1 + sysdeps/mach/hurd/mkdir.c | 1 + sysdeps/unix/sysv/linux/generic/chmod.c | 2 ++ sysdeps/unix/sysv/linux/generic/mkdir.c | 2 ++ 8 files changed, 22 insertions(+) diff --git a/ChangeLog b/ChangeLog index c4e175abc6..ead6d79223 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2017-09-04 H.J. Lu + + [BZ #18822] + * include/sys/stat.h (__chmod): Add libc_hidden_proto. + (__mkdir): Likewise. + * io/chmod.c (__chmod): Add libc_hidden_def. + * io/mkdir.c (__mkdir): Likewise. + * sysdeps/mach/hurd/chmod.c (__chmod): Likewise. + * sysdeps/mach/hurd/mkdir.c (__mkdir): Likewise. + * sysdeps/unix/sysv/linux/generic/chmod.c (__chmod): Likewise. + * sysdeps/unix/sysv/linux/generic/mkdir.c (__mkdir): Likewise. + 2017-09-04 Joseph Myers * sysdeps/unix/sysv/linux/syscall-names.list: Update kernel diff --git a/include/sys/stat.h b/include/sys/stat.h index 4f31c00eca..eb44754185 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -7,9 +7,11 @@ extern int __stat (const char *__file, struct stat *__buf); extern int __fstat (int __fd, struct stat *__buf); extern int __lstat (const char *__file, struct stat *__buf); extern int __chmod (const char *__file, __mode_t __mode); +libc_hidden_proto (__chmod) extern int __fchmod (int __fd, __mode_t __mode); extern __mode_t __umask (__mode_t __mask); extern int __mkdir (const char *__path, __mode_t __mode); +libc_hidden_proto (__mkdir) extern int __mknod (const char *__path, __mode_t __mode, __dev_t __dev); #if IS_IN (libc) || IS_IN (rtld) diff --git a/io/chmod.c b/io/chmod.c index 0b85565ec2..3cacbf612f 100644 --- a/io/chmod.c +++ b/io/chmod.c @@ -35,4 +35,5 @@ __chmod (const char *file, mode_t mode) } stub_warning (chmod) +libc_hidden_def (__chmod) weak_alias (__chmod, chmod) diff --git a/io/mkdir.c b/io/mkdir.c index 0b8499a707..43a790de33 100644 --- a/io/mkdir.c +++ b/io/mkdir.c @@ -36,4 +36,5 @@ __mkdir (const char *path, mode_t mode) } stub_warning (mkdir) +libc_hidden_def (__mkdir) weak_alias (__mkdir, mkdir) diff --git a/sysdeps/mach/hurd/chmod.c b/sysdeps/mach/hurd/chmod.c index 943f9855d4..612e62d0b2 100644 --- a/sysdeps/mach/hurd/chmod.c +++ b/sysdeps/mach/hurd/chmod.c @@ -35,4 +35,5 @@ __chmod (const char *file, mode_t mode) return 0; } +libc_hidden_def (__chmod) weak_alias (__chmod, chmod) diff --git a/sysdeps/mach/hurd/mkdir.c b/sysdeps/mach/hurd/mkdir.c index 58c2ac4291..1efac949f6 100644 --- a/sysdeps/mach/hurd/mkdir.c +++ b/sysdeps/mach/hurd/mkdir.c @@ -40,4 +40,5 @@ __mkdir (const char *file_name, mode_t mode) return 0; } +libc_hidden_def (__mkdir) weak_alias (__mkdir, mkdir) diff --git a/sysdeps/unix/sysv/linux/generic/chmod.c b/sysdeps/unix/sysv/linux/generic/chmod.c index 41d6d9851f..551c67cd07 100644 --- a/sysdeps/unix/sysv/linux/generic/chmod.c +++ b/sysdeps/unix/sysv/linux/generic/chmod.c @@ -28,4 +28,6 @@ __chmod (const char *file, mode_t mode) { return INLINE_SYSCALL (fchmodat, 3, AT_FDCWD, file, mode); } + +libc_hidden_def (__chmod) weak_alias (__chmod, chmod) diff --git a/sysdeps/unix/sysv/linux/generic/mkdir.c b/sysdeps/unix/sysv/linux/generic/mkdir.c index 6571d29ca3..7eebe90ba7 100644 --- a/sysdeps/unix/sysv/linux/generic/mkdir.c +++ b/sysdeps/unix/sysv/linux/generic/mkdir.c @@ -30,4 +30,6 @@ __mkdir (const char *path, mode_t mode) { return INLINE_SYSCALL (mkdirat, 3, AT_FDCWD, path, mode); } + +libc_hidden_def (__mkdir) weak_alias (__mkdir, mkdir) -- 2.43.5