xref: /linux/arch/um/include/shared/skas/stub-data.h (revision fc282d1731ec4686c1a84f8aca50c0c421e593b5)
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 #include <sysdep/stub-data.h>
15 #include <mm_id.h>
16 
17 #define FUTEX_IN_CHILD 0
18 #define FUTEX_IN_KERN 1
19 
20 struct stub_init_data {
21 	int seccomp;
22 
23 	unsigned long stub_start;
24 
25 	int stub_code_fd;
26 	unsigned long stub_code_offset;
27 	int stub_data_fd;
28 	unsigned long stub_data_offset;
29 
30 	unsigned long signal_handler;
31 	unsigned long signal_restorer;
32 };
33 
34 #define STUB_NEXT_SYSCALL(s) \
35 	((struct stub_syscall *) (((unsigned long) s) + (s)->cmd_len))
36 
37 enum stub_syscall_type {
38 	STUB_SYSCALL_UNSET = 0,
39 	STUB_SYSCALL_MMAP,
40 	STUB_SYSCALL_MUNMAP,
41 };
42 
43 struct stub_syscall {
44 	struct {
45 		unsigned long addr;
46 		unsigned long length;
47 		unsigned long offset;
48 		int fd;
49 		int prot;
50 	} mem;
51 
52 	enum stub_syscall_type syscall;
53 };
54 
55 struct stub_data {
56 	long err;
57 
58 	int syscall_data_len;
59 	/* 128 leaves enough room for additional fields in the struct */
60 	struct stub_syscall syscall_data[(UM_KERN_PAGE_SIZE - 128) / sizeof(struct stub_syscall)] __aligned(16);
61 
62 	/* data shared with signal handler (only used in seccomp mode) */
63 	short restart_wait;
64 	unsigned int futex;
65 	int signal;
66 	unsigned short si_offset;
67 	unsigned short mctx_offset;
68 
69 	/* seccomp architecture specific state restore */
70 	struct stub_data_arch arch_data;
71 
72 	/* Stack for our signal handlers and for calling into . */
73 	unsigned char sigstack[UM_KERN_PAGE_SIZE] __aligned(UM_KERN_PAGE_SIZE);
74 };
75 
76 #endif
77