diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2024-04-23 16:45:59 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2024-04-23 16:53:42 -0300 |
commit | 921efb18ef26cc0dcd024b083a7b22b6d2ccbc0d (patch) | |
tree | 98d9659a9195ad5277f66e20a9a449aca2f681dd /sysdeps/unix/sysv/linux/bits/openat2.h | |
parent | f4724843ada64a51d66f65d3199fe431f9d4c254 (diff) | |
download | glibc-921efb18ef26cc0dcd024b083a7b22b6d2ccbc0d.tar.gz glibc-921efb18ef26cc0dcd024b083a7b22b6d2ccbc0d.tar.xz glibc-921efb18ef26cc0dcd024b083a7b22b6d2ccbc0d.zip |
linux: Add openat2 (BZ 31664) azanella/bz31664-openat2
It was added on Linux 5.6, as an extension of openat. Different than other open-like function, the kernel only provides the LFS variant (so files larger than 4GB always succeed, as other functions with offset larget than off_t). Similar to other open function, the new symbol is a cancellable entrypoint. The testcase added only stress some of the syscall provided functionalities and it is based on existent kernel selftest. Since the prototype does not use variadic arguments, there is no need to add fortify wrapper to catch wrong usages. Checked on x86_64-linux-gnu.
Diffstat (limited to 'sysdeps/unix/sysv/linux/bits/openat2.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/openat2.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/bits/openat2.h b/sysdeps/unix/sysv/linux/bits/openat2.h new file mode 100644 index 0000000000..a07984dace --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/openat2.h @@ -0,0 +1,61 @@ +/* openat2 definition. Linux specific. + Copyright (C) 2024 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/>. */ + +#ifndef _FCNTL_H +# error "Never use <bits/openat2.h> directly; include <fcntl.h> instead." +#endif + +#ifndef __glibc_has_open_how +/* Arguments for how openat2 should open the target path. */ +struct open_how +{ + __uint64_t flags; + __uint64_t mode; + __uint64_t resolve; +}; +#endif + +/* how->resolve flags for openat2. */ +#ifndef RESOLVE_NO_XDEV +# define RESOLVE_NO_XDEV 0x01 /* Block mount-point crossings + (includes bind-mounts). */ +#endif +#ifndef RESOLVE_NO_MAGICLINKS +# define RESOLVE_NO_MAGICLINKS 0x02 /* Block traversal through procfs-style + "magic-links". */ +#endif +#ifndef RESOLVE_NO_SYMLINKS +# define RESOLVE_NO_SYMLINKS 0x04 /* Block traversal through all symlinks + (implies OEXT_NO_MAGICLINKS). */ +#endif +#ifndef RESOLVE_BENEATH +# define RESOLVE_BENEATH 0x08 /* Block "lexical" trickery like + "..", symlinks, and absolute + paths which escape the dirfd. */ +#endif +#ifndef RESOLVE_IN_ROOT +# define RESOLVE_IN_ROOT 0x10 /* Make all jumps to "/" and ".." + be scoped inside the dirfd + (similar to chroot). */ +#endif +#ifndef RESOLVE_CACHED +# define RESOLVE_CACHED 0x20 /* Only complete if resolution can be + completed through cached lookup. May + return -EAGAIN if that's not + possible. */ +#endif |