1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 4 * Copyright (C) 2015 Thomas Meyer (thomas@m3y3r.de) 5 * Copyright (C) 2005 Jeff Dike (jdike@karaya.com) 6 */ 7 8 #ifndef __STUB_DATA_H 9 #define __STUB_DATA_H 10 11 #include <linux/compiler_types.h> 12 #include <as-layout.h> 13 #include <sysdep/tls.h> 14 15 #define STUB_NEXT_SYSCALL(s) \ 16 ((struct stub_syscall *) (((unsigned long) s) + (s)->cmd_len)) 17 18 enum stub_syscall_type { 19 STUB_SYSCALL_UNSET = 0, 20 STUB_SYSCALL_MMAP, 21 STUB_SYSCALL_MUNMAP, 22 STUB_SYSCALL_MPROTECT, 23 STUB_SYSCALL_LDT, 24 }; 25 26 struct stub_syscall { 27 union { 28 struct { 29 unsigned long addr; 30 unsigned long length; 31 unsigned long offset; 32 int fd; 33 int prot; 34 } mem; 35 struct { 36 user_desc_t desc; 37 int func; 38 } ldt; 39 }; 40 41 enum stub_syscall_type syscall; 42 }; 43 44 struct stub_data { 45 unsigned long offset; 46 int fd; 47 long err, child_err; 48 49 int syscall_data_len; 50 /* 128 leaves enough room for additional fields in the struct */ 51 struct stub_syscall syscall_data[(UM_KERN_PAGE_SIZE - 128) / sizeof(struct stub_syscall)] __aligned(16); 52 53 /* Stack for our signal handlers and for calling into . */ 54 unsigned char sigstack[UM_KERN_PAGE_SIZE] __aligned(UM_KERN_PAGE_SIZE); 55 }; 56 57 #endif 58