Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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
20struct 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
37enum stub_syscall_type {
38 STUB_SYSCALL_UNSET = 0,
39 STUB_SYSCALL_MMAP,
40 STUB_SYSCALL_MUNMAP,
41};
42
43struct 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
55struct 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