/* 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 #include #include #include #include #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 { unsigned long offset; long err, child_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