| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /* | |
| * Copyright (C) 2015 Thomas Meyer (thomas@m3y3r.de) | |
| * Copyright (C) 2005 Jeff Dike (jdike@karaya.com) | |
| */ | |
| #ifndef __STUB_DATA_H | |
| #define __STUB_DATA_H | |
| #include <linux/compiler_types.h> | |
| #include <as-layout.h> | |
| #include <sysdep/tls.h> | |
| #include <sysdep/stub-data.h> | |
| #include <mm_id.h> | |
| #define FUTEX_IN_CHILD 0 | |
| #define FUTEX_IN_KERN 1 | |
| struct stub_init_data { | |
| int seccomp; | |
| unsigned long stub_start; | |
| int stub_code_fd; | |
| unsigned long stub_code_offset; | |
| int stub_data_fd; | |
| unsigned long stub_data_offset; | |
| unsigned long signal_handler; | |
| unsigned long signal_restorer; | |
| }; | |
| #define STUB_NEXT_SYSCALL(s) \ | |
| ((struct stub_syscall *) (((unsigned long) s) + (s)->cmd_len)) | |
| enum stub_syscall_type { | |
| STUB_SYSCALL_UNSET = 0, | |
| STUB_SYSCALL_MMAP, | |
| STUB_SYSCALL_MUNMAP, | |
| }; | |
| struct stub_syscall { | |
| struct { | |
| unsigned long addr; | |
| unsigned long length; | |
| unsigned long offset; | |
| int fd; | |
| int prot; | |
| } mem; | |
| enum stub_syscall_type syscall; | |
| }; | |
| struct stub_data { | |
| long err; | |
| int syscall_data_len; | |
| /* 128 leaves enough room for additional fields in the struct */ | |
| struct stub_syscall syscall_data[(UM_KERN_PAGE_SIZE - 128) / sizeof(struct stub_syscall)] __aligned(16); | |
| /* data shared with signal handler (only used in seccomp mode) */ | |
| short restart_wait; | |
| unsigned int futex; | |
| int signal; | |
| unsigned short si_offset; | |
| unsigned short mctx_offset; | |
| /* seccomp architecture specific state restore */ | |
| struct stub_data_arch arch_data; | |
| /* Stack for our signal handlers and for calling into . */ | |
| unsigned char sigstack[UM_KERN_PAGE_SIZE] __aligned(UM_KERN_PAGE_SIZE); | |
| }; | |
| #endif |