From 87545854f7b641034cc79f61a03e05641b736048 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Fri, 5 Feb 2021 18:42:10 +0100 Subject: [PATCH] mount_utils: detect new mount api support Signed-off-by: Christian Brauner --- src/lxc/mount_utils.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/lxc/mount_utils.h b/src/lxc/mount_utils.h index 9ba964de2..d704bfe1d 100644 --- a/src/lxc/mount_utils.h +++ b/src/lxc/mount_utils.h @@ -10,6 +10,7 @@ #include "compiler.h" #include "memory_utils.h" +#include "syscall_wrappers.h" /* open_tree() flags */ @@ -186,4 +187,26 @@ __hidden extern int fd_bind_mount(int dfd_from, const char *path_from, __u64 o_flags_to, __u64 resolve_flags_to, unsigned int attr_flags, bool recursive); +/* + * We use openat2() as indicator whether or not the new mount api is supported. + * First, because openat2() has been introduced after all syscalls from the new + * mount api we currently use and second because our hardened mount logic + * relies on openat2() to safely resolve paths. + */ +static inline bool new_mount_api(void) +{ + __do_close int fd; + static int supported = -1; + + if (supported == -1) { + fd = openat2(-EBADF, "", NULL, 0); + if (fd < 0 && errno != ENOSYS) + supported = 1; + else + supported = 0; + } + + return supported == 1; +} + #endif /* __LXC_MOUNT_UTILS_H */ -- 2.47.2