diff options
author | Alexandra Hájková <alexandra.khirnova@gmail.com> | 2021-05-03 16:35:10 +0000 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-05-03 16:46:06 -0300 |
commit | 19d83270fcd993cc349570164e21b06d57036704 (patch) | |
tree | 3b792ec90a694a69046fe4858d5f408fcb9e41ff | |
parent | 1427d28e3008e2d2d467883a14a24df6a40b82b1 (diff) | |
download | glibc-19d83270fcd993cc349570164e21b06d57036704.tar glibc-19d83270fcd993cc349570164e21b06d57036704.tar.gz glibc-19d83270fcd993cc349570164e21b06d57036704.tar.bz2 glibc-19d83270fcd993cc349570164e21b06d57036704.zip |
linux: Add execveat system call wrapper
It operates similar to execve and it is is already used to implement
fexecve without requiring /proc to be mounted. However, different
than fexecve, if the syscall is not supported by the kernel an error
is returned instead of trying a fallback.
Checked on x86_64-linux-gnu and powerpc64le-linux-gnu.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
40 files changed, 305 insertions, 2 deletions
@@ -18,6 +18,11 @@ Major new features: a dump of information related to IFUNC resolver operation and glibc-hwcaps subdirectory selection. +* On Linux, the function execveat has been added. It operates similar to + execve and it is is already used to implement fexecve without requiring + /proc to be mounted. However, different than fexecve, if the syscall is not + supported by the kernel an error is returned instead of trying a fallback. + Deprecated and removed features, and other changes affecting compatibility: * The function pthread_mutex_consistent_np has been deprecated; programs diff --git a/posix/Makefile b/posix/Makefile index 64494557f1..fa0dc0ea20 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -66,7 +66,8 @@ routines := \ posix_madvise \ get_child_max sched_cpucount sched_cpualloc sched_cpufree \ streams-compat \ - shm-directory + shm-directory \ + execveat aux := init-posix environ tests := test-errno tstgetopt testfnm runtests runptests \ @@ -103,7 +104,7 @@ tests := test-errno tstgetopt testfnm runtests runptests \ tst-sysconf-empty-chroot tst-glob_symlinks tst-fexecve \ tst-glob-tilde test-ssize-max tst-spawn4 bug-regex37 \ bug-regex38 tst-regcomp-truncated tst-spawn-chdir \ - tst-wordexp-nocmd + tst-wordexp-nocmd tst-execveat # Test for the glob symbol version that was replaced in glibc 2.27. ifeq ($(have-GLIBC_2.26)$(build-shared),yesyes) diff --git a/posix/Versions b/posix/Versions index cfd3819966..b77e251e00 100644 --- a/posix/Versions +++ b/posix/Versions @@ -147,6 +147,9 @@ libc { } GLIBC_2.30 { } + GLIBC_2.34 { + execveat; + } GLIBC_PRIVATE { __libc_fork; __libc_pread; __libc_pwrite; __nanosleep_nocancel; __pause_nocancel; diff --git a/posix/execveat.c b/posix/execveat.c new file mode 100644 index 0000000000..7ae95f72f6 --- /dev/null +++ b/posix/execveat.c @@ -0,0 +1,41 @@ +/* Execute program relative to a directory file descriptor. + Copyright (C) 2021 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/>. */ + +#include <errno.h> +#include <stddef.h> +#include <unistd.h> + +/* Replace the current process, executing PATH relative to difrd with + arguments argv and environment envp. + argv and envp are terminated by NULL pointers. */ +int +__execveat (int dirfd, const char *path, char *const argv[], char *const envp[], + int flags) +{ + if (path == NULL || argv == NULL || envp == NULL) + { + __set_errno (EINVAL); + return -1; + } + + __set_errno (ENOSYS); + return -1; +} +stub_warning (execveat) + +weak_alias (__execveat, execveat) diff --git a/posix/tst-execveat.c b/posix/tst-execveat.c new file mode 100644 index 0000000000..53178c10d5 --- /dev/null +++ b/posix/tst-execveat.c @@ -0,0 +1,183 @@ +/* Test execveat at the various corner cases. + Copyright (C) 2021 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/>. */ + +#include <fcntl.h> +#include <errno.h> +#include <stdlib.h> +#include <sys/types.h> +#include <dirent.h> +#include <support/check.h> +#include <support/support.h> +#include <support/temp_file.h> +#include <support/xdlfcn.h> +#include <support/xstdio.h> +#include <support/xunistd.h> +#include <wait.h> +#include <support/test-driver.h> + +int +call_execveat (int fd, const char *pathname, int flags, int expected_fail, + int num) +{ + char *envp[] = { (char *) "FOO=3", NULL }; + char *argv[] = { (char *) "sh", (char *) "-c", (char *) "exit $FOO", NULL }; + pid_t pid; + int status; + + if (test_verbose > 0) + printf ("call line number: %d\n", num); + + pid = xfork (); + if (pid == 0) + { + TEST_COMPARE (execveat (fd, pathname, argv, envp, flags), -1); + if (errno == ENOSYS) + exit (EXIT_UNSUPPORTED); + else if (errno == expected_fail) + { + if (test_verbose > 0) + printf ("expected fail: errno %d\n", errno); + _exit (0); + } + else + FAIL_EXIT1 ("execveat failed: %m (%d)", errno); + } + xwaitpid (pid, &status, 0); + + if (!WIFEXITED (status)) + FAIL_RET ("child hasn't exited normally"); + + if (WIFEXITED (status)) + { + if (WEXITSTATUS (status) == EXIT_UNSUPPORTED) + FAIL_UNSUPPORTED ("execveat is unimplemented"); + else if (expected_fail != 0) + TEST_COMPARE (WEXITSTATUS (status), 0); + else + TEST_COMPARE (WEXITSTATUS (status), 3); + } + return 0; +} + +static int +do_test (void) +{ + DIR *dirp; + int fd, fd_out; + char *tmp_dir, *symlink_name, *tmp_sh; + struct stat64 st; + + dirp = opendir ("/bin"); + if (dirp == NULL) + FAIL_EXIT1 ("failed to open /bin"); + fd = dirfd (dirp); + + /* Call execveat for various fd/pathname combinations. */ + + /* Check the pathname relative to a valid dirfd. */ + call_execveat (fd, "sh", 0, 0, __LINE__); + xchdir ("/bin"); + /* Use the special value AT_FDCWD as dirfd. Quoting open(2): + If pathname is relative and dirfd is the special value AT_FDCWD, then + pathname is interpreted relative to the current working directory of + the calling process. */ + call_execveat (AT_FDCWD, "sh", 0, 0, __LINE__); + xclose (fd); +#ifdef O_PATH + /* Check the pathname relative to a valid dirfd with O_PATH. */ + fd = xopen ("/bin", O_PATH | O_DIRECTORY, O_RDONLY); + call_execveat (fd, "sh", 0, 0, __LINE__); + xclose (fd); + + /* Check absolute pathname, dirfd should be ignored. */ + call_execveat (AT_FDCWD, "/bin/sh", 0, 0, __LINE__); + fd = xopen ("/usr", O_PATH | O_DIRECTORY, 0); + /* Same check for absolute pathname, but with input file descriptor + openend with different flags. The dirfd should be ignored. */ + call_execveat (fd, "/bin/sh", 0, 0, __LINE__); + xclose (fd); +#endif + + fd = xopen ("/usr", O_RDONLY, 0); + /* Same check for absolute pathname, but with input file descriptor + openend with different flags. The dirfd should be ignored. */ + call_execveat (fd, "/bin/sh", 0, 0, __LINE__); + xclose (fd); + + fd = xopen ("/bin/sh", O_RDONLY, 0); + /* Check relative pathname, where dirfd does not point to a directory. */ + call_execveat (fd, "sh", 0, ENOTDIR, __LINE__); + /* Check absolute pathname, but dirfd is a regular file. The dirfd + should be ignored. */ + call_execveat (fd, "/bin/sh", 0, 0, __LINE__); + xclose (fd); + +#ifdef O_PATH + /* Quoting open(2): O_PATH + Obtain a file descriptor that can be used for two purposes: to + indicate a location in the filesystem tree and to perform + operations that act purely at the file descriptor level. */ + fd = xopen ("/bin/sh", O_PATH, 0); + /* Check the empty pathname. Dirfd is a regular file with O_PATH. */ + call_execveat (fd, "", 0, ENOENT, __LINE__); + /* Same check for an empty pathname, but with AT_EMPTY_PATH flag. + Quoting open(2): + If oldpath is an empty string, create a link to the file referenced + by olddirfd (which may have been obtained using the open(2) O_PATH flag. */ + call_execveat (fd, "", AT_EMPTY_PATH, 0, __LINE__); + call_execveat (fd, "", AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW, 0, __LINE__); + xclose (fd); + + /* Create a temporary directory "tmp_dir" and create a symbolik link tmp_sh + pointing to /bin/sh inside the tmp_dir. Open dirfd as a symbolic link. */ + tmp_dir = support_create_temp_directory ("tst-execveat_dir"); + symlink_name = xasprintf ("%s/symlink", tmp_dir); + xsymlink ("tmp_sh", symlink_name); + add_temp_file (symlink_name); + tmp_sh = xasprintf ("%s/tmp_sh", tmp_dir); + add_temp_file (tmp_sh); + fd_out = xopen (symlink_name, O_CREAT | O_WRONLY, 0); + xstat ("/bin/sh", &st); + fd = xopen ("/bin/sh", O_RDONLY, 0); + xcopy_file_range (fd, 0, fd_out, 0, st.st_size, 0); + xfchmod (fd_out, 0700); + xclose (fd); + xclose (fd_out); + fd_out = xopen (symlink_name, O_PATH, 0); + + /* Check the empty pathname. Dirfd is a symbolic link. */ + call_execveat (fd_out, "", 0, ENOENT, __LINE__); + call_execveat (fd_out, "", AT_EMPTY_PATH, 0, __LINE__); + call_execveat (fd_out, "", AT_EMPTY_PATH | AT_SYMLINK_NOFOLLOW, 0, + __LINE__); + xclose (fd_out); + free (symlink_name); + free (tmp_sh); + free (tmp_dir); +#endif + + /* Call execveat with closed fd, we expect this to fail with EBADF. */ + call_execveat (fd, "sh", 0, EBADF, __LINE__); + /* Call execveat with closed fd, we expect this to pass because the pathname is + absolute. */ + call_execveat (fd, "/bin/sh", 0, 0, __LINE__); + + return 0; +} + +#include <support/test-driver.c> diff --git a/posix/unistd.h b/posix/unistd.h index 3f22763379..d9d8929f71 100644 --- a/posix/unistd.h +++ b/posix/unistd.h @@ -295,6 +295,11 @@ extern int euidaccess (const char *__name, int __type) /* An alias for `euidaccess', used by some other systems. */ extern int eaccess (const char *__name, int __type) __THROW __nonnull ((1)); + +/* Execute program relative to a directory file descriptor. */ +extern int execveat (int __fd, const char *__path, char *const __argv[], + char *const __envp[], int __flags) + __THROW __nonnull ((2, 3)); #endif #ifdef __USE_ATFILE diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index fcba25ee5e..fb2683edc2 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -2207,6 +2207,7 @@ GLIBC_2.33 stat64 F GLIBC_2.34 __isnanf128 F GLIBC_2.34 __libc_start_main F GLIBC_2.34 _hurd_libc_proc_init F +GLIBC_2.34 execveat F GLIBC_2.4 __confstr_chk F GLIBC_2.4 __fgets_chk F GLIBC_2.4 __fgets_unlocked_chk F diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index aad440cc6a..29094366e3 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -2286,6 +2286,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index e0deca069c..74998fc5b0 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -2367,6 +2367,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist index ac0f574207..8ce7184069 100644 --- a/sysdeps/unix/sysv/linux/arc/libc.abilist +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist @@ -2045,6 +2045,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index c77241c227..3eb6816ffc 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -193,6 +193,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index 9e02ac94d8..bd3a7c2830 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -190,6 +190,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist index a209787385..14dade3ad5 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2229,6 +2229,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/execveat.c b/sysdeps/unix/sysv/linux/execveat.c new file mode 100644 index 0000000000..29ab81a464 --- /dev/null +++ b/sysdeps/unix/sysv/linux/execveat.c @@ -0,0 +1,32 @@ +/* Execute program relative to a directory file descriptor. + Copyright (C) 2021 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/>. */ + +#include <fd_to_filename.h> +#include <sysdep.h> +#include <unistd.h> + +/* Execute the file FD refers to, overlaying the running program image. + ARGV and ENVP are passed to the new program, as for 'execve'. */ +int +execveat (int dirfd, const char *path, char *const argv[], char *const envp[], + int flags) +{ + /* Avoid implicit array coercion in syscall macros. */ + return INLINE_SYSCALL_CALL (execveat, dirfd, path, &argv[0], &envp[0], + flags); +} diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index cbbf211ee5..286ac0c44d 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2180,6 +2180,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index 24cb2d684d..e33fe31138 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2357,6 +2357,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist index 7513d48cae..eedd7293e2 100644 --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist @@ -2214,6 +2214,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index 013dcbb16d..0cf1c052db 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -194,6 +194,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index 0748c21b38..9a457376e2 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2300,6 +2300,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index 4f0cf3bd56..540e503a0b 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2280,6 +2280,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index 726bae9a75..f630215296 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2277,6 +2277,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index 12f4c46f75..f4f2d706c0 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2263,6 +2263,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index 640f5e8c7b..ee5b775cd0 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2261,6 +2261,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index 92c0be4e90..6d9798fb9a 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2269,6 +2269,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index 90a0e497f6..e6d6053906 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -2263,6 +2263,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist index caeb686742..743d981081 100644 --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2319,6 +2319,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index 6bb6f8f092..e173d5a95c 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -2327,6 +2327,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index 29dad1780c..b5e32bef98 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -2360,6 +2360,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index c410a6cc6a..20168d3df3 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@ -2181,6 +2181,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index 7a2bf05cb0..5f94b1ce64 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@ -2482,6 +2482,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist index fa4803dae3..3fe5e16e5d 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist @@ -2047,6 +2047,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index 91cbd00879..f9beb99367 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -2247,6 +2247,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index 78bc38dc23..bfa492a8c7 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2325,6 +2325,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index 8fbd2129b4..27e9b47768 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -2218,6 +2218,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index 2199062106..b5cd5109ad 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2187,6 +2187,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index 10d5e2d2c9..1b20c9fcb1 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2184,6 +2184,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index 55df20cf28..c99298c588 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2316,6 +2316,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index f9520b474d..19c6041c49 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -2235,6 +2235,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index 9a4a3c16fa..9c5096c1d9 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -2196,6 +2196,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index 21385c23d1..15bec846ec 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -2301,6 +2301,7 @@ GLIBC_2.34 cnd_init F GLIBC_2.34 cnd_signal F GLIBC_2.34 cnd_timedwait F GLIBC_2.34 cnd_wait F +GLIBC_2.34 execveat F GLIBC_2.34 mtx_destroy F GLIBC_2.34 mtx_init F GLIBC_2.34 mtx_lock F |