1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file.
4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "build/build_config.h"
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "sandbox/linux/services/linux_syscalls.h"
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace sandbox {
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// The functions below cover all existing i386, x86_64, and ARM system calls;
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// excluding syscalls made obsolete in ARM EABI.
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// The implicitly defined sets form a partition of the sets of
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// system calls.
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// TODO(jln) we need to restrict the first parameter!
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsKill(int sysno) {
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_kill:
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_tkill:
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_tgkill:
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedGettime(int sysno) {
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_clock_gettime:
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_gettimeofday:
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_time:
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_adjtimex:         // Privileged.
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_clock_adjtime:    // Privileged.
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_clock_getres:     // Could be allowed.
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_clock_nanosleep:  // Could be allowed.
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_clock_settime:    // Privileged.
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ftime:  // Obsolete.
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_settimeofday:  // Privileged.
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_stime:
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsCurrentDirectory(int sysno) {
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getcwd:
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_chdir:
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fchdir:
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsUmask(int sysno) {
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_umask:
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// System calls that directly access the file system. They might acquire
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// a new file descriptor or otherwise perform an operation directly
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// via a path.
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Both EPERM and ENOENT are valid errno unless otherwise noted in comment.
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsFileSystem(int sysno) {
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_access:  // EPERM not a valid errno.
81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_chmod:
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_chown:
83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_chown32:
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_creat:
87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_execve:
88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_faccessat:  // EPERM not a valid errno.
89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fchmodat:
90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fchownat:  // Should be called chownat ?
91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__)
92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_newfstatat:  // fstatat(). EPERM not a valid errno.
93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#elif defined(__i386__) || defined(__arm__)
94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fstatat64:
95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_futimesat:  // Should be called utimesat ?
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lchown:
98a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lchown32:
100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_link:
102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_linkat:
103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lookup_dcookie:  // ENOENT not a valid errno.
104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lstat:           // EPERM not a valid errno.
105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_oldlstat:
107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lstat64:
110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mkdir:
112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mkdirat:
113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mknod:
114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mknodat:
115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_open:
116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_openat:
117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_readlink:  // EPERM not a valid errno.
118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_readlinkat:
119a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rename:
120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_renameat:
121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rmdir:
122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_stat:  // EPERM not a valid errno.
123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_oldstat:
125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_stat64:
128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_statfs:  // EPERM not a valid errno.
130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_statfs64:
132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_symlink:
134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_symlinkat:
135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_truncate:
136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_truncate64:
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_unlink:
140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_unlinkat:
141a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_uselib:  // Neither EPERM, nor ENOENT are valid errno.
142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ustat:   // Same as above. Deprecated.
143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
144a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_utime:
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_utimensat:  // New.
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_utimes:
148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
151a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fstat:
157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fstat64:
159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// TODO(jln): these should be denied gracefully as well (moved below).
162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fadvise64:  // EPERM not a valid errno.
164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fadvise64_64:
167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__arm__)
169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_arm_fadvise64_64:
170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fdatasync:  // EPERM not a valid errno.
172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_flock:      // EPERM not a valid errno.
173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fstatfs:    // Give information about the whole filesystem.
174a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fstatfs64:
176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fsync:  // EPERM not a valid errno.
178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_oldfstat:
180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sync_file_range:  // EPERM not a valid errno.
183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#elif defined(__arm__)
184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_arm_sync_file_range:  // EPERM not a valid errno.
185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// EPERM is a good errno for any of these.
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsDeniedFileSystemAccessViaFd(int sysno) {
193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fallocate:
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fchmod:
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fchown:
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ftruncate:
198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fchown32:
200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ftruncate64:
201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getdents:    // EPERM not a valid errno.
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getdents64:  // EPERM not a valid errno.
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_readdir:
206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsGetSimpleId(int sysno) {
214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_capget:
216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getegid:
217a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_geteuid:
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getgid:
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getgroups:
220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getpid:
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getppid:
222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getresgid:
223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getsid:
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_gettid:
225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getuid:
226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getresuid:
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getegid32:
229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_geteuid32:
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getgid32:
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getgroups32:
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getresgid32:
233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getresuid32:
234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getuid32:
235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsProcessPrivilegeChange(int sysno) {
243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_capset:
245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ioperm:  // Intel privilege.
247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_iopl:    // Intel privilege.
248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setfsgid:
250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setfsuid:
251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setgid:
252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setgroups:
253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setregid:
254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setresgid:
255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setresuid:
256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setreuid:
257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setuid:
258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setfsgid32:
260a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setfsuid32:
261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setgid32:
262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setgroups32:
263a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setregid32:
264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setresgid32:
265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setresuid32:
266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setreuid32:
267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setuid32:
268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
269a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsProcessGroupOrSession(int sysno) {
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setpgid:
278a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getpgrp:
279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setsid:
280a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getpgid:
281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
284a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedSignalHandling(int sysno) {
288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
289a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_sigaction:
290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_sigprocmask:
291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_sigreturn:
292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sigaction:
294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sigprocmask:
295a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sigreturn:
296a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
297a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
298a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_sigpending:
299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_sigqueueinfo:
300a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_sigsuspend:
301a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_sigtimedwait:
302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_rt_tgsigqueueinfo:
303a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sigaltstack:
304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_signalfd:
305a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_signalfd4:
306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sigpending:
308a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sigsuspend:
309a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
310a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
311a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_signal:
312a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sgetmask:  // Obsolete.
313a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ssetmask:
314a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
315a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
316a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
317a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
318a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
319a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
320a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedOperationOnFd(int sysno) {
321a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
322a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_close:
323a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_dup:
324a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_dup2:
325a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_dup3:
326a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
327a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_shutdown:
328a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
329a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
330a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fcntl:
331a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
332a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fcntl64:
333a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
334a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
335a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
338a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsKernelInternalApi(int sysno) {
340a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
341a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_restart_syscall:
342a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__arm__)
343a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __ARM_NR_cmpxchg:
344a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
346a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
347a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
348a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
350a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
351a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// This should be thought through in conjunction with IsFutex().
352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) {
353a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_clone:  // TODO(jln): restrict flags.
355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_exit:
356a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_exit_group:
357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_wait4:
358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_waitid:
359a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
360a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_waitpid:
361a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
363a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setns:  // Privileged.
364a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fork:
365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
366a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_get_thread_area:
367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_set_thread_area:
368a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
369a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_set_tid_address:
370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_unshare:
371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_vfork:
372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
374a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
376a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
377a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// It's difficult to restrict those, but there is attack surface here.
378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsFutex(int sysno) {
379a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
380a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_futex:
381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_get_robust_list:
382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_set_robust_list:
383a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
384a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
385a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
386a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
387a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
388a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
389a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedEpoll(int sysno) {
390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
391a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_epoll_create:
392a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_epoll_create1:
393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_epoll_ctl:
394a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_epoll_wait:
395a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
397a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__)
398a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_epoll_ctl_old:
399a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_epoll_pwait:
401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__)
402a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_epoll_wait_old:
403a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
404a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
405a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
406a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
407a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
408a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) {
409a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
410a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pipe:
411a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pipe2:
412a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
413a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
414a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
415a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_socketpair:  // We will want to inspect its argument.
416a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
417a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
418a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
419a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
420a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
421a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) {
422a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
423a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
424a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_accept:
425a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_accept4:
426a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_bind:
427a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_connect:
428a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_socket:
429a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_listen:
430a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
431a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
432a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
433a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
434a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
435a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
436a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
437a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
438a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Big multiplexing system call for sockets.
439a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsSocketCall(int sysno) {
440a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
441a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_socketcall:
442a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
443a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
444a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
445a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
446a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
447a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
448a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
449a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
450a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsNetworkSocketInformation(int sysno) {
451a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
452a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getpeername:
453a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getsockname:
454a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getsockopt:
455a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setsockopt:
456a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
457a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
458a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
459a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
460a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
461a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
462a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
463a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
464a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
465a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_brk:
466a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mlock:
467a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_munlock:
468a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_munmap:
469a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
470a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_madvise:
471a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mincore:
472a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mlockall:
473a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
474a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mmap:
475a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
476a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
477a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mmap2:
478a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
479a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
480a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_modify_ldt:
481a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
482a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mprotect:
483a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mremap:
484a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_msync:
485a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_munlockall:
486a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_readahead:
487a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_remap_file_pages:
488a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
489a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_vm86:
490a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_vm86old:
491a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
492a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
493a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
494a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
495a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
496a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
497a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedGeneralIo(int sysno) {
498a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
499a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lseek:
500a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
501a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR__llseek:
502a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
503a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_poll:
504a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ppoll:
505a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pselect6:
506a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_read:
507a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_readv:
508a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__arm__)
509a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_recv:
510a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
511a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
512a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_recvfrom:  // Could specify source.
513a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_recvmsg:   // Could specify source.
514a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
515a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
516a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_select:
517a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
518a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
519a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR__newselect:
520a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
521a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__arm__)
522a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_send:
523a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
524a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
525a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sendmsg:  // Could specify destination.
526a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sendto:   // Could specify destination.
527a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
528a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_write:
529a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_writev:
530a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
531a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ioctl:  // Can be very powerful.
532a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pread64:
533a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_preadv:
534a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pwrite64:
535a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pwritev:
536a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_recvmmsg:  // Could specify source.
537a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sendfile:
538a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
539a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sendfile64:
540a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
541a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sendmmsg:  // Could specify destination.
542a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_splice:
543a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_tee:
544a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_vmsplice:
545a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
546a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
547a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
548a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
549a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
550a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedPrctl(int sysno) {
551a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
552a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_prctl:
553a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
554a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
555a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__)
556a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_arch_prctl:
557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
558a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
559a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
560a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
561a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
562a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAllowedBasicScheduler(int sysno) {
563a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
564a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_yield:
565a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pause:
566a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_nanosleep:
567a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
568a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getpriority:
569a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
570a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_nice:
571a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
572a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setpriority:
573a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
574a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
575a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
578a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAdminOperation(int sysno) {
579a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
580a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
581a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_bdflush:
582a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
583a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_kexec_load:
584a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_reboot:
585a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setdomainname:
586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sethostname:
587a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_syslog:
588a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
589a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
590a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
591a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
592a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
593a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
594a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsKernelModule(int sysno) {
595a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
596a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
597a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_create_module:
598a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_get_kernel_syms:  // Should ENOSYS.
599a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_query_module:
600a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
601a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_delete_module:
602a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_init_module:
603a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
604a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
605a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
606a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
607a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
608a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
609a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsGlobalFSViewChange(int sysno) {
610a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
611a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pivot_root:
612a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_chroot:
613a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sync:
614a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
615a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
616a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
617a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
618a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
619a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
620a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsFsControl(int sysno) {
621a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
622a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mount:
623a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_nfsservctl:
624a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_quotactl:
625a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_swapoff:
626a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_swapon:
627a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
628a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_umount:
629a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
630a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_umount2:
631a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
632a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
633a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
634a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
635a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
636a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
637a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsNuma(int sysno) {
638a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
639a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_get_mempolicy:
640a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getcpu:
641a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mbind:
642a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
643a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_migrate_pages:
644a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
645a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_move_pages:
646a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_set_mempolicy:
647a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
648a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
649a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
650a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
651a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
652a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
653a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsMessageQueue(int sysno) {
654a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
655a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mq_getsetattr:
656a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mq_notify:
657a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mq_open:
658a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mq_timedreceive:
659a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mq_timedsend:
660a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mq_unlink:
661a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
662a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
663a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
664a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
665a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
666a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
667a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsGlobalProcessEnvironment(int sysno) {
668a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
669a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_acct:  // Privileged.
670a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
671a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getrlimit:
672a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
673a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__arm__)
674a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ugetrlimit:
675a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
676a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
677a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ulimit:
678a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
679a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getrusage:
680a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_personality:  // Can change its personality as well.
681a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_prlimit64:    // Like setrlimit / getrlimit.
682a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setrlimit:
683a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_times:
684a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
685a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
686a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
687a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
688a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
689a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
690a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsDebug(int sysno) {
691a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
692a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ptrace:
693a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_process_vm_readv:
694a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_process_vm_writev:
695a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
696a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_kcmp:
697a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
698a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
699a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
700a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
701a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
702a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
703a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
704a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsGlobalSystemStatus(int sysno) {
705a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
706a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR__sysctl:
707a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sysfs:
708a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sysinfo:
709a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_uname:
710a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
711a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_olduname:
712a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_oldolduname:
713a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
714a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
715a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
716a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
717a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
718a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
719a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
720a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsEventFd(int sysno) {
721a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
722a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_eventfd:
723a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_eventfd2:
724a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
725a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
726a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
727a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
728a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
729a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
730a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Asynchronous I/O API.
731a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAsyncIo(int sysno) {
732a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
733a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_io_cancel:
734a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_io_destroy:
735a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_io_getevents:
736a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_io_setup:
737a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_io_submit:
738a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
739a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
740a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
741a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
742a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
743a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
744a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsKeyManagement(int sysno) {
745a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
746a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_add_key:
747a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_keyctl:
748a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_request_key:
749a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
750a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
751a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
752a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
753a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
754a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
755a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
756a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsSystemVSemaphores(int sysno) {
757a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
758a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_semctl:
759a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_semget:
760a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_semop:
761a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_semtimedop:
762a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
763a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
764a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
765a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
766a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
767a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
768a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
769a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
770a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// These give a lot of ambient authority and bypass the setuid sandbox.
771a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsSystemVSharedMemory(int sysno) {
772a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
773a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_shmat:
774a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_shmctl:
775a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_shmdt:
776a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_shmget:
777a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
778a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
779a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
780a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
781a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
782a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
783a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
784a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
785a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsSystemVMessageQueue(int sysno) {
786a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
787a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_msgctl:
788a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_msgget:
789a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_msgrcv:
790a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_msgsnd:
791a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
792a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
793a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
794a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
795a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
796a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
797a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
798a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
799a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Big system V multiplexing system call.
800a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsSystemVIpc(int sysno) {
801a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
802a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ipc:
803a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
804a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
805a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
806a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
807a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
808a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
809a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
810a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAnySystemV(int sysno) {
811a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__) || defined(__arm__)
812a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return IsSystemVMessageQueue(sysno) || IsSystemVSemaphores(sysno) ||
813a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)         IsSystemVSharedMemory(sysno);
814a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#elif defined(__i386__)
815a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return IsSystemVIpc(sysno);
816a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
817a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
818a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
819a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAdvancedScheduler(int sysno) {
820a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
821a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ioprio_get:  // IO scheduler.
822a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_ioprio_set:
823a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_get_priority_max:
824a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_get_priority_min:
825a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_getaffinity:
826a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_getparam:
827a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_getscheduler:
828a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_rr_get_interval:
829a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_setaffinity:
830a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_setparam:
831a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_sched_setscheduler:
832a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
833a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
834a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
835a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
836a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
837a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
838a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsInotify(int sysno) {
839a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
840a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_inotify_add_watch:
841a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_inotify_init:
842a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_inotify_init1:
843a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_inotify_rm_watch:
844a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
845a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
846a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
847a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
848a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
849a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
850a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsFaNotify(int sysno) {
851a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
852a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fanotify_init:
853a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fanotify_mark:
854a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
855a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
856a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
857a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
858a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
859a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
860a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsTimer(int sysno) {
861a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
862a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getitimer:
863a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
864a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_alarm:
865a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
866a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setitimer:
867a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
868a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
869a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
870a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
871a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
872a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
873a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsAdvancedTimer(int sysno) {
874a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
875a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timer_create:
876a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timer_delete:
877a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timer_getoverrun:
878a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timer_gettime:
879a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timer_settime:
880a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timerfd_create:
881a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timerfd_gettime:
882a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_timerfd_settime:
883a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
884a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
885a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
886a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
887a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
888a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
889a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsExtendedAttributes(int sysno) {
890a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
891a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fgetxattr:
892a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_flistxattr:
893a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fremovexattr:
894a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_fsetxattr:
895a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getxattr:
896a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lgetxattr:
897a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_listxattr:
898a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_llistxattr:
899a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lremovexattr:
900a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lsetxattr:
901a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_removexattr:
902a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_setxattr:
903a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
904a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
905a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
906a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
907a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
908a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
909a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Various system calls that need to be researched.
910a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// TODO(jln): classify this better.
911a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsMisc(int sysno) {
912a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
913a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_name_to_handle_at:
914a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_open_by_handle_at:
915a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_perf_event_open:
916a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_syncfs:
917a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_vhangup:
918a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// The system calls below are not implemented.
919a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
920a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_afs_syscall:
921a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
922a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
923a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_break:
924a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
925a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
926a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_getpmsg:
927a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
928a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
929a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_gtty:
930a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_idle:
931a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_lock:
932a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_mpx:
933a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_prof:
934a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_profil:
935a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
936a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__) || defined(__x86_64__)
937a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_putpmsg:
938a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
939a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__)
940a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_security:
941a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
942a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__i386__)
943a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_stty:
944a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
945a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__x86_64__)
946a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_tuxcall:
947a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
948a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_vserver:
949a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
950a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
951a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
952a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
953a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
954a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
955a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(__arm__)
956a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsArmPciConfig(int sysno) {
957a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
958a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pciconfig_iobase:
959a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pciconfig_read:
960a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __NR_pciconfig_write:
961a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
962a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
963a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
964a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
965a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
966a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
967a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)bool SyscallSets::IsArmPrivate(int sysno) {
968a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (sysno) {
969a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __ARM_NR_breakpoint:
970a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __ARM_NR_cacheflush:
971a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __ARM_NR_set_tls:
972a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __ARM_NR_usr26:
973a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case __ARM_NR_usr32:
974a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return true;
975a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
976a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return false;
977a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
978a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
979a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // defined(__arm__)
980a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
981a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}  // namespace sandbox.
982