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