diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/errno.c | 206 | ||||
-rw-r--r-- | src/lib/syscall.c | 1694 |
2 files changed, 1900 insertions, 0 deletions
diff --git a/src/lib/errno.c b/src/lib/errno.c new file mode 100644 index 000000000..d38c197ad --- /dev/null +++ b/src/lib/errno.c | |||
@@ -0,0 +1,206 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2014-2020 Firejail Authors | ||
3 | * | ||
4 | * This file is part of firejail project | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | #include "../include/syscall.h" | ||
21 | |||
22 | #include <errno.h> | ||
23 | #include <stdio.h> | ||
24 | #include <string.h> | ||
25 | //#include <attr/xattr.h> | ||
26 | |||
27 | typedef struct { | ||
28 | char *name; | ||
29 | int nr; | ||
30 | } ErrnoEntry; | ||
31 | |||
32 | static ErrnoEntry errnolist[] = { | ||
33 | // | ||
34 | // code generated using tools/extract-errnos | ||
35 | // | ||
36 | {"EPERM", EPERM}, | ||
37 | {"ENOENT", ENOENT}, | ||
38 | {"ESRCH", ESRCH}, | ||
39 | {"EINTR", EINTR}, | ||
40 | {"EIO", EIO}, | ||
41 | {"ENXIO", ENXIO}, | ||
42 | {"E2BIG", E2BIG}, | ||
43 | {"ENOEXEC", ENOEXEC}, | ||
44 | {"EBADF", EBADF}, | ||
45 | {"ECHILD", ECHILD}, | ||
46 | {"EAGAIN", EAGAIN}, | ||
47 | {"ENOMEM", ENOMEM}, | ||
48 | {"EACCES", EACCES}, | ||
49 | {"EFAULT", EFAULT}, | ||
50 | {"ENOTBLK", ENOTBLK}, | ||
51 | {"EBUSY", EBUSY}, | ||
52 | {"EEXIST", EEXIST}, | ||
53 | {"EXDEV", EXDEV}, | ||
54 | {"ENODEV", ENODEV}, | ||
55 | {"ENOTDIR", ENOTDIR}, | ||
56 | {"EISDIR", EISDIR}, | ||
57 | {"EINVAL", EINVAL}, | ||
58 | {"ENFILE", ENFILE}, | ||
59 | {"EMFILE", EMFILE}, | ||
60 | {"ENOTTY", ENOTTY}, | ||
61 | {"ETXTBSY", ETXTBSY}, | ||
62 | {"EFBIG", EFBIG}, | ||
63 | {"ENOSPC", ENOSPC}, | ||
64 | {"ESPIPE", ESPIPE}, | ||
65 | {"EROFS", EROFS}, | ||
66 | {"EMLINK", EMLINK}, | ||
67 | {"EPIPE", EPIPE}, | ||
68 | {"EDOM", EDOM}, | ||
69 | {"ERANGE", ERANGE}, | ||
70 | {"EDEADLK", EDEADLK}, | ||
71 | {"ENAMETOOLONG", ENAMETOOLONG}, | ||
72 | {"ENOLCK", ENOLCK}, | ||
73 | {"ENOSYS", ENOSYS}, | ||
74 | {"ENOTEMPTY", ENOTEMPTY}, | ||
75 | {"ELOOP", ELOOP}, | ||
76 | {"EWOULDBLOCK", EWOULDBLOCK}, | ||
77 | {"ENOMSG", ENOMSG}, | ||
78 | {"EIDRM", EIDRM}, | ||
79 | {"ECHRNG", ECHRNG}, | ||
80 | {"EL2NSYNC", EL2NSYNC}, | ||
81 | {"EL3HLT", EL3HLT}, | ||
82 | {"EL3RST", EL3RST}, | ||
83 | {"ELNRNG", ELNRNG}, | ||
84 | {"EUNATCH", EUNATCH}, | ||
85 | {"ENOCSI", ENOCSI}, | ||
86 | {"EL2HLT", EL2HLT}, | ||
87 | {"EBADE", EBADE}, | ||
88 | {"EBADR", EBADR}, | ||
89 | {"EXFULL", EXFULL}, | ||
90 | {"ENOANO", ENOANO}, | ||
91 | {"EBADRQC", EBADRQC}, | ||
92 | {"EBADSLT", EBADSLT}, | ||
93 | {"EDEADLOCK", EDEADLOCK}, | ||
94 | {"EBFONT", EBFONT}, | ||
95 | {"ENOSTR", ENOSTR}, | ||
96 | {"ENODATA", ENODATA}, | ||
97 | {"ETIME", ETIME}, | ||
98 | {"ENOSR", ENOSR}, | ||
99 | {"ENONET", ENONET}, | ||
100 | {"ENOPKG", ENOPKG}, | ||
101 | {"EREMOTE", EREMOTE}, | ||
102 | {"ENOLINK", ENOLINK}, | ||
103 | {"EADV", EADV}, | ||
104 | {"ESRMNT", ESRMNT}, | ||
105 | {"ECOMM", ECOMM}, | ||
106 | {"EPROTO", EPROTO}, | ||
107 | {"EMULTIHOP", EMULTIHOP}, | ||
108 | {"EDOTDOT", EDOTDOT}, | ||
109 | {"EBADMSG", EBADMSG}, | ||
110 | {"EOVERFLOW", EOVERFLOW}, | ||
111 | {"ENOTUNIQ", ENOTUNIQ}, | ||
112 | {"EBADFD", EBADFD}, | ||
113 | {"EREMCHG", EREMCHG}, | ||
114 | {"ELIBACC", ELIBACC}, | ||
115 | {"ELIBBAD", ELIBBAD}, | ||
116 | {"ELIBSCN", ELIBSCN}, | ||
117 | {"ELIBMAX", ELIBMAX}, | ||
118 | {"ELIBEXEC", ELIBEXEC}, | ||
119 | {"EILSEQ", EILSEQ}, | ||
120 | {"ERESTART", ERESTART}, | ||
121 | {"ESTRPIPE", ESTRPIPE}, | ||
122 | {"EUSERS", EUSERS}, | ||
123 | {"ENOTSOCK", ENOTSOCK}, | ||
124 | {"EDESTADDRREQ", EDESTADDRREQ}, | ||
125 | {"EMSGSIZE", EMSGSIZE}, | ||
126 | {"EPROTOTYPE", EPROTOTYPE}, | ||
127 | {"ENOPROTOOPT", ENOPROTOOPT}, | ||
128 | {"EPROTONOSUPPORT", EPROTONOSUPPORT}, | ||
129 | {"ESOCKTNOSUPPORT", ESOCKTNOSUPPORT}, | ||
130 | {"EOPNOTSUPP", EOPNOTSUPP}, | ||
131 | {"EPFNOSUPPORT", EPFNOSUPPORT}, | ||
132 | {"EAFNOSUPPORT", EAFNOSUPPORT}, | ||
133 | {"EADDRINUSE", EADDRINUSE}, | ||
134 | {"EADDRNOTAVAIL", EADDRNOTAVAIL}, | ||
135 | {"ENETDOWN", ENETDOWN}, | ||
136 | {"ENETUNREACH", ENETUNREACH}, | ||
137 | {"ENETRESET", ENETRESET}, | ||
138 | {"ECONNABORTED", ECONNABORTED}, | ||
139 | {"ECONNRESET", ECONNRESET}, | ||
140 | {"ENOBUFS", ENOBUFS}, | ||
141 | {"EISCONN", EISCONN}, | ||
142 | {"ENOTCONN", ENOTCONN}, | ||
143 | {"ESHUTDOWN", ESHUTDOWN}, | ||
144 | {"ETOOMANYREFS", ETOOMANYREFS}, | ||
145 | {"ETIMEDOUT", ETIMEDOUT}, | ||
146 | {"ECONNREFUSED", ECONNREFUSED}, | ||
147 | {"EHOSTDOWN", EHOSTDOWN}, | ||
148 | {"EHOSTUNREACH", EHOSTUNREACH}, | ||
149 | {"EALREADY", EALREADY}, | ||
150 | {"EINPROGRESS", EINPROGRESS}, | ||
151 | {"ESTALE", ESTALE}, | ||
152 | {"EUCLEAN", EUCLEAN}, | ||
153 | {"ENOTNAM", ENOTNAM}, | ||
154 | {"ENAVAIL", ENAVAIL}, | ||
155 | {"EISNAM", EISNAM}, | ||
156 | {"EREMOTEIO", EREMOTEIO}, | ||
157 | {"EDQUOT", EDQUOT}, | ||
158 | {"ENOMEDIUM", ENOMEDIUM}, | ||
159 | {"EMEDIUMTYPE", EMEDIUMTYPE}, | ||
160 | {"ECANCELED", ECANCELED}, | ||
161 | {"ENOKEY", ENOKEY}, | ||
162 | {"EKEYEXPIRED", EKEYEXPIRED}, | ||
163 | {"EKEYREVOKED", EKEYREVOKED}, | ||
164 | {"EKEYREJECTED", EKEYREJECTED}, | ||
165 | {"EOWNERDEAD", EOWNERDEAD}, | ||
166 | {"ENOTRECOVERABLE", ENOTRECOVERABLE}, | ||
167 | {"ERFKILL", ERFKILL}, | ||
168 | {"EHWPOISON", EHWPOISON}, | ||
169 | {"ENOTSUP", ENOTSUP}, | ||
170 | #ifdef ENOATTR | ||
171 | {"ENOATTR", ENOATTR}, | ||
172 | #endif | ||
173 | }; | ||
174 | |||
175 | int errno_find_name(const char *name) { | ||
176 | int i; | ||
177 | int elems = sizeof(errnolist) / sizeof(errnolist[0]); | ||
178 | for (i = 0; i < elems; i++) { | ||
179 | if (strcasecmp(name, errnolist[i].name) == 0) | ||
180 | return errnolist[i].nr; | ||
181 | } | ||
182 | |||
183 | return -1; | ||
184 | } | ||
185 | |||
186 | char *errno_find_nr(int nr) { | ||
187 | int i; | ||
188 | int elems = sizeof(errnolist) / sizeof(errnolist[0]); | ||
189 | for (i = 0; i < elems; i++) { | ||
190 | if (nr == errnolist[i].nr) | ||
191 | return errnolist[i].name; | ||
192 | } | ||
193 | |||
194 | return "unknown"; | ||
195 | } | ||
196 | |||
197 | |||
198 | |||
199 | void errno_print(void) { | ||
200 | int i; | ||
201 | int elems = sizeof(errnolist) / sizeof(errnolist[0]); | ||
202 | for (i = 0; i < elems; i++) { | ||
203 | printf("%d\t- %s\n", errnolist[i].nr, errnolist[i].name); | ||
204 | } | ||
205 | printf("\n"); | ||
206 | } | ||
diff --git a/src/lib/syscall.c b/src/lib/syscall.c new file mode 100644 index 000000000..1cf7f2d52 --- /dev/null +++ b/src/lib/syscall.c | |||
@@ -0,0 +1,1694 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2014-2020 Firejail Authors | ||
3 | * | ||
4 | * This file is part of firejail project | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License along | ||
17 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
19 | */ | ||
20 | #define _GNU_SOURCE | ||
21 | #include "../include/syscall.h" | ||
22 | #include <assert.h> | ||
23 | #include <stdbool.h> | ||
24 | #include <stdio.h> | ||
25 | #include <string.h> | ||
26 | #include <sys/syscall.h> | ||
27 | #include "../include/common.h" | ||
28 | |||
29 | typedef struct { | ||
30 | const char * const name; | ||
31 | int nr; | ||
32 | } SyscallEntry; | ||
33 | |||
34 | typedef struct { | ||
35 | const char * const name; | ||
36 | const char * const list; | ||
37 | } SyscallGroupList; | ||
38 | |||
39 | typedef struct { | ||
40 | const char *slist; | ||
41 | char *prelist, *postlist; | ||
42 | bool found; | ||
43 | int syscall; | ||
44 | } SyscallCheckList; | ||
45 | |||
46 | // Native syscalls (64 bit versions for 64 bit arch etc) | ||
47 | static const SyscallEntry syslist[] = { | ||
48 | #if defined(__x86_64__) | ||
49 | // code generated using | ||
50 | // awk '/__NR_/ { print "{ \"" gensub("__NR_", "", "g", $2) "\", " $3 " },"; }' < /usr/include/x86_64-linux-gnu/asm/unistd_64.h | ||
51 | #include "../include/syscall_x86_64.h" | ||
52 | #elif defined(__i386__) | ||
53 | // awk '/__NR_/ { print "{ \"" gensub("__NR_", "", "g", $2) "\", " $3 " },"; }' < /usr/include/x86_64-linux-gnu/asm/unistd_32.h | ||
54 | #include "../include/syscall_i386.h" | ||
55 | #else | ||
56 | #warning "Please submit a syscall table for your architecture" | ||
57 | #endif | ||
58 | }; | ||
59 | |||
60 | // 32 bit syscalls for 64 bit arch | ||
61 | static const SyscallEntry syslist32[] = { | ||
62 | #if defined(__x86_64__) | ||
63 | #include "../include/syscall_i386.h" | ||
64 | // TODO for other 64 bit archs | ||
65 | #elif defined(__i386__) || defined(__arm__) || defined(__powerpc__) | ||
66 | // no secondary arch for 32 bit archs | ||
67 | #endif | ||
68 | }; | ||
69 | |||
70 | static const SyscallGroupList sysgroups[] = { | ||
71 | { .name = "@aio", .list = | ||
72 | #ifdef SYS_io_cancel | ||
73 | "io_cancel," | ||
74 | #endif | ||
75 | #ifdef SYS_io_destroy | ||
76 | "io_destroy," | ||
77 | #endif | ||
78 | #ifdef SYS_io_getevents | ||
79 | "io_getevents," | ||
80 | #endif | ||
81 | #ifdef SYS_io_pgetevents | ||
82 | "io_pgetevents," | ||
83 | #endif | ||
84 | #ifdef SYS_io_setup | ||
85 | "io_setup," | ||
86 | #endif | ||
87 | #ifdef SYS_io_submit | ||
88 | "io_submit" | ||
89 | #endif | ||
90 | }, | ||
91 | { .name = "@basic-io", .list = | ||
92 | #ifdef SYS__llseek | ||
93 | "_llseek," | ||
94 | #endif | ||
95 | #ifdef SYS_close | ||
96 | "close," | ||
97 | #endif | ||
98 | #ifdef SYS_dup | ||
99 | "dup," | ||
100 | #endif | ||
101 | #ifdef SYS_dup2 | ||
102 | "dup2," | ||
103 | #endif | ||
104 | #ifdef SYS_dup3 | ||
105 | "dup3," | ||
106 | #endif | ||
107 | #ifdef SYS_lseek | ||
108 | "lseek," | ||
109 | #endif | ||
110 | #ifdef SYS_pread64 | ||
111 | "pread64," | ||
112 | #endif | ||
113 | #ifdef SYS_preadv | ||
114 | "preadv," | ||
115 | #endif | ||
116 | #ifdef SYS_preadv2 | ||
117 | "preadv2," | ||
118 | #endif | ||
119 | #ifdef SYS_pwrite64 | ||
120 | "pwrite64," | ||
121 | #endif | ||
122 | #ifdef SYS_pwritev | ||
123 | "pwritev," | ||
124 | #endif | ||
125 | #ifdef SYS_pwritev2 | ||
126 | "pwritev2," | ||
127 | #endif | ||
128 | #ifdef SYS_read | ||
129 | "read," | ||
130 | #endif | ||
131 | #ifdef SYS_readv | ||
132 | "readv," | ||
133 | #endif | ||
134 | #ifdef SYS_write | ||
135 | "write," | ||
136 | #endif | ||
137 | #ifdef SYS_writev | ||
138 | "writev" | ||
139 | #endif | ||
140 | }, | ||
141 | { .name = "@chown", .list = | ||
142 | #ifdef SYS_chown | ||
143 | "chown," | ||
144 | #endif | ||
145 | #ifdef SYS_chown32 | ||
146 | "chown32," | ||
147 | #endif | ||
148 | #ifdef SYS_fchown | ||
149 | "fchown," | ||
150 | #endif | ||
151 | #ifdef SYS_fchown32 | ||
152 | "fchown32," | ||
153 | #endif | ||
154 | #ifdef SYS_fchownat | ||
155 | "fchownat," | ||
156 | #endif | ||
157 | #ifdef SYS_lchown | ||
158 | "lchown," | ||
159 | #endif | ||
160 | #ifdef SYS_lchown32 | ||
161 | "lchown32" | ||
162 | #endif | ||
163 | }, | ||
164 | { .name = "@clock", .list = | ||
165 | #ifdef SYS_adjtimex | ||
166 | "adjtimex," | ||
167 | #endif | ||
168 | #ifdef SYS_clock_adjtime | ||
169 | "clock_adjtime," | ||
170 | #endif | ||
171 | #ifdef SYS_clock_settime | ||
172 | "clock_settime," | ||
173 | #endif | ||
174 | #ifdef SYS_settimeofday | ||
175 | "settimeofday," | ||
176 | #endif | ||
177 | #ifdef SYS_stime | ||
178 | "stime" | ||
179 | #endif | ||
180 | }, | ||
181 | { .name = "@cpu-emulation", .list = | ||
182 | #ifdef SYS_modify_ldt | ||
183 | "modify_ldt," | ||
184 | #endif | ||
185 | #ifdef SYS_subpage_prot | ||
186 | "subpage_prot," | ||
187 | #endif | ||
188 | #ifdef SYS_switch_endian | ||
189 | "switch_endian," | ||
190 | #endif | ||
191 | #ifdef SYS_vm86 | ||
192 | "vm86," | ||
193 | #endif | ||
194 | #ifdef SYS_vm86old | ||
195 | "vm86old" | ||
196 | #endif | ||
197 | #if !defined(SYS_modify_ldt) && !defined(SYS_subpage_prot) && !defined(SYS_switch_endian) && !defined(SYS_vm86) && !defined(SYS_vm86old) | ||
198 | "__dummy_syscall__" // workaround for arm64, s390x and sparc64 which don't have any of above defined and empty syscall lists are not allowed | ||
199 | #endif | ||
200 | }, | ||
201 | { .name = "@debug", .list = | ||
202 | #ifdef SYS_lookup_dcookie | ||
203 | "lookup_dcookie," | ||
204 | #endif | ||
205 | #ifdef SYS_perf_event_open | ||
206 | "perf_event_open," | ||
207 | #endif | ||
208 | #ifdef SYS_process_vm_writev | ||
209 | "process_vm_writev," | ||
210 | #endif | ||
211 | #ifdef SYS_rtas | ||
212 | "rtas," | ||
213 | #endif | ||
214 | #ifdef SYS_s390_runtime_instr | ||
215 | "s390_runtime_instr," | ||
216 | #endif | ||
217 | #ifdef SYS_sys_debug_setcontext | ||
218 | "sys_debug_setcontext," | ||
219 | #endif | ||
220 | }, | ||
221 | { .name = "@default", .list = | ||
222 | "@clock," | ||
223 | "@cpu-emulation," | ||
224 | "@debug," | ||
225 | "@module," | ||
226 | "@obsolete," | ||
227 | "@raw-io," | ||
228 | "@reboot," | ||
229 | "@swap," | ||
230 | #ifdef SYS_open_by_handle_at | ||
231 | "open_by_handle_at," | ||
232 | #endif | ||
233 | #ifdef SYS_name_to_handle_at | ||
234 | "name_to_handle_at," | ||
235 | #endif | ||
236 | #ifdef SYS_ioprio_set | ||
237 | "ioprio_set," | ||
238 | #endif | ||
239 | #ifdef SYS_ni_syscall | ||
240 | "ni_syscall," | ||
241 | #endif | ||
242 | #ifdef SYS_syslog | ||
243 | "syslog," | ||
244 | #endif | ||
245 | #ifdef SYS_fanotify_init | ||
246 | "fanotify_init," | ||
247 | #endif | ||
248 | #ifdef SYS_kcmp | ||
249 | "kcmp," | ||
250 | #endif | ||
251 | #ifdef SYS_add_key | ||
252 | "add_key," | ||
253 | #endif | ||
254 | #ifdef SYS_request_key | ||
255 | "request_key," | ||
256 | #endif | ||
257 | #ifdef SYS_mbind | ||
258 | "mbind," | ||
259 | #endif | ||
260 | #ifdef SYS_migrate_pages | ||
261 | "migrate_pages," | ||
262 | #endif | ||
263 | #ifdef SYS_move_pages | ||
264 | "move_pages," | ||
265 | #endif | ||
266 | #ifdef SYS_keyctl | ||
267 | "keyctl," | ||
268 | #endif | ||
269 | #ifdef SYS_io_setup | ||
270 | "io_setup," | ||
271 | #endif | ||
272 | #ifdef SYS_io_destroy | ||
273 | "io_destroy," | ||
274 | #endif | ||
275 | #ifdef SYS_io_getevents | ||
276 | "io_getevents," | ||
277 | #endif | ||
278 | #ifdef SYS_io_submit | ||
279 | "io_submit," | ||
280 | #endif | ||
281 | #ifdef SYS_io_cancel | ||
282 | "io_cancel," | ||
283 | #endif | ||
284 | #ifdef SYS_remap_file_pages | ||
285 | "remap_file_pages," | ||
286 | #endif | ||
287 | #ifdef SYS_set_mempolicy | ||
288 | "set_mempolicy" | ||
289 | #endif | ||
290 | #ifdef SYS_vmsplice | ||
291 | "vmsplice," | ||
292 | #endif | ||
293 | #ifdef SYS_umount | ||
294 | "umount," | ||
295 | #endif | ||
296 | #ifdef SYS_userfaultfd | ||
297 | "userfaultfd," | ||
298 | #endif | ||
299 | #ifdef SYS_acct | ||
300 | "acct," | ||
301 | #endif | ||
302 | #ifdef SYS_bpf | ||
303 | "bpf," | ||
304 | #endif | ||
305 | #ifdef SYS_chroot | ||
306 | "chroot," | ||
307 | #endif | ||
308 | #ifdef SYS_mount | ||
309 | "mount," | ||
310 | #endif | ||
311 | #ifdef SYS_nfsservctl | ||
312 | "nfsservctl," | ||
313 | #endif | ||
314 | #ifdef SYS_pivot_root | ||
315 | "pivot_root," | ||
316 | #endif | ||
317 | #ifdef SYS_setdomainname | ||
318 | "setdomainname," | ||
319 | #endif | ||
320 | #ifdef SYS_sethostname | ||
321 | "sethostname," | ||
322 | #endif | ||
323 | #ifdef SYS_umount2 | ||
324 | "umount2," | ||
325 | #endif | ||
326 | #ifdef SYS_vhangup | ||
327 | "vhangup" | ||
328 | #endif | ||
329 | //#ifdef SYS_mincore // 0.9.57 - problem fixed in Linux kernel 5.0; on 4.x it will break kodi, mpv, totem | ||
330 | // "mincore" | ||
331 | //#endif | ||
332 | }, | ||
333 | { .name = "@default-nodebuggers", .list = | ||
334 | "@default," | ||
335 | #ifdef SYS_ptrace | ||
336 | "ptrace," | ||
337 | #endif | ||
338 | #ifdef SYS_personality | ||
339 | "personality," | ||
340 | #endif | ||
341 | #ifdef SYS_process_vm_readv | ||
342 | "process_vm_readv" | ||
343 | #endif | ||
344 | }, | ||
345 | { .name = "@default-keep", .list = | ||
346 | "execve," | ||
347 | "prctl" | ||
348 | }, | ||
349 | { .name = "@file-system", .list = | ||
350 | #ifdef SYS_access | ||
351 | "access," | ||
352 | #endif | ||
353 | #ifdef SYS_chdir | ||
354 | "chdir," | ||
355 | #endif | ||
356 | #ifdef SYS_chmod | ||
357 | "chmod," | ||
358 | #endif | ||
359 | #ifdef SYS_close | ||
360 | "close," | ||
361 | #endif | ||
362 | #ifdef SYS_creat | ||
363 | "creat," | ||
364 | #endif | ||
365 | #ifdef SYS_faccessat | ||
366 | "faccessat," | ||
367 | #endif | ||
368 | #ifdef SYS_fallocate | ||
369 | "fallocate," | ||
370 | #endif | ||
371 | #ifdef SYS_fchdir | ||
372 | "fchdir," | ||
373 | #endif | ||
374 | #ifdef SYS_fchmod | ||
375 | "fchmod," | ||
376 | #endif | ||
377 | #ifdef SYS_fchmodat | ||
378 | "fchmodat," | ||
379 | #endif | ||
380 | #ifdef SYS_fcntl | ||
381 | "fcntl," | ||
382 | #endif | ||
383 | #ifdef SYS_fcntl64 | ||
384 | "fcntl64," | ||
385 | #endif | ||
386 | #ifdef SYS_fgetxattr | ||
387 | "fgetxattr," | ||
388 | #endif | ||
389 | #ifdef SYS_flistxattr | ||
390 | "flistxattr," | ||
391 | #endif | ||
392 | #ifdef SYS_fremovexattr | ||
393 | "fremovexattr," | ||
394 | #endif | ||
395 | #ifdef SYS_fsetxattr | ||
396 | "fsetxattr," | ||
397 | #endif | ||
398 | #ifdef SYS_fstat | ||
399 | "fstat," | ||
400 | #endif | ||
401 | #ifdef SYS_fstat64 | ||
402 | "fstat64," | ||
403 | #endif | ||
404 | #ifdef SYS_fstatat64 | ||
405 | "fstatat64," | ||
406 | #endif | ||
407 | #ifdef SYS_fstatfs | ||
408 | "fstatfs," | ||
409 | #endif | ||
410 | #ifdef SYS_fstatfs64 | ||
411 | "fstatfs64," | ||
412 | #endif | ||
413 | #ifdef SYS_ftruncate | ||
414 | "ftruncate," | ||
415 | #endif | ||
416 | #ifdef SYS_ftruncate64 | ||
417 | "ftruncate64," | ||
418 | #endif | ||
419 | #ifdef SYS_futimesat | ||
420 | "futimesat," | ||
421 | #endif | ||
422 | #ifdef SYS_getcwd | ||
423 | "getcwd," | ||
424 | #endif | ||
425 | #ifdef SYS_getdents | ||
426 | "getdents," | ||
427 | #endif | ||
428 | #ifdef SYS_getdents64 | ||
429 | "getdents64," | ||
430 | #endif | ||
431 | #ifdef SYS_getxattr | ||
432 | "getxattr," | ||
433 | #endif | ||
434 | #ifdef SYS_inotify_add_watch | ||
435 | "inotify_add_watch," | ||
436 | #endif | ||
437 | #ifdef SYS_inotify_init | ||
438 | "inotify_init," | ||
439 | #endif | ||
440 | #ifdef SYS_inotify_init1 | ||
441 | "inotify_init1," | ||
442 | #endif | ||
443 | #ifdef SYS_inotify_rm_watch | ||
444 | "inotify_rm_watch," | ||
445 | #endif | ||
446 | #ifdef SYS_lgetxattr | ||
447 | "lgetxattr," | ||
448 | #endif | ||
449 | #ifdef SYS_link | ||
450 | "link," | ||
451 | #endif | ||
452 | #ifdef SYS_linkat | ||
453 | "linkat," | ||
454 | #endif | ||
455 | #ifdef SYS_listxattr | ||
456 | "listxattr," | ||
457 | #endif | ||
458 | #ifdef SYS_llistxattr | ||
459 | "llistxattr," | ||
460 | #endif | ||
461 | #ifdef SYS_lremovexattr | ||
462 | "lremovexattr," | ||
463 | #endif | ||
464 | #ifdef SYS_lsetxattr | ||
465 | "lsetxattr," | ||
466 | #endif | ||
467 | #ifdef SYS_lstat | ||
468 | "lstat," | ||
469 | #endif | ||
470 | #ifdef SYS_lstat64 | ||
471 | "lstat64," | ||
472 | #endif | ||
473 | #ifdef SYS_mkdir | ||
474 | "mkdir," | ||
475 | #endif | ||
476 | #ifdef SYS_mkdirat | ||
477 | "mkdirat," | ||
478 | #endif | ||
479 | #ifdef SYS_mknod | ||
480 | "mknod," | ||
481 | #endif | ||
482 | #ifdef SYS_mknodat | ||
483 | "mknodat," | ||
484 | #endif | ||
485 | #ifdef SYS_mmap | ||
486 | "mmap," | ||
487 | #endif | ||
488 | #ifdef SYS_mmap2 | ||
489 | "mmap2," | ||
490 | #endif | ||
491 | #ifdef SYS_munmap | ||
492 | "munmap," | ||
493 | #endif | ||
494 | #ifdef SYS_newfstatat | ||
495 | "newfstatat," | ||
496 | #endif | ||
497 | #ifdef SYS_oldfstat | ||
498 | "oldfstat," | ||
499 | #endif | ||
500 | #ifdef SYS_oldlstat | ||
501 | "oldlstat," | ||
502 | #endif | ||
503 | #ifdef SYS_oldstat | ||
504 | "oldstat," | ||
505 | #endif | ||
506 | #ifdef SYS_open | ||
507 | "open," | ||
508 | #endif | ||
509 | #ifdef SYS_openat | ||
510 | "openat," | ||
511 | #endif | ||
512 | #ifdef SYS_readlink | ||
513 | "readlink," | ||
514 | #endif | ||
515 | #ifdef SYS_readlinkat | ||
516 | "readlinkat," | ||
517 | #endif | ||
518 | #ifdef SYS_removexattr | ||
519 | "removexattr," | ||
520 | #endif | ||
521 | #ifdef SYS_rename | ||
522 | "rename," | ||
523 | #endif | ||
524 | #ifdef SYS_renameat | ||
525 | "renameat," | ||
526 | #endif | ||
527 | #ifdef SYS_renameat2 | ||
528 | "renameat2," | ||
529 | #endif | ||
530 | #ifdef SYS_rmdir | ||
531 | "rmdir," | ||
532 | #endif | ||
533 | #ifdef SYS_setxattr | ||
534 | "setxattr," | ||
535 | #endif | ||
536 | #ifdef SYS_stat | ||
537 | "stat," | ||
538 | #endif | ||
539 | #ifdef SYS_stat64 | ||
540 | "stat64," | ||
541 | #endif | ||
542 | #ifdef SYS_statfs | ||
543 | "statfs," | ||
544 | #endif | ||
545 | #ifdef SYS_statfs64 | ||
546 | "statfs64," | ||
547 | #endif | ||
548 | #ifdef SYS_statx | ||
549 | "statx," | ||
550 | #endif | ||
551 | #ifdef SYS_symlink | ||
552 | "symlink," | ||
553 | #endif | ||
554 | #ifdef SYS_symlinkat | ||
555 | "symlinkat," | ||
556 | #endif | ||
557 | #ifdef SYS_truncate | ||
558 | "truncate," | ||
559 | #endif | ||
560 | #ifdef SYS_truncate64 | ||
561 | "truncate64," | ||
562 | #endif | ||
563 | #ifdef SYS_unlink | ||
564 | "unlink," | ||
565 | #endif | ||
566 | #ifdef SYS_unlinkat | ||
567 | "unlinkat," | ||
568 | #endif | ||
569 | #ifdef SYS_utime | ||
570 | "utime," | ||
571 | #endif | ||
572 | #ifdef SYS_utimensat | ||
573 | "utimensat," | ||
574 | #endif | ||
575 | #ifdef SYS_utimes | ||
576 | "utimes" | ||
577 | #endif | ||
578 | }, | ||
579 | { .name = "@io-event", .list = | ||
580 | #ifdef SYS__newselect | ||
581 | "_newselect," | ||
582 | #endif | ||
583 | #ifdef SYS_epoll_create | ||
584 | "epoll_create," | ||
585 | #endif | ||
586 | #ifdef SYS_epoll_create1 | ||
587 | "epoll_create1," | ||
588 | #endif | ||
589 | #ifdef SYS_epoll_ctl | ||
590 | "epoll_ctl," | ||
591 | #endif | ||
592 | #ifdef SYS_epoll_ctl_old | ||
593 | "epoll_ctl_old," | ||
594 | #endif | ||
595 | #ifdef SYS_epoll_pwait | ||
596 | "epoll_pwait," | ||
597 | #endif | ||
598 | #ifdef SYS_epoll_wait | ||
599 | "epoll_wait," | ||
600 | #endif | ||
601 | #ifdef SYS_epoll_wait_old | ||
602 | "epoll_wait_old," | ||
603 | #endif | ||
604 | #ifdef SYS_eventfd | ||
605 | "eventfd," | ||
606 | #endif | ||
607 | #ifdef SYS_eventfd2 | ||
608 | "eventfd2," | ||
609 | #endif | ||
610 | #ifdef SYS_poll | ||
611 | "poll," | ||
612 | #endif | ||
613 | #ifdef SYS_ppoll | ||
614 | "ppoll," | ||
615 | #endif | ||
616 | #ifdef SYS_pselect6 | ||
617 | "pselect6," | ||
618 | #endif | ||
619 | #ifdef SYS_select | ||
620 | "select" | ||
621 | #endif | ||
622 | }, | ||
623 | { .name = "@ipc", .list = | ||
624 | #ifdef SYS_ipc | ||
625 | "ipc," | ||
626 | #endif | ||
627 | #ifdef SYS_memfd_create | ||
628 | "memfd_create," | ||
629 | #endif | ||
630 | #ifdef SYS_mq_getsetattr | ||
631 | "mq_getsetattr," | ||
632 | #endif | ||
633 | #ifdef SYS_mq_notify | ||
634 | "mq_notify," | ||
635 | #endif | ||
636 | #ifdef SYS_mq_open | ||
637 | "mq_open," | ||
638 | #endif | ||
639 | #ifdef SYS_mq_timedreceive | ||
640 | "mq_timedreceive," | ||
641 | #endif | ||
642 | #ifdef SYS_mq_timedsend | ||
643 | "mq_timedsend," | ||
644 | #endif | ||
645 | #ifdef SYS_mq_unlink | ||
646 | "mq_unlink," | ||
647 | #endif | ||
648 | #ifdef SYS_msgctl | ||
649 | "msgctl," | ||
650 | #endif | ||
651 | #ifdef SYS_msgget | ||
652 | "msgget," | ||
653 | #endif | ||
654 | #ifdef SYS_msgrcv | ||
655 | "msgrcv," | ||
656 | #endif | ||
657 | #ifdef SYS_msgsnd | ||
658 | "msgsnd," | ||
659 | #endif | ||
660 | #ifdef SYS_pipe | ||
661 | "pipe," | ||
662 | #endif | ||
663 | #ifdef SYS_pipe2 | ||
664 | "pipe2," | ||
665 | #endif | ||
666 | #ifdef SYS_process_vm_readv | ||
667 | "process_vm_readv," | ||
668 | #endif | ||
669 | #ifdef SYS_process_vm_writev | ||
670 | "process_vm_writev," | ||
671 | #endif | ||
672 | #ifdef SYS_semctl | ||
673 | "semctl," | ||
674 | #endif | ||
675 | #ifdef SYS_semget | ||
676 | "semget," | ||
677 | #endif | ||
678 | #ifdef SYS_semop | ||
679 | "semop," | ||
680 | #endif | ||
681 | #ifdef SYS_semtimedop | ||
682 | "semtimedop," | ||
683 | #endif | ||
684 | #ifdef SYS_shmat | ||
685 | "shmat," | ||
686 | #endif | ||
687 | #ifdef SYS_shmctl | ||
688 | "shmctl," | ||
689 | #endif | ||
690 | #ifdef SYS_shmdt | ||
691 | "shmdt," | ||
692 | #endif | ||
693 | #ifdef SYS_shmget | ||
694 | "shmget" | ||
695 | #endif | ||
696 | }, | ||
697 | { .name = "@keyring", .list = | ||
698 | #ifdef SYS_add_key | ||
699 | "add_key," | ||
700 | #endif | ||
701 | #ifdef SYS_keyctl | ||
702 | "keyctl," | ||
703 | #endif | ||
704 | #ifdef SYS_request_key | ||
705 | "request_key" | ||
706 | #endif | ||
707 | }, | ||
708 | { .name = "@memlock", .list = | ||
709 | #ifdef SYS_mlock | ||
710 | "mlock," | ||
711 | #endif | ||
712 | #ifdef SYS_mlock2 | ||
713 | "mlock2," | ||
714 | #endif | ||
715 | #ifdef SYS_mlockall | ||
716 | "mlockall," | ||
717 | #endif | ||
718 | #ifdef SYS_munlock | ||
719 | "munlock," | ||
720 | #endif | ||
721 | #ifdef SYS_munlockall | ||
722 | "munlockall" | ||
723 | #endif | ||
724 | }, | ||
725 | { .name = "@module", .list = | ||
726 | #ifdef SYS_delete_module | ||
727 | "delete_module," | ||
728 | #endif | ||
729 | #ifdef SYS_finit_module | ||
730 | "finit_module," | ||
731 | #endif | ||
732 | #ifdef SYS_init_module | ||
733 | "init_module" | ||
734 | #endif | ||
735 | }, | ||
736 | { .name = "@mount", .list = | ||
737 | #ifdef SYS_chroot | ||
738 | "chroot," | ||
739 | #endif | ||
740 | #ifdef SYS_mount | ||
741 | "mount," | ||
742 | #endif | ||
743 | #ifdef SYS_pivot_root | ||
744 | "pivot_root," | ||
745 | #endif | ||
746 | #ifdef SYS_umount | ||
747 | "umount," | ||
748 | #endif | ||
749 | #ifdef SYS_umount2 | ||
750 | "umount2" | ||
751 | #endif | ||
752 | }, | ||
753 | { .name = "@network-io", .list = | ||
754 | #ifdef SYS_accept | ||
755 | "accept," | ||
756 | #endif | ||
757 | #ifdef SYS_accept4 | ||
758 | "accept4," | ||
759 | #endif | ||
760 | #ifdef SYS_bind | ||
761 | "bind," | ||
762 | #endif | ||
763 | #ifdef SYS_connect | ||
764 | "connect," | ||
765 | #endif | ||
766 | #ifdef SYS_getpeername | ||
767 | "getpeername," | ||
768 | #endif | ||
769 | #ifdef SYS_getsockname | ||
770 | "getsockname," | ||
771 | #endif | ||
772 | #ifdef SYS_getsockopt | ||
773 | "getsockopt," | ||
774 | #endif | ||
775 | #ifdef SYS_listen | ||
776 | "listen," | ||
777 | #endif | ||
778 | #ifdef SYS_recv | ||
779 | "recv," | ||
780 | #endif | ||
781 | #ifdef SYS_recvfrom | ||
782 | "recvfrom," | ||
783 | #endif | ||
784 | #ifdef SYS_recvmmsg | ||
785 | "recvmmsg," | ||
786 | #endif | ||
787 | #ifdef SYS_recvmsg | ||
788 | "recvmsg," | ||
789 | #endif | ||
790 | #ifdef SYS_send | ||
791 | "send," | ||
792 | #endif | ||
793 | #ifdef SYS_sendmmsg | ||
794 | "sendmmsg," | ||
795 | #endif | ||
796 | #ifdef SYS_sendmsg | ||
797 | "sendmsg," | ||
798 | #endif | ||
799 | #ifdef SYS_sendto | ||
800 | "sendto," | ||
801 | #endif | ||
802 | #ifdef SYS_setsockopt | ||
803 | "setsockopt," | ||
804 | #endif | ||
805 | #ifdef SYS_shutdown | ||
806 | "shutdown," | ||
807 | #endif | ||
808 | #ifdef SYS_socket | ||
809 | "socket," | ||
810 | #endif | ||
811 | #ifdef SYS_socketcall | ||
812 | "socketcall," | ||
813 | #endif | ||
814 | #ifdef SYS_socketpair | ||
815 | "socketpair" | ||
816 | #endif | ||
817 | }, | ||
818 | { .name = "@obsolete", .list = | ||
819 | #ifdef SYS__sysctl | ||
820 | "_sysctl," | ||
821 | #endif | ||
822 | #ifdef SYS_afs_syscall | ||
823 | "afs_syscall," | ||
824 | #endif | ||
825 | #ifdef SYS_bdflush | ||
826 | "bdflush," | ||
827 | #endif | ||
828 | #ifdef SYS_break | ||
829 | "break," | ||
830 | #endif | ||
831 | #ifdef SYS_create_module | ||
832 | "create_module," | ||
833 | #endif | ||
834 | #ifdef SYS_ftime | ||
835 | "ftime," | ||
836 | #endif | ||
837 | #ifdef SYS_get_kernel_syms | ||
838 | "get_kernel_syms," | ||
839 | #endif | ||
840 | #ifdef SYS_getpmsg | ||
841 | "getpmsg," | ||
842 | #endif | ||
843 | #ifdef SYS_gtty | ||
844 | "gtty," | ||
845 | #endif | ||
846 | #ifdef SYS_idle | ||
847 | "idle," | ||
848 | #endif | ||
849 | #ifdef SYS_lock | ||
850 | "lock," | ||
851 | #endif | ||
852 | #ifdef SYS_mpx | ||
853 | "mpx," | ||
854 | #endif | ||
855 | #ifdef SYS_prof | ||
856 | "prof," | ||
857 | #endif | ||
858 | #ifdef SYS_profil | ||
859 | "profil," | ||
860 | #endif | ||
861 | #ifdef SYS_putpmsg | ||
862 | "putpmsg," | ||
863 | #endif | ||
864 | #ifdef SYS_query_module | ||
865 | "query_module," | ||
866 | #endif | ||
867 | #ifdef SYS_security | ||
868 | "security," | ||
869 | #endif | ||
870 | #ifdef SYS_sgetmask | ||
871 | "sgetmask," | ||
872 | #endif | ||
873 | #ifdef SYS_ssetmask | ||
874 | "ssetmask," | ||
875 | #endif | ||
876 | #ifdef SYS_stty | ||
877 | "stty," | ||
878 | #endif | ||
879 | #ifdef SYS_sysfs | ||
880 | "sysfs," | ||
881 | #endif | ||
882 | #ifdef SYS_tuxcall | ||
883 | "tuxcall," | ||
884 | #endif | ||
885 | #ifdef SYS_ulimit | ||
886 | "ulimit," | ||
887 | #endif | ||
888 | #ifdef SYS_uselib | ||
889 | "uselib," | ||
890 | #endif | ||
891 | #ifdef SYS_ustat | ||
892 | "ustat," | ||
893 | #endif | ||
894 | #ifdef SYS_vserver | ||
895 | "vserver" | ||
896 | #endif | ||
897 | #if !defined(SYS__sysctl) && !defined(SYS_afs_syscall) && !defined(SYS_bdflush) && !defined(SYS_break) && !defined(SYS_create_module) && !defined(SYS_ftime) && !defined(SYS_get_kernel_syms) && !defined(SYS_getpmsg) && !defined(SYS_gtty) && !defined(SYS_lock) && !defined(SYS_mpx) && !defined(SYS_prof) && !defined(SYS_profil) && !defined(SYS_putpmsg) && !defined(SYS_query_module) && !defined(SYS_security) && !defined(SYS_sgetmask) && !defined(SYS_ssetmask) && !defined(SYS_stty) && !defined(SYS_sysfs) && !defined(SYS_tuxcall) && !defined(SYS_ulimit) && !defined(SYS_uselib) && !defined(SYS_ustat) && !defined(SYS_vserver) | ||
898 | "__dummy_syscall__" // workaround for arm64 which doesn't have any of above defined and empty syscall lists are not allowed | ||
899 | #endif | ||
900 | }, | ||
901 | { .name = "@privileged", .list = | ||
902 | "@chown," | ||
903 | "@clock," | ||
904 | "@module," | ||
905 | "@raw-io," | ||
906 | "@reboot," | ||
907 | "@swap," | ||
908 | #ifdef SYS__sysctl | ||
909 | "_sysctl," | ||
910 | #endif | ||
911 | #ifdef SYS_acct | ||
912 | "acct," | ||
913 | #endif | ||
914 | #ifdef SYS_bpf | ||
915 | "bpf," | ||
916 | #endif | ||
917 | #ifdef SYS_capset | ||
918 | "capset," | ||
919 | #endif | ||
920 | #ifdef SYS_chroot | ||
921 | "chroot," | ||
922 | #endif | ||
923 | #ifdef SYS_fanotify_init | ||
924 | "fanotify_init," | ||
925 | #endif | ||
926 | #ifdef SYS_mount | ||
927 | "mount," | ||
928 | #endif | ||
929 | #ifdef SYS_nfsservctl | ||
930 | "nfsservctl," | ||
931 | #endif | ||
932 | #ifdef SYS_open_by_handle_at | ||
933 | "open_by_handle_at," | ||
934 | #endif | ||
935 | #ifdef SYS_pivot_root | ||
936 | "pivot_root," | ||
937 | #endif | ||
938 | #ifdef SYS_quotactl | ||
939 | "quotactl," | ||
940 | #endif | ||
941 | #ifdef SYS_setdomainname | ||
942 | "setdomainname," | ||
943 | #endif | ||
944 | #ifdef SYS_setfsuid | ||
945 | "setfsuid," | ||
946 | #endif | ||
947 | #ifdef SYS_setfsuid32 | ||
948 | "setfsuid32," | ||
949 | #endif | ||
950 | #ifdef SYS_setgroups | ||
951 | "setgroups," | ||
952 | #endif | ||
953 | #ifdef SYS_setgroups32 | ||
954 | "setgroups32," | ||
955 | #endif | ||
956 | #ifdef SYS_sethostname | ||
957 | "sethostname," | ||
958 | #endif | ||
959 | #ifdef SYS_setresuid | ||
960 | "setresuid," | ||
961 | #endif | ||
962 | #ifdef SYS_setresuid32 | ||
963 | "setresuid32," | ||
964 | #endif | ||
965 | #ifdef SYS_setreuid | ||
966 | "setreuid," | ||
967 | #endif | ||
968 | #ifdef SYS_setreuid32 | ||
969 | "setreuid32," | ||
970 | #endif | ||
971 | #ifdef SYS_setuid | ||
972 | "setuid," | ||
973 | #endif | ||
974 | #ifdef SYS_setuid32 | ||
975 | "setuid32," | ||
976 | #endif | ||
977 | #ifdef SYS_umount2 | ||
978 | "umount2," | ||
979 | #endif | ||
980 | #ifdef SYS_vhangup | ||
981 | "vhangup" | ||
982 | #endif | ||
983 | }, | ||
984 | { .name = "@process", .list = | ||
985 | #ifdef SYS_arch_prctl | ||
986 | "arch_prctl," | ||
987 | #endif | ||
988 | #ifdef SYS_capget | ||
989 | "capget," | ||
990 | #endif | ||
991 | #ifdef SYS_clone | ||
992 | "clone," | ||
993 | #endif | ||
994 | #ifdef SYS_execveat | ||
995 | "execveat," | ||
996 | #endif | ||
997 | #ifdef SYS_fork | ||
998 | "fork," | ||
999 | #endif | ||
1000 | #ifdef SYS_getrusage | ||
1001 | "getrusage," | ||
1002 | #endif | ||
1003 | #ifdef SYS_kill | ||
1004 | "kill," | ||
1005 | #endif | ||
1006 | #ifdef SYS_pidfd_send_signal | ||
1007 | "pidfd_send_signal," | ||
1008 | #endif | ||
1009 | #ifdef SYS_prctl | ||
1010 | "prctl," | ||
1011 | #endif | ||
1012 | #ifdef SYS_rt_sigqueueinfo | ||
1013 | "rt_sigqueueinfo," | ||
1014 | #endif | ||
1015 | #ifdef SYS_rt_tgsigqueueinfo | ||
1016 | "rt_tgsigqueueinfo," | ||
1017 | #endif | ||
1018 | #ifdef SYS_setns | ||
1019 | "setns," | ||
1020 | #endif | ||
1021 | #ifdef SYS_swapcontext | ||
1022 | "swapcontext," | ||
1023 | #endif | ||
1024 | #ifdef SYS_tgkill | ||
1025 | "tgkill," | ||
1026 | #endif | ||
1027 | #ifdef SYS_times | ||
1028 | "times," | ||
1029 | #endif | ||
1030 | #ifdef SYS_tkill | ||
1031 | "tkill," | ||
1032 | #endif | ||
1033 | #ifdef SYS_unshare | ||
1034 | "unshare," | ||
1035 | #endif | ||
1036 | #ifdef SYS_vfork | ||
1037 | "vfork," | ||
1038 | #endif | ||
1039 | #ifdef SYS_wait4 | ||
1040 | "wait4," | ||
1041 | #endif | ||
1042 | #ifdef SYS_waitid | ||
1043 | "waitid," | ||
1044 | #endif | ||
1045 | #ifdef SYS_waitpid | ||
1046 | "waitpid" | ||
1047 | #endif | ||
1048 | }, | ||
1049 | { .name = "@raw-io", .list = | ||
1050 | #ifdef SYS_ioperm | ||
1051 | "ioperm," | ||
1052 | #endif | ||
1053 | #ifdef SYS_iopl | ||
1054 | "iopl," | ||
1055 | #endif | ||
1056 | #ifdef SYS_pciconfig_iobase | ||
1057 | "pciconfig_iobase," | ||
1058 | #endif | ||
1059 | #ifdef SYS_pciconfig_read | ||
1060 | "pciconfig_read," | ||
1061 | #endif | ||
1062 | #ifdef SYS_pciconfig_write | ||
1063 | "pciconfig_write," | ||
1064 | #endif | ||
1065 | #ifdef SYS_s390_mmio_read | ||
1066 | "s390_mmio_read," | ||
1067 | #endif | ||
1068 | #ifdef SYS_s390_mmio_write | ||
1069 | "s390_mmio_write" | ||
1070 | #endif | ||
1071 | #if !defined(SYS_ioperm) && !defined(SYS_iopl) && !defined(SYS_pciconfig_iobase) && !defined(SYS_pciconfig_read) && !defined(SYS_pciconfig_write) && !defined(SYS_s390_mmio_read) && !defined(SYS_s390_mmio_write) | ||
1072 | "__dummy_syscall__" // workaround for s390x which doesn't have any of above defined and empty syscall lists are not allowed | ||
1073 | #endif | ||
1074 | }, | ||
1075 | { .name = "@reboot", .list = | ||
1076 | #ifdef SYS_kexec_load | ||
1077 | "kexec_load," | ||
1078 | #endif | ||
1079 | #ifdef SYS_kexec_file_load | ||
1080 | "kexec_file_load," | ||
1081 | #endif | ||
1082 | #ifdef SYS_reboot | ||
1083 | "reboot," | ||
1084 | #endif | ||
1085 | }, | ||
1086 | { .name = "@resources", .list = | ||
1087 | #ifdef SYS_ioprio_set | ||
1088 | "ioprio_set," | ||
1089 | #endif | ||
1090 | #ifdef SYS_mbind | ||
1091 | "mbind," | ||
1092 | #endif | ||
1093 | #ifdef SYS_migrate_pages | ||
1094 | "migrate_pages," | ||
1095 | #endif | ||
1096 | #ifdef SYS_move_pages | ||
1097 | "move_pages," | ||
1098 | #endif | ||
1099 | #ifdef SYS_nice | ||
1100 | "nice," | ||
1101 | #endif | ||
1102 | #ifdef SYS_sched_setaffinity | ||
1103 | "sched_setaffinity," | ||
1104 | #endif | ||
1105 | #ifdef SYS_sched_setattr | ||
1106 | "sched_setattr," | ||
1107 | #endif | ||
1108 | #ifdef SYS_sched_setparam | ||
1109 | "sched_setparam," | ||
1110 | #endif | ||
1111 | #ifdef SYS_sched_setscheduler | ||
1112 | "sched_setscheduler," | ||
1113 | #endif | ||
1114 | #ifdef SYS_set_mempolicy | ||
1115 | "set_mempolicy" | ||
1116 | #endif | ||
1117 | }, | ||
1118 | { .name = "@setuid", .list = | ||
1119 | #ifdef SYS_setgid | ||
1120 | "setgid," | ||
1121 | #endif | ||
1122 | #ifdef SYS_setgid32 | ||
1123 | "setgid32," | ||
1124 | #endif | ||
1125 | #ifdef SYS_setgroups | ||
1126 | "setgroups," | ||
1127 | #endif | ||
1128 | #ifdef SYS_setgroups32 | ||
1129 | "setgroups32," | ||
1130 | #endif | ||
1131 | #ifdef SYS_setregid | ||
1132 | "setregid," | ||
1133 | #endif | ||
1134 | #ifdef SYS_setregid32 | ||
1135 | "setregid32," | ||
1136 | #endif | ||
1137 | #ifdef SYS_setresgid | ||
1138 | "setresgid," | ||
1139 | #endif | ||
1140 | #ifdef SYS_setresgid32 | ||
1141 | "setresgid32," | ||
1142 | #endif | ||
1143 | #ifdef SYS_setresuid | ||
1144 | "setresuid," | ||
1145 | #endif | ||
1146 | #ifdef SYS_setresuid32 | ||
1147 | "setresuid32," | ||
1148 | #endif | ||
1149 | #ifdef SYS_setreuid | ||
1150 | "setreuid," | ||
1151 | #endif | ||
1152 | #ifdef SYS_setreuid32 | ||
1153 | "setreuid32," | ||
1154 | #endif | ||
1155 | #ifdef SYS_setuid | ||
1156 | "setuid," | ||
1157 | #endif | ||
1158 | #ifdef SYS_setuid32 | ||
1159 | "setuid32" | ||
1160 | #endif | ||
1161 | }, | ||
1162 | { .name = "@signal", .list = | ||
1163 | #ifdef SYS_rt_sigaction | ||
1164 | "rt_sigaction," | ||
1165 | #endif | ||
1166 | #ifdef SYS_rt_sigpending | ||
1167 | "rt_sigpending," | ||
1168 | #endif | ||
1169 | #ifdef SYS_rt_sigprocmask | ||
1170 | "rt_sigprocmask," | ||
1171 | #endif | ||
1172 | #ifdef SYS_rt_sigsuspend | ||
1173 | "rt_sigsuspend," | ||
1174 | #endif | ||
1175 | #ifdef SYS_rt_sigtimedwait | ||
1176 | "rt_sigtimedwait," | ||
1177 | #endif | ||
1178 | #ifdef SYS_sigaction | ||
1179 | "sigaction," | ||
1180 | #endif | ||
1181 | #ifdef SYS_sigaltstack | ||
1182 | "sigaltstack," | ||
1183 | #endif | ||
1184 | #ifdef SYS_signal | ||
1185 | "signal," | ||
1186 | #endif | ||
1187 | #ifdef SYS_signalfd | ||
1188 | "signalfd," | ||
1189 | #endif | ||
1190 | #ifdef SYS_signalfd4 | ||
1191 | "signalfd4," | ||
1192 | #endif | ||
1193 | #ifdef SYS_sigpending | ||
1194 | "sigpending," | ||
1195 | #endif | ||
1196 | #ifdef SYS_sigprocmask | ||
1197 | "sigprocmask," | ||
1198 | #endif | ||
1199 | #ifdef SYS_sigsuspend | ||
1200 | "sigsuspend" | ||
1201 | #endif | ||
1202 | }, | ||
1203 | { .name = "@swap", .list = | ||
1204 | #ifdef SYS_swapon | ||
1205 | "swapon," | ||
1206 | #endif | ||
1207 | #ifdef SYS_swapoff | ||
1208 | "swapoff" | ||
1209 | #endif | ||
1210 | }, | ||
1211 | { .name = "@sync", .list = | ||
1212 | #ifdef SYS_fdatasync | ||
1213 | "fdatasync," | ||
1214 | #endif | ||
1215 | #ifdef SYS_fsync | ||
1216 | "fsync," | ||
1217 | #endif | ||
1218 | #ifdef SYS_msync | ||
1219 | "msync," | ||
1220 | #endif | ||
1221 | #ifdef SYS_sync | ||
1222 | "sync," | ||
1223 | #endif | ||
1224 | #ifdef SYS_sync_file_range | ||
1225 | "sync_file_range," | ||
1226 | #endif | ||
1227 | #ifdef SYS_sync_file_range2 | ||
1228 | "sync_file_range2," | ||
1229 | #endif | ||
1230 | #ifdef SYS_syncfs | ||
1231 | "syncfs" | ||
1232 | #endif | ||
1233 | }, | ||
1234 | { .name = "@system-service", .list = | ||
1235 | "@aio," | ||
1236 | "@basic-io," | ||
1237 | "@chown," | ||
1238 | "@default," | ||
1239 | "@file-system," | ||
1240 | "@io-event," | ||
1241 | "@ipc," | ||
1242 | "@keyring," | ||
1243 | "@memlock," | ||
1244 | "@network-io," | ||
1245 | "@process," | ||
1246 | "@resources," | ||
1247 | "@setuid," | ||
1248 | "@signal," | ||
1249 | "@sync," | ||
1250 | "@timer," | ||
1251 | #ifdef SYS_brk | ||
1252 | "brk," | ||
1253 | #endif | ||
1254 | #ifdef SYS_capget | ||
1255 | "capget," | ||
1256 | #endif | ||
1257 | #ifdef SYS_capset | ||
1258 | "capset," | ||
1259 | #endif | ||
1260 | #ifdef SYS_copy_file_range | ||
1261 | "copy_file_range," | ||
1262 | #endif | ||
1263 | #ifdef SYS_fadvise64 | ||
1264 | "fadvise64," | ||
1265 | #endif | ||
1266 | #ifdef SYS_fadvise64_64 | ||
1267 | "fadvise64_64," | ||
1268 | #endif | ||
1269 | #ifdef SYS_flock | ||
1270 | "flock," | ||
1271 | #endif | ||
1272 | #ifdef SYS_get_mempolicy | ||
1273 | "get_mempolicy," | ||
1274 | #endif | ||
1275 | #ifdef SYS_getcpu | ||
1276 | "getcpu," | ||
1277 | #endif | ||
1278 | #ifdef SYS_getpriority | ||
1279 | "getpriority," | ||
1280 | #endif | ||
1281 | #ifdef SYS_getrandom | ||
1282 | "getrandom," | ||
1283 | #endif | ||
1284 | #ifdef SYS_ioctl | ||
1285 | "ioctl," | ||
1286 | #endif | ||
1287 | #ifdef SYS_ioprio_get | ||
1288 | "ioprio_get," | ||
1289 | #endif | ||
1290 | #ifdef SYS_kcmp | ||
1291 | "kcmp," | ||
1292 | #endif | ||
1293 | #ifdef SYS_madvise | ||
1294 | "madvise," | ||
1295 | #endif | ||
1296 | #ifdef SYS_mprotect | ||
1297 | "mprotect," | ||
1298 | #endif | ||
1299 | #ifdef SYS_mremap | ||
1300 | "mremap," | ||
1301 | #endif | ||
1302 | #ifdef SYS_name_to_handle_at | ||
1303 | "name_to_handle_at," | ||
1304 | #endif | ||
1305 | #ifdef SYS_oldolduname | ||
1306 | "oldolduname," | ||
1307 | #endif | ||
1308 | #ifdef SYS_olduname | ||
1309 | "olduname," | ||
1310 | #endif | ||
1311 | #ifdef SYS_personality | ||
1312 | "personality," | ||
1313 | #endif | ||
1314 | #ifdef SYS_readahead | ||
1315 | "readahead," | ||
1316 | #endif | ||
1317 | #ifdef SYS_readdir | ||
1318 | "readdir," | ||
1319 | #endif | ||
1320 | #ifdef SYS_remap_file_pages | ||
1321 | "remap_file_pages," | ||
1322 | #endif | ||
1323 | #ifdef SYS_sched_get_priority_max | ||
1324 | "sched_get_priority_max," | ||
1325 | #endif | ||
1326 | #ifdef SYS_sched_get_priority_min | ||
1327 | "sched_get_priority_min," | ||
1328 | #endif | ||
1329 | #ifdef SYS_sched_getaffinity | ||
1330 | "sched_getaffinity," | ||
1331 | #endif | ||
1332 | #ifdef SYS_sched_getattr | ||
1333 | "sched_getattr," | ||
1334 | #endif | ||
1335 | #ifdef SYS_sched_getparam | ||
1336 | "sched_getparam," | ||
1337 | #endif | ||
1338 | #ifdef SYS_sched_getscheduler | ||
1339 | "sched_getscheduler," | ||
1340 | #endif | ||
1341 | #ifdef SYS_sched_rr_get_interval | ||
1342 | "sched_rr_get_interval," | ||
1343 | #endif | ||
1344 | #ifdef SYS_sched_yield | ||
1345 | "sched_yield," | ||
1346 | #endif | ||
1347 | #ifdef SYS_sendfile | ||
1348 | "sendfile," | ||
1349 | #endif | ||
1350 | #ifdef SYS_sendfile64 | ||
1351 | "sendfile64," | ||
1352 | #endif | ||
1353 | #ifdef SYS_setfsgid | ||
1354 | "setfsgid," | ||
1355 | #endif | ||
1356 | #ifdef SYS_setfsgid32 | ||
1357 | "setfsgid32," | ||
1358 | #endif | ||
1359 | #ifdef SYS_setfsuid | ||
1360 | "setfsuid," | ||
1361 | #endif | ||
1362 | #ifdef SYS_setfsuid32 | ||
1363 | "setfsuid32," | ||
1364 | #endif | ||
1365 | #ifdef SYS_setpgid | ||
1366 | "setpgid," | ||
1367 | #endif | ||
1368 | #ifdef SYS_setsid | ||
1369 | "setsid," | ||
1370 | #endif | ||
1371 | #ifdef SYS_splice | ||
1372 | "splice," | ||
1373 | #endif | ||
1374 | #ifdef SYS_sysinfo | ||
1375 | "sysinfo," | ||
1376 | #endif | ||
1377 | #ifdef SYS_tee | ||
1378 | "tee," | ||
1379 | #endif | ||
1380 | #ifdef SYS_umask | ||
1381 | "umask," | ||
1382 | #endif | ||
1383 | #ifdef SYS_uname | ||
1384 | "uname," | ||
1385 | #endif | ||
1386 | #ifdef SYS_userfaultfd | ||
1387 | "userfaultfd," | ||
1388 | #endif | ||
1389 | #ifdef SYS_vmsplice | ||
1390 | "vmsplice" | ||
1391 | #endif | ||
1392 | }, | ||
1393 | { .name = "@timer", .list = | ||
1394 | #ifdef SYS_alarm | ||
1395 | "alarm," | ||
1396 | #endif | ||
1397 | #ifdef SYS_getitimer | ||
1398 | "getitimer," | ||
1399 | #endif | ||
1400 | #ifdef SYS_setitimer | ||
1401 | "setitimer," | ||
1402 | #endif | ||
1403 | #ifdef SYS_timer_create | ||
1404 | "timer_create," | ||
1405 | #endif | ||
1406 | #ifdef SYS_timer_delete | ||
1407 | "timer_delete," | ||
1408 | #endif | ||
1409 | #ifdef SYS_timer_getoverrun | ||
1410 | "timer_getoverrun," | ||
1411 | #endif | ||
1412 | #ifdef SYS_timer_gettime | ||
1413 | "timer_gettime," | ||
1414 | #endif | ||
1415 | #ifdef SYS_timer_settime | ||
1416 | "timer_settime," | ||
1417 | #endif | ||
1418 | #ifdef SYS_timerfd_create | ||
1419 | "timerfd_create," | ||
1420 | #endif | ||
1421 | #ifdef SYS_timerfd_gettime | ||
1422 | "timerfd_gettime," | ||
1423 | #endif | ||
1424 | #ifdef SYS_timerfd_settime | ||
1425 | "timerfd_settime," | ||
1426 | #endif | ||
1427 | #ifdef SYS_times | ||
1428 | "times" | ||
1429 | #endif | ||
1430 | } | ||
1431 | }; | ||
1432 | |||
1433 | // return -1 if error, or syscall number | ||
1434 | static int syscall_find_name(const char *name) { | ||
1435 | int i; | ||
1436 | int elems = sizeof(syslist) / sizeof(syslist[0]); | ||
1437 | for (i = 0; i < elems; i++) { | ||
1438 | if (strcmp(name, syslist[i].name) == 0) | ||
1439 | return syslist[i].nr; | ||
1440 | } | ||
1441 | |||
1442 | return -1; | ||
1443 | } | ||
1444 | |||
1445 | static int syscall_find_name_32(const char *name) { | ||
1446 | int i; | ||
1447 | int elems = sizeof(syslist32) / sizeof(syslist32[0]); | ||
1448 | for (i = 0; i < elems; i++) { | ||
1449 | if (strcmp(name, syslist32[i].name) == 0) | ||
1450 | return syslist32[i].nr; | ||
1451 | } | ||
1452 | |||
1453 | return -1; | ||
1454 | } | ||
1455 | |||
1456 | const char *syscall_find_nr(int nr) { | ||
1457 | int i; | ||
1458 | int elems = sizeof(syslist) / sizeof(syslist[0]); | ||
1459 | for (i = 0; i < elems; i++) { | ||
1460 | if (nr == syslist[i].nr) | ||
1461 | return syslist[i].name; | ||
1462 | } | ||
1463 | |||
1464 | return "unknown"; | ||
1465 | } | ||
1466 | |||
1467 | const char *syscall_find_nr_32(int nr) { | ||
1468 | int i; | ||
1469 | int elems = sizeof(syslist32) / sizeof(syslist32[0]); | ||
1470 | for (i = 0; i < elems; i++) { | ||
1471 | if (nr == syslist32[i].nr) | ||
1472 | return syslist32[i].name; | ||
1473 | } | ||
1474 | |||
1475 | return "unknown"; | ||
1476 | } | ||
1477 | |||
1478 | void syscall_print(void) { | ||
1479 | int i; | ||
1480 | int elems = sizeof(syslist) / sizeof(syslist[0]); | ||
1481 | for (i = 0; i < elems; i++) { | ||
1482 | printf("%d\t- %s\n", syslist[i].nr, syslist[i].name); | ||
1483 | } | ||
1484 | printf("\n"); | ||
1485 | } | ||
1486 | |||
1487 | void syscall_print_32(void) { | ||
1488 | int i; | ||
1489 | int elems = sizeof(syslist32) / sizeof(syslist32[0]); | ||
1490 | for (i = 0; i < elems; i++) { | ||
1491 | printf("%d\t- %s\n", syslist32[i].nr, syslist32[i].name); | ||
1492 | } | ||
1493 | printf("\n"); | ||
1494 | } | ||
1495 | |||
1496 | static const char *syscall_find_group(const char *name) { | ||
1497 | int i; | ||
1498 | int elems = sizeof(sysgroups) / sizeof(sysgroups[0]); | ||
1499 | for (i = 0; i < elems; i++) { | ||
1500 | if (strcmp(name, sysgroups[i].name) == 0) | ||
1501 | return sysgroups[i].list; | ||
1502 | } | ||
1503 | |||
1504 | return NULL; | ||
1505 | } | ||
1506 | |||
1507 | // allowed input: | ||
1508 | // - syscall | ||
1509 | // - syscall(error) | ||
1510 | static void syscall_process_name(const char *name, int *syscall_nr, int *error_nr, bool native) { | ||
1511 | assert(name); | ||
1512 | if (strlen(name) == 0) | ||
1513 | goto error; | ||
1514 | *error_nr = -1; | ||
1515 | |||
1516 | // syntax check | ||
1517 | char *str = strdup(name); | ||
1518 | if (!str) | ||
1519 | errExit("strdup"); | ||
1520 | |||
1521 | char *syscall_name = str; | ||
1522 | char *error_name = strchr(str, ':'); | ||
1523 | if (error_name) { | ||
1524 | *error_name = '\0'; | ||
1525 | error_name++; | ||
1526 | } | ||
1527 | if (strlen(syscall_name) == 0) { | ||
1528 | free(str); | ||
1529 | goto error; | ||
1530 | } | ||
1531 | |||
1532 | if (*syscall_name == '$') | ||
1533 | *syscall_nr = strtol(syscall_name + 1, NULL, 0); | ||
1534 | else { | ||
1535 | if (native) | ||
1536 | *syscall_nr = syscall_find_name(syscall_name); | ||
1537 | else | ||
1538 | *syscall_nr = syscall_find_name_32(syscall_name); | ||
1539 | } | ||
1540 | if (error_name) { | ||
1541 | *error_nr = errno_find_name(error_name); | ||
1542 | if (*error_nr == -1) | ||
1543 | *syscall_nr = -1; | ||
1544 | } | ||
1545 | |||
1546 | free(str); | ||
1547 | return; | ||
1548 | |||
1549 | error: | ||
1550 | fprintf(stderr, "Error fseccomp: invalid syscall list entry %s\n", name); | ||
1551 | exit(1); | ||
1552 | } | ||
1553 | |||
1554 | // return 1 if error, 0 if OK | ||
1555 | int syscall_check_list(const char *slist, filter_fn *callback, int fd, int arg, void *ptrarg, bool native) { | ||
1556 | // don't allow empty lists | ||
1557 | if (slist == NULL || *slist == '\0') { | ||
1558 | fprintf(stderr, "Error fseccomp: empty syscall lists are not allowed\n"); | ||
1559 | exit(1); | ||
1560 | } | ||
1561 | |||
1562 | // work on a copy of the string | ||
1563 | char *str = strdup(slist); | ||
1564 | if (!str) | ||
1565 | errExit("strdup"); | ||
1566 | |||
1567 | char *saveptr; | ||
1568 | char *ptr = strtok_r(str, ",", &saveptr); | ||
1569 | if (ptr == NULL) { | ||
1570 | fprintf(stderr, "Error fseccomp: empty syscall lists are not allowed\n"); | ||
1571 | exit(1); | ||
1572 | } | ||
1573 | |||
1574 | while (ptr) { | ||
1575 | int syscall_nr; | ||
1576 | int error_nr; | ||
1577 | if (*ptr == '@') { | ||
1578 | const char *new_list = syscall_find_group(ptr); | ||
1579 | if (!new_list) { | ||
1580 | fprintf(stderr, "Error fseccomp: unknown syscall group %s\n", ptr); | ||
1581 | exit(1); | ||
1582 | } | ||
1583 | syscall_check_list(new_list, callback, fd, arg, ptrarg, native); | ||
1584 | } | ||
1585 | else { | ||
1586 | bool negate = false; | ||
1587 | if (*ptr == '!') { | ||
1588 | negate = true; | ||
1589 | ptr++; | ||
1590 | } | ||
1591 | syscall_process_name(ptr, &syscall_nr, &error_nr, native); | ||
1592 | if (syscall_nr == -1) {;} | ||
1593 | else if (callback != NULL) { | ||
1594 | if (negate) { | ||
1595 | syscall_nr = -syscall_nr; | ||
1596 | } | ||
1597 | if (error_nr != -1 && fd > 0) { | ||
1598 | filter_add_errno(fd, syscall_nr, error_nr, ptrarg, native); | ||
1599 | } | ||
1600 | else if (error_nr != -1 && fd == 0) { | ||
1601 | callback(fd, syscall_nr, error_nr, ptrarg, native); | ||
1602 | } | ||
1603 | else { | ||
1604 | callback(fd, syscall_nr, arg, ptrarg, native); | ||
1605 | } | ||
1606 | } | ||
1607 | } | ||
1608 | ptr = strtok_r(NULL, ",", &saveptr); | ||
1609 | } | ||
1610 | |||
1611 | free(str); | ||
1612 | return 0; | ||
1613 | } | ||
1614 | |||
1615 | static void find_syscall(int fd, int syscall, int arg, void *ptrarg, bool native) { | ||
1616 | (void)fd; | ||
1617 | (void) arg; | ||
1618 | (void)native; | ||
1619 | SyscallCheckList *ptr = ptrarg; | ||
1620 | if (abs(syscall) == ptr->syscall) | ||
1621 | ptr->found = true; | ||
1622 | } | ||
1623 | |||
1624 | // go through list2 and find matches for problem syscall | ||
1625 | static void syscall_in_list(int fd, int syscall, int arg, void *ptrarg, bool native) { | ||
1626 | (void) fd; | ||
1627 | (void)arg; | ||
1628 | SyscallCheckList *ptr = ptrarg; | ||
1629 | SyscallCheckList sl; | ||
1630 | const char *name; | ||
1631 | |||
1632 | sl.found = false; | ||
1633 | sl.syscall = syscall; | ||
1634 | syscall_check_list(ptr->slist, find_syscall, fd, 0, &sl, native); | ||
1635 | |||
1636 | if (native) | ||
1637 | name = syscall_find_nr(syscall); | ||
1638 | else | ||
1639 | name = syscall_find_nr_32(syscall); | ||
1640 | |||
1641 | // if found in the problem list, add to post-exec list | ||
1642 | if (sl.found) { | ||
1643 | if (ptr->postlist) { | ||
1644 | if (asprintf(&ptr->postlist, "%s,%s", ptr->postlist, name) == -1) | ||
1645 | errExit("asprintf"); | ||
1646 | } | ||
1647 | else | ||
1648 | ptr->postlist = strdup(name); | ||
1649 | } | ||
1650 | else { // no problem, add to pre-exec list | ||
1651 | // build syscall:error_no | ||
1652 | char *newcall = NULL; | ||
1653 | if (arg != 0) { | ||
1654 | if (asprintf(&newcall, "%s:%s", name, errno_find_nr(arg)) == -1) | ||
1655 | errExit("asprintf"); | ||
1656 | } | ||
1657 | else { | ||
1658 | newcall = strdup(name); | ||
1659 | if (!newcall) | ||
1660 | errExit("strdup"); | ||
1661 | } | ||
1662 | |||
1663 | if (ptr->prelist) { | ||
1664 | if (asprintf(&ptr->prelist, "%s,%s", ptr->prelist, newcall) == -1) | ||
1665 | errExit("asprintf"); | ||
1666 | free(newcall); | ||
1667 | } | ||
1668 | else | ||
1669 | ptr->prelist = newcall; | ||
1670 | } | ||
1671 | } | ||
1672 | |||
1673 | // go through list and find matches for syscalls in list @default-keep | ||
1674 | void syscalls_in_list(const char *list, const char *slist, int fd, char **prelist, char **postlist, bool native) { | ||
1675 | (void) fd; | ||
1676 | SyscallCheckList sl; | ||
1677 | // these syscalls are used by firejail after the seccomp filter is initialized | ||
1678 | sl.slist = slist; | ||
1679 | sl.prelist = NULL; | ||
1680 | sl.postlist = NULL; | ||
1681 | syscall_check_list(list, syscall_in_list, 0, 0, &sl, native); | ||
1682 | if (!arg_quiet) { | ||
1683 | printf("Seccomp list in: %s,", list); | ||
1684 | if (sl.slist) | ||
1685 | printf(" check list: %s,", sl.slist); | ||
1686 | if (sl.prelist) | ||
1687 | printf(" prelist: %s,", sl.prelist); | ||
1688 | if (sl.postlist) | ||
1689 | printf(" postlist: %s", sl.postlist); | ||
1690 | printf("\n"); | ||
1691 | } | ||
1692 | *prelist = sl.prelist; | ||
1693 | *postlist = sl.postlist; | ||
1694 | } | ||