Remove __access_noerrno

A recent commit, apparently commit
6c6fce572f "elf: Remove /etc/suid-debug
support", resulted in localplt failures for i686-gnu and x86_64-gnu:

Missing required PLT reference: ld.so: __access_noerrno

After that commit, __access_noerrno is actually no longer used at all.
So rather than just removing the localplt expectation for that symbol
for Hurd, completely remove all definitions of and references to that
symbol.

Tested for x86_64, and with build-many-glibcs.py for i686-gnu and
x86_64-gnu.
This commit is contained in:
Joseph Myers 2023-11-23 19:01:32 +00:00
parent 472894d2cf
commit 2e0c0ff95c
9 changed files with 5 additions and 71 deletions

View File

@ -19,13 +19,6 @@
#include <stddef.h>
#include <unistd.h>
/* Test for access to FILE without setting errno. */
int
__access_noerrno (const char *file, int type)
{
return -1;
}
/* Test for access to FILE. */
int
__access (const char *file, int type)

View File

@ -16,6 +16,4 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
extern __typeof (__access) __access_noerrno attribute_hidden;
extern __typeof (__kill) __kill_noerrno attribute_hidden;

View File

@ -15,7 +15,7 @@ libc {
}
GLIBC_PRIVATE {
# Functions shared with the dynamic linker
__access; __access_noerrno; __libc_read; __libc_write; __libc_lseek64;
__access; __libc_read; __libc_write; __libc_lseek64;
__close_nocancel;
__open_nocancel;
__read_nocancel; __pread64_nocancel;
@ -56,7 +56,7 @@ ld {
_dl_init_first;
# functions that must be shared with libc
__access; __access_noerrno; __libc_read; __libc_write; __libc_lseek64;
__access; __libc_read; __libc_write; __libc_lseek64;
__close_nocancel;
__open_nocancel;
__read_nocancel; __pread64_nocancel;

View File

@ -19,16 +19,6 @@
#include <unistd.h>
#include <fcntl.h>
/* Test for access to FILE by our real user and group IDs without setting
errno. This may be unsafe to run during initialization of tunables
since access_common calls __hurd_file_name_lookup, which calls
__hurd_file_name_lookup_retry, which can set errno. */
int
__access_noerrno (const char *file, int type)
{
return __faccessat_noerrno (AT_FDCWD, file, type, 0);
}
/* Test for access to FILE by our real user and group IDs. */
int
__access (const char *file, int type)

View File

@ -542,22 +542,15 @@ __stat64 (const char *file, struct stat64 *buf)
}
libc_hidden_def (__stat64)
/* This function is called by the dynamic linker (rtld.c) to check
whether debugging malloc is allowed even for SUID binaries. This
stub will always fail, which means that malloc-debugging is always
disabled for SUID binaries. */
/* This function is called by the dynamic linker (rtld.c) to check for
existence of /etc/ld.so.preload. This stub will always fail, which
means that /etc/ld.so.preload is unsupported. */
check_no_hidden(__access);
int weak_function
__access (const char *file, int type)
{
return __hurd_fail (ENOSYS);
}
check_no_hidden(__access_noerrno);
int weak_function
__access_noerrno (const char *file, int type)
{
return -1;
}
int
__rtld_execve (const char *file_name, char *const argv[],

View File

@ -27,7 +27,6 @@ ld.so: __mmap
ld.so: __fstat64
ld.so: __stat64
ld.so: __access
ld.so: __access_noerrno
ld.so: __getpid
ld.so: __getcwd
ld.so: _exit ?

View File

@ -1,21 +0,0 @@
/* Syscall wrapper that do not set errno. Generic version.
Copyright (C) 2017-2023 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
<https://www.gnu.org/licenses/>. */
/* The __access_noerrno stub mustn't be hidden in ld.so on Hurd since it needs
to be preempted by __access_noerrno from libc.so after bootstrap. */
extern __typeof (__access) __access_noerrno;

View File

@ -26,7 +26,6 @@ ld.so: __mmap
ld.so: __fstat64
ld.so: __stat64
ld.so: __access
ld.so: __access_noerrno
ld.so: __getpid
ld.so: __getcwd
ld.so: _exit ?

View File

@ -19,23 +19,6 @@
#include <sysdep.h>
#include <fcntl.h>
/* 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;
#ifdef __NR_access
res = INTERNAL_SYSCALL_CALL (access, pathname, mode);
#else
res = INTERNAL_SYSCALL_CALL (faccessat, AT_FDCWD, pathname, mode);
#endif
if (INTERNAL_SYSCALL_ERROR_P (res))
return INTERNAL_SYSCALL_ERRNO (res);
return 0;
}
static inline int
__kill_noerrno (pid_t pid, int sig)
{