From 96bd487590bdcd075b32eea1741f3626ae15be43 Mon Sep 17 00:00:00 2001 From: Rodrigo Campos Date: Thu, 9 Feb 2023 12:58:30 +0100 Subject: [PATCH] nsenter: Add idmap helpers We add idmap.h with the needed includes and defines in case the system headers don't have the definition for the idmap syscalls we need. Future patches will use these helpers. Co-authored-by: Francis Laniel Signed-off-by: Rodrigo Campos --- libcontainer/nsenter/idmap.h | 76 ++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 libcontainer/nsenter/idmap.h diff --git a/libcontainer/nsenter/idmap.h b/libcontainer/nsenter/idmap.h new file mode 100644 index 000000000..fa25a3bfb --- /dev/null +++ b/libcontainer/nsenter/idmap.h @@ -0,0 +1,76 @@ +#ifndef IDMAP_H +#define IDMAP_H + +#include +// Centos-7 doesn't have this file nor the __has_include() directive, so let's +// just leave this commented out and we can uncomment when it hits EOL (2024-06-30). +//#include +#include +#include + +/* mount_setattr() */ +#ifndef MOUNT_ATTR_IDMAP +#define MOUNT_ATTR_IDMAP 0x00100000 +#endif + +#ifndef __NR_mount_setattr + #if defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_mount_setattr (442 + 4000) + #endif + #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */ + #define __NR_mount_setattr (442 + 6000) + #endif + #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */ + #define __NR_mount_setattr (442 + 5000) + #endif + #else + #define __NR_mount_setattr 442 + #endif +#endif +#ifndef MOUNT_ATTR_SIZE_VER0 +struct mount_attr { + __u64 attr_set; + __u64 attr_clr; + __u64 propagation; + __u64 userns_fd; +}; +#endif + +/* open_tree() */ +#ifndef OPEN_TREE_CLONE +#define OPEN_TREE_CLONE 1 +#endif + +#ifndef OPEN_TREE_CLOEXEC +#define OPEN_TREE_CLOEXEC O_CLOEXEC +#endif + +#ifndef __NR_open_tree + #if defined _MIPS_SIM + #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ + #define __NR_open_tree 4428 + #endif + #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */ + #define __NR_open_tree 6428 + #endif + #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */ + #define __NR_open_tree 5428 + #endif + #else + #define __NR_open_tree 428 + #endif +#endif + +static inline int sys_mount_setattr(int dfd, const char *path, unsigned int flags, struct mount_attr *attr, size_t size) +{ + return syscall(__NR_mount_setattr, dfd, path, flags, attr, size); +} + +static inline int sys_open_tree(int dfd, const char *filename, unsigned int flags) +{ + return syscall(__NR_open_tree, dfd, filename, flags); +} + + +#endif /* IDMAP_H */