1
0
mirror of https://github.com/Zygo/bees.git synced 2025-08-03 06:13:29 +02:00
Commit Graph

3 Commits

Author SHA1 Message Date
Zygo Blaxell
e852e3998a openat2: LINUX_VERSION_CODE is defined by linux-libc-dev, not libc
With new kernel headers and old libc, `SYS_openat2` can still end up
undefined, which triggers the fallback build-time code, that doesn't build:

```
openat2.cc: In function 'int openat2(int, const char*, open_how*, size_t)':
openat2.cc:35:2: error: 'errno' was not declared in this scope
   35 |  errno = ENOSYS;
      |  ^~~~~
openat2.cc:24:1: note: 'errno' is defined in header '<cerrno>'; did you forget to '#include <cerrno>'?
   23 | #include <unistd.h>
  +++ |+#include <cerrno>
   24 |
openat2.cc:35:10: error: 'ENOSYS' was not declared in this scope
   35 |  errno = ENOSYS;
      |          ^~~~~~
openat2.cc:29:19: error: unused parameter 'dirfd' [-Werror=unused-parameter]
   29 | openat2(int const dirfd, const char *const pathname, struct open_how *const how, size_t const size)
      |         ~~~~~~~~~~^~~~~
openat2.cc:29:44: error: unused parameter 'pathname' [-Werror=unused-parameter]
   29 | openat2(int const dirfd, const char *const pathname, struct open_how *const how, size_t const size)
      |                          ~~~~~~~~~~~~~~~~~~^~~~~~~~
openat2.cc:29:77: error: unused parameter 'how' [-Werror=unused-parameter]
   29 | t dirfd, const char *const pathname, struct open_how *const how, size_t const size)
      |                                      ~~~~~~~~~~~~~~~~~~~~~~~^~~

openat2.cc:29:95: error: unused parameter 'size' [-Werror=unused-parameter]
   29 | st char *const pathname, struct open_how *const how, size_t const size)
      |                                                      ~~~~~~~~~~~~~^~~~
```

Skip the kernel version check and test for the definition of `SYS_openat2`
directly.  If it's not there, plug in the constant so we can send the
call directly to the kernel, bypassing libc completely.

Fixes: https://github.com/Zygo/bees/issues/318
Signed-off-by: Zygo Blaxell <bees@furryterror.org>
2025-07-21 21:21:54 -04:00
Zygo Blaxell
ad11db2ee1 openat2: supply the missing definitions for building with old headers and new kernel
Apparently Ubuntu 20 has upgraded to kernel 5.15, but still builds things
with 5.4 headers.

Signed-off-by: Zygo Blaxell <bees@furryterror.org>
2025-01-19 22:20:06 -05:00
Zygo Blaxell
a9b07d7684 openat2: create a weak syscall wrapper for it
openat2 allows closing more TOCTOU holes, but we can only use it when
the kernel supports it.

This should disappear seamlessly when libc implements the function.

Signed-off-by: Zygo Blaxell <bees@furryterror.org>
2025-01-09 01:36:39 -05:00