| /* SPDX-License-Identifier: GPL-2.0 */ |
| |
| #ifndef __IDMAP_MISSING_H |
| #define __IDMAP_MISSING_H |
| |
| #ifndef _GNU_SOURCE |
| #define _GNU_SOURCE |
| #endif |
| #include "../global.h" |
| |
| #include <errno.h> |
| #include <linux/types.h> |
| #include <sched.h> |
| #include <signal.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/types.h> |
| #include <syscall.h> |
| #include <unistd.h> |
| |
| #ifndef __NR_mount_setattr |
| #if defined __alpha__ |
| #define __NR_mount_setattr 552 |
| #elif 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 |
| #elif defined __ia64__ |
| #define __NR_mount_setattr (442 + 1024) |
| #else |
| #define __NR_mount_setattr 442 |
| #endif |
| #endif |
| |
| #ifndef __NR_open_tree |
| #if defined __alpha__ |
| #define __NR_open_tree 538 |
| #elif 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 |
| #elif defined __ia64__ |
| #define __NR_open_tree (428 + 1024) |
| #else |
| #define __NR_open_tree 428 |
| #endif |
| #endif |
| |
| #ifndef __NR_move_mount |
| #if defined __alpha__ |
| #define __NR_move_mount 539 |
| #elif defined _MIPS_SIM |
| #if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */ |
| #define __NR_move_mount 4429 |
| #endif |
| #if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */ |
| #define __NR_move_mount 6429 |
| #endif |
| #if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */ |
| #define __NR_move_mount 5429 |
| #endif |
| #elif defined __ia64__ |
| #define __NR_move_mount (428 + 1024) |
| #else |
| #define __NR_move_mount 429 |
| #endif |
| #endif |
| |
| #ifndef MNT_DETACH |
| #define MNT_DETACH 2 |
| #endif |
| |
| #ifndef MS_REC |
| #define MS_REC 1638 |
| #endif |
| |
| #ifndef MS_PRIVATE |
| #define MS_PRIVATE (1 << 18) |
| #endif |
| |
| #ifndef MOVE_MOUNT_F_EMPTY_PATH |
| #define MOVE_MOUNT_F_EMPTY_PATH 0x00000004 /* Empty from path permitted */ |
| #endif |
| |
| #ifndef MOUNT_ATTR_IDMAP |
| #define MOUNT_ATTR_IDMAP 0x00100000 |
| #endif |
| |
| #ifndef OPEN_TREE_CLONE |
| #define OPEN_TREE_CLONE 1 |
| #endif |
| |
| #ifndef OPEN_TREE_CLOEXEC |
| #define OPEN_TREE_CLOEXEC O_CLOEXEC |
| #endif |
| |
| #ifndef AT_RECURSIVE |
| #define AT_RECURSIVE 0x8000 /* Apply to the entire subtree */ |
| #endif |
| |
| #ifndef HAVE_STRUCT_MOUNT_ATTR |
| struct mount_attr { |
| __u64 attr_set; |
| __u64 attr_clr; |
| __u64 propagation; |
| __u64 userns_fd; |
| }; |
| #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); |
| } |
| |
| static inline int sys_move_mount(int from_dfd, const char *from_pathname, int to_dfd, |
| const char *to_pathname, unsigned int flags) |
| { |
| return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags); |
| } |
| |
| static inline int sys_mount(const char *source, const char *target, const char *fstype, |
| unsigned long int flags, const void *data) |
| { |
| return syscall(__NR_mount, source, target, fstype, flags, data); |
| } |
| |
| static inline int sys_umount2(const char *path, int flags) |
| { |
| return syscall(__NR_umount2, path, flags); |
| } |
| |
| static inline int sys_execveat(int fd, const char *path, char **argv, |
| char **envp, int flags) |
| { |
| #ifdef __NR_execveat |
| return syscall(__NR_execveat, fd, path, argv, envp, flags); |
| #else |
| errno = ENOSYS; |
| return -1; |
| #endif |
| } |
| |
| #endif /* __IDMAP_MISSING_H */ |