| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" | 5 #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 #include "sandbox/linux/services/linux_syscalls.h" | 8 #include "sandbox/linux/services/linux_syscalls.h" |
| 9 | 9 |
| 10 namespace sandbox { | 10 namespace sandbox { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 return true; | 22 return true; |
| 23 default: | 23 default: |
| 24 return false; | 24 return false; |
| 25 } | 25 } |
| 26 } | 26 } |
| 27 | 27 |
| 28 bool SyscallSets::IsAllowedGettime(int sysno) { | 28 bool SyscallSets::IsAllowedGettime(int sysno) { |
| 29 switch (sysno) { | 29 switch (sysno) { |
| 30 case __NR_clock_gettime: | 30 case __NR_clock_gettime: |
| 31 case __NR_gettimeofday: | 31 case __NR_gettimeofday: |
| 32 #if defined(__i386__) || defined(__x86_64__) | 32 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 33 case __NR_time: | 33 case __NR_time: |
| 34 #endif | 34 #endif |
| 35 return true; | 35 return true; |
| 36 case __NR_adjtimex: // Privileged. | 36 case __NR_adjtimex: // Privileged. |
| 37 case __NR_clock_adjtime: // Privileged. | 37 case __NR_clock_adjtime: // Privileged. |
| 38 case __NR_clock_getres: // Could be allowed. | 38 case __NR_clock_getres: // Could be allowed. |
| 39 case __NR_clock_nanosleep: // Could be allowed. | 39 case __NR_clock_nanosleep: // Could be allowed. |
| 40 case __NR_clock_settime: // Privileged. | 40 case __NR_clock_settime: // Privileged. |
| 41 #if defined(__i386__) | 41 #if defined(__i386__) || defined(__mips__) |
| 42 case __NR_ftime: // Obsolete. | 42 case __NR_ftime: // Obsolete. |
| 43 #endif | 43 #endif |
| 44 case __NR_settimeofday: // Privileged. | 44 case __NR_settimeofday: // Privileged. |
| 45 #if defined(__i386__) | 45 #if defined(__i386__) || defined(__mips__) |
| 46 case __NR_stime: | 46 case __NR_stime: |
| 47 #endif | 47 #endif |
| 48 default: | 48 default: |
| 49 return false; | 49 return false; |
| 50 } | 50 } |
| 51 } | 51 } |
| 52 | 52 |
| 53 bool SyscallSets::IsCurrentDirectory(int sysno) { | 53 bool SyscallSets::IsCurrentDirectory(int sysno) { |
| 54 switch (sysno) { | 54 switch (sysno) { |
| 55 case __NR_getcwd: | 55 case __NR_getcwd: |
| (...skipping 26 matching lines...) Expand all Loading... |
| 82 #if defined(__i386__) || defined(__arm__) | 82 #if defined(__i386__) || defined(__arm__) |
| 83 case __NR_chown32: | 83 case __NR_chown32: |
| 84 #endif | 84 #endif |
| 85 case __NR_creat: | 85 case __NR_creat: |
| 86 case __NR_execve: | 86 case __NR_execve: |
| 87 case __NR_faccessat: // EPERM not a valid errno. | 87 case __NR_faccessat: // EPERM not a valid errno. |
| 88 case __NR_fchmodat: | 88 case __NR_fchmodat: |
| 89 case __NR_fchownat: // Should be called chownat ? | 89 case __NR_fchownat: // Should be called chownat ? |
| 90 #if defined(__x86_64__) | 90 #if defined(__x86_64__) |
| 91 case __NR_newfstatat: // fstatat(). EPERM not a valid errno. | 91 case __NR_newfstatat: // fstatat(). EPERM not a valid errno. |
| 92 #elif defined(__i386__) || defined(__arm__) | 92 #elif defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 93 case __NR_fstatat64: | 93 case __NR_fstatat64: |
| 94 #endif | 94 #endif |
| 95 case __NR_futimesat: // Should be called utimesat ? | 95 case __NR_futimesat: // Should be called utimesat ? |
| 96 case __NR_lchown: | 96 case __NR_lchown: |
| 97 #if defined(__i386__) || defined(__arm__) | 97 #if defined(__i386__) || defined(__arm__) |
| 98 case __NR_lchown32: | 98 case __NR_lchown32: |
| 99 #endif | 99 #endif |
| 100 case __NR_link: | 100 case __NR_link: |
| 101 case __NR_linkat: | 101 case __NR_linkat: |
| 102 case __NR_lookup_dcookie: // ENOENT not a valid errno. | 102 case __NR_lookup_dcookie: // ENOENT not a valid errno. |
| 103 case __NR_lstat: // EPERM not a valid errno. | 103 case __NR_lstat: // EPERM not a valid errno. |
| 104 #if defined(__i386__) | 104 #if defined(__i386__) |
| 105 case __NR_oldlstat: | 105 case __NR_oldlstat: |
| 106 #endif | 106 #endif |
| 107 #if defined(__i386__) || defined(__arm__) | 107 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 108 case __NR_lstat64: | 108 case __NR_lstat64: |
| 109 #endif | 109 #endif |
| 110 case __NR_mkdir: | 110 case __NR_mkdir: |
| 111 case __NR_mkdirat: | 111 case __NR_mkdirat: |
| 112 case __NR_mknod: | 112 case __NR_mknod: |
| 113 case __NR_mknodat: | 113 case __NR_mknodat: |
| 114 case __NR_open: | 114 case __NR_open: |
| 115 case __NR_openat: | 115 case __NR_openat: |
| 116 case __NR_readlink: // EPERM not a valid errno. | 116 case __NR_readlink: // EPERM not a valid errno. |
| 117 case __NR_readlinkat: | 117 case __NR_readlinkat: |
| 118 case __NR_rename: | 118 case __NR_rename: |
| 119 case __NR_renameat: | 119 case __NR_renameat: |
| 120 case __NR_rmdir: | 120 case __NR_rmdir: |
| 121 case __NR_stat: // EPERM not a valid errno. | 121 case __NR_stat: // EPERM not a valid errno. |
| 122 #if defined(__i386__) | 122 #if defined(__i386__) |
| 123 case __NR_oldstat: | 123 case __NR_oldstat: |
| 124 #endif | 124 #endif |
| 125 #if defined(__i386__) || defined(__arm__) | 125 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 126 case __NR_stat64: | 126 case __NR_stat64: |
| 127 #endif | 127 #endif |
| 128 case __NR_statfs: // EPERM not a valid errno. | 128 case __NR_statfs: // EPERM not a valid errno. |
| 129 #if defined(__i386__) || defined(__arm__) | 129 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 130 case __NR_statfs64: | 130 case __NR_statfs64: |
| 131 #endif | 131 #endif |
| 132 case __NR_symlink: | 132 case __NR_symlink: |
| 133 case __NR_symlinkat: | 133 case __NR_symlinkat: |
| 134 case __NR_truncate: | 134 case __NR_truncate: |
| 135 #if defined(__i386__) || defined(__arm__) | 135 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 136 case __NR_truncate64: | 136 case __NR_truncate64: |
| 137 #endif | 137 #endif |
| 138 case __NR_unlink: | 138 case __NR_unlink: |
| 139 case __NR_unlinkat: | 139 case __NR_unlinkat: |
| 140 case __NR_uselib: // Neither EPERM, nor ENOENT are valid errno. | 140 case __NR_uselib: // Neither EPERM, nor ENOENT are valid errno. |
| 141 case __NR_ustat: // Same as above. Deprecated. | 141 case __NR_ustat: // Same as above. Deprecated. |
| 142 #if defined(__i386__) || defined(__x86_64__) | 142 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 143 case __NR_utime: | 143 case __NR_utime: |
| 144 #endif | 144 #endif |
| 145 case __NR_utimensat: // New. | 145 case __NR_utimensat: // New. |
| 146 case __NR_utimes: | 146 case __NR_utimes: |
| 147 return true; | 147 return true; |
| 148 default: | 148 default: |
| 149 return false; | 149 return false; |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 | 152 |
| 153 bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) { | 153 bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) { |
| 154 switch (sysno) { | 154 switch (sysno) { |
| 155 case __NR_fstat: | 155 case __NR_fstat: |
| 156 #if defined(__i386__) || defined(__arm__) | 156 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 157 case __NR_fstat64: | 157 case __NR_fstat64: |
| 158 #endif | 158 #endif |
| 159 return true; | 159 return true; |
| 160 // TODO(jln): these should be denied gracefully as well (moved below). | 160 // TODO(jln): these should be denied gracefully as well (moved below). |
| 161 #if defined(__i386__) || defined(__x86_64__) | 161 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 162 case __NR_fadvise64: // EPERM not a valid errno. | 162 case __NR_fadvise64: // EPERM not a valid errno. |
| 163 #endif | 163 #endif |
| 164 #if defined(__i386__) | 164 #if defined(__i386__) |
| 165 case __NR_fadvise64_64: | 165 case __NR_fadvise64_64: |
| 166 #endif | 166 #endif |
| 167 #if defined(__arm__) | 167 #if defined(__arm__) |
| 168 case __NR_arm_fadvise64_64: | 168 case __NR_arm_fadvise64_64: |
| 169 #endif | 169 #endif |
| 170 case __NR_fdatasync: // EPERM not a valid errno. | 170 case __NR_fdatasync: // EPERM not a valid errno. |
| 171 case __NR_flock: // EPERM not a valid errno. | 171 case __NR_flock: // EPERM not a valid errno. |
| 172 case __NR_fstatfs: // Give information about the whole filesystem. | 172 case __NR_fstatfs: // Give information about the whole filesystem. |
| 173 #if defined(__i386__) || defined(__arm__) | 173 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 174 case __NR_fstatfs64: | 174 case __NR_fstatfs64: |
| 175 #endif | 175 #endif |
| 176 case __NR_fsync: // EPERM not a valid errno. | 176 case __NR_fsync: // EPERM not a valid errno. |
| 177 #if defined(__i386__) | 177 #if defined(__i386__) |
| 178 case __NR_oldfstat: | 178 case __NR_oldfstat: |
| 179 #endif | 179 #endif |
| 180 #if defined(__i386__) || defined(__x86_64__) | 180 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 181 case __NR_sync_file_range: // EPERM not a valid errno. | 181 case __NR_sync_file_range: // EPERM not a valid errno. |
| 182 #elif defined(__arm__) | 182 #elif defined(__arm__) |
| 183 case __NR_arm_sync_file_range: // EPERM not a valid errno. | 183 case __NR_arm_sync_file_range: // EPERM not a valid errno. |
| 184 #endif | 184 #endif |
| 185 default: | 185 default: |
| 186 return false; | 186 return false; |
| 187 } | 187 } |
| 188 } | 188 } |
| 189 | 189 |
| 190 // EPERM is a good errno for any of these. | 190 // EPERM is a good errno for any of these. |
| 191 bool SyscallSets::IsDeniedFileSystemAccessViaFd(int sysno) { | 191 bool SyscallSets::IsDeniedFileSystemAccessViaFd(int sysno) { |
| 192 switch (sysno) { | 192 switch (sysno) { |
| 193 case __NR_fallocate: | 193 case __NR_fallocate: |
| 194 case __NR_fchmod: | 194 case __NR_fchmod: |
| 195 case __NR_fchown: | 195 case __NR_fchown: |
| 196 case __NR_ftruncate: | 196 case __NR_ftruncate: |
| 197 #if defined(__i386__) || defined(__arm__) | 197 #if defined(__i386__) || defined(__arm__) |
| 198 case __NR_fchown32: | 198 case __NR_fchown32: |
| 199 #endif |
| 200 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 199 case __NR_ftruncate64: | 201 case __NR_ftruncate64: |
| 200 #endif | 202 #endif |
| 201 case __NR_getdents: // EPERM not a valid errno. | 203 case __NR_getdents: // EPERM not a valid errno. |
| 202 case __NR_getdents64: // EPERM not a valid errno. | 204 case __NR_getdents64: // EPERM not a valid errno. |
| 203 #if defined(__i386__) | 205 #if defined(__i386__) || defined(__mips__) |
| 204 case __NR_readdir: | 206 case __NR_readdir: |
| 205 #endif | 207 #endif |
| 206 return true; | 208 return true; |
| 207 default: | 209 default: |
| 208 return false; | 210 return false; |
| 209 } | 211 } |
| 210 } | 212 } |
| 211 | 213 |
| 212 bool SyscallSets::IsGetSimpleId(int sysno) { | 214 bool SyscallSets::IsGetSimpleId(int sysno) { |
| 213 switch (sysno) { | 215 switch (sysno) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 234 #endif | 236 #endif |
| 235 return true; | 237 return true; |
| 236 default: | 238 default: |
| 237 return false; | 239 return false; |
| 238 } | 240 } |
| 239 } | 241 } |
| 240 | 242 |
| 241 bool SyscallSets::IsProcessPrivilegeChange(int sysno) { | 243 bool SyscallSets::IsProcessPrivilegeChange(int sysno) { |
| 242 switch (sysno) { | 244 switch (sysno) { |
| 243 case __NR_capset: | 245 case __NR_capset: |
| 244 #if defined(__i386__) || defined(__x86_64__) | 246 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 245 case __NR_ioperm: // Intel privilege. | 247 case __NR_ioperm: // Intel privilege. |
| 246 case __NR_iopl: // Intel privilege. | 248 case __NR_iopl: // Intel privilege. |
| 247 #endif | 249 #endif |
| 248 case __NR_setfsgid: | 250 case __NR_setfsgid: |
| 249 case __NR_setfsuid: | 251 case __NR_setfsuid: |
| 250 case __NR_setgid: | 252 case __NR_setgid: |
| 251 case __NR_setgroups: | 253 case __NR_setgroups: |
| 252 case __NR_setregid: | 254 case __NR_setregid: |
| 253 case __NR_setresgid: | 255 case __NR_setresgid: |
| 254 case __NR_setresuid: | 256 case __NR_setresuid: |
| (...skipping 26 matching lines...) Expand all Loading... |
| 281 default: | 283 default: |
| 282 return false; | 284 return false; |
| 283 } | 285 } |
| 284 } | 286 } |
| 285 | 287 |
| 286 bool SyscallSets::IsAllowedSignalHandling(int sysno) { | 288 bool SyscallSets::IsAllowedSignalHandling(int sysno) { |
| 287 switch (sysno) { | 289 switch (sysno) { |
| 288 case __NR_rt_sigaction: | 290 case __NR_rt_sigaction: |
| 289 case __NR_rt_sigprocmask: | 291 case __NR_rt_sigprocmask: |
| 290 case __NR_rt_sigreturn: | 292 case __NR_rt_sigreturn: |
| 291 #if defined(__i386__) || defined(__arm__) | 293 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 292 case __NR_sigaction: | 294 case __NR_sigaction: |
| 293 case __NR_sigprocmask: | 295 case __NR_sigprocmask: |
| 294 case __NR_sigreturn: | 296 case __NR_sigreturn: |
| 295 #endif | 297 #endif |
| 296 return true; | 298 return true; |
| 297 case __NR_rt_sigpending: | 299 case __NR_rt_sigpending: |
| 298 case __NR_rt_sigqueueinfo: | 300 case __NR_rt_sigqueueinfo: |
| 299 case __NR_rt_sigsuspend: | 301 case __NR_rt_sigsuspend: |
| 300 case __NR_rt_sigtimedwait: | 302 case __NR_rt_sigtimedwait: |
| 301 case __NR_rt_tgsigqueueinfo: | 303 case __NR_rt_tgsigqueueinfo: |
| 302 case __NR_sigaltstack: | 304 case __NR_sigaltstack: |
| 303 case __NR_signalfd: | 305 case __NR_signalfd: |
| 304 case __NR_signalfd4: | 306 case __NR_signalfd4: |
| 305 #if defined(__i386__) || defined(__arm__) | 307 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 306 case __NR_sigpending: | 308 case __NR_sigpending: |
| 307 case __NR_sigsuspend: | 309 case __NR_sigsuspend: |
| 308 #endif | 310 #endif |
| 309 #if defined(__i386__) | 311 #if defined(__i386__) || defined(__mips__) |
| 310 case __NR_signal: | 312 case __NR_signal: |
| 311 case __NR_sgetmask: // Obsolete. | 313 case __NR_sgetmask: // Obsolete. |
| 312 case __NR_ssetmask: | 314 case __NR_ssetmask: |
| 313 #endif | 315 #endif |
| 314 default: | 316 default: |
| 315 return false; | 317 return false; |
| 316 } | 318 } |
| 317 } | 319 } |
| 318 | 320 |
| 319 bool SyscallSets::IsAllowedOperationOnFd(int sysno) { | 321 bool SyscallSets::IsAllowedOperationOnFd(int sysno) { |
| 320 switch (sysno) { | 322 switch (sysno) { |
| 321 case __NR_close: | 323 case __NR_close: |
| 322 case __NR_dup: | 324 case __NR_dup: |
| 323 case __NR_dup2: | 325 case __NR_dup2: |
| 324 case __NR_dup3: | 326 case __NR_dup3: |
| 325 #if defined(__x86_64__) || defined(__arm__) | 327 #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
| 326 case __NR_shutdown: | 328 case __NR_shutdown: |
| 327 #endif | 329 #endif |
| 328 return true; | 330 return true; |
| 329 case __NR_fcntl: | 331 case __NR_fcntl: |
| 330 #if defined(__i386__) || defined(__arm__) | 332 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 331 case __NR_fcntl64: | 333 case __NR_fcntl64: |
| 332 #endif | 334 #endif |
| 333 default: | 335 default: |
| 334 return false; | 336 return false; |
| 335 } | 337 } |
| 336 } | 338 } |
| 337 | 339 |
| 338 bool SyscallSets::IsKernelInternalApi(int sysno) { | 340 bool SyscallSets::IsKernelInternalApi(int sysno) { |
| 339 switch (sysno) { | 341 switch (sysno) { |
| 340 case __NR_restart_syscall: | 342 case __NR_restart_syscall: |
| (...skipping 15 matching lines...) Expand all Loading... |
| 356 case __NR_waitid: | 358 case __NR_waitid: |
| 357 #if defined(__i386__) | 359 #if defined(__i386__) |
| 358 case __NR_waitpid: | 360 case __NR_waitpid: |
| 359 #endif | 361 #endif |
| 360 return true; | 362 return true; |
| 361 case __NR_clone: // Should be parameter-restricted. | 363 case __NR_clone: // Should be parameter-restricted. |
| 362 case __NR_setns: // Privileged. | 364 case __NR_setns: // Privileged. |
| 363 case __NR_fork: | 365 case __NR_fork: |
| 364 #if defined(__i386__) || defined(__x86_64__) | 366 #if defined(__i386__) || defined(__x86_64__) |
| 365 case __NR_get_thread_area: | 367 case __NR_get_thread_area: |
| 368 #endif |
| 369 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 366 case __NR_set_thread_area: | 370 case __NR_set_thread_area: |
| 367 #endif | 371 #endif |
| 368 case __NR_set_tid_address: | 372 case __NR_set_tid_address: |
| 369 case __NR_unshare: | 373 case __NR_unshare: |
| 374 #if !defined(__mips__) |
| 370 case __NR_vfork: | 375 case __NR_vfork: |
| 376 #endif |
| 371 default: | 377 default: |
| 372 return false; | 378 return false; |
| 373 } | 379 } |
| 374 } | 380 } |
| 375 | 381 |
| 376 // It's difficult to restrict those, but there is attack surface here. | 382 // It's difficult to restrict those, but there is attack surface here. |
| 377 bool SyscallSets::IsAllowedFutex(int sysno) { | 383 bool SyscallSets::IsAllowedFutex(int sysno) { |
| 378 switch (sysno) { | 384 switch (sysno) { |
| 379 case __NR_get_robust_list: | 385 case __NR_get_robust_list: |
| 380 case __NR_set_robust_list: | 386 case __NR_set_robust_list: |
| (...skipping 22 matching lines...) Expand all Loading... |
| 403 return false; | 409 return false; |
| 404 } | 410 } |
| 405 } | 411 } |
| 406 | 412 |
| 407 bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) { | 413 bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) { |
| 408 switch (sysno) { | 414 switch (sysno) { |
| 409 case __NR_pipe: | 415 case __NR_pipe: |
| 410 case __NR_pipe2: | 416 case __NR_pipe2: |
| 411 return true; | 417 return true; |
| 412 default: | 418 default: |
| 413 #if defined(__x86_64__) || defined(__arm__) | 419 #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
| 414 case __NR_socketpair: // We will want to inspect its argument. | 420 case __NR_socketpair: // We will want to inspect its argument. |
| 415 #endif | 421 #endif |
| 416 return false; | 422 return false; |
| 417 } | 423 } |
| 418 } | 424 } |
| 419 | 425 |
| 420 bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) { | 426 bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) { |
| 421 switch (sysno) { | 427 switch (sysno) { |
| 422 #if defined(__x86_64__) || defined(__arm__) | 428 #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
| 423 case __NR_accept: | 429 case __NR_accept: |
| 424 case __NR_accept4: | 430 case __NR_accept4: |
| 425 case __NR_bind: | 431 case __NR_bind: |
| 426 case __NR_connect: | 432 case __NR_connect: |
| 427 case __NR_socket: | 433 case __NR_socket: |
| 428 case __NR_listen: | 434 case __NR_listen: |
| 429 return true; | 435 return true; |
| 430 #endif | 436 #endif |
| 431 default: | 437 default: |
| 432 return false; | 438 return false; |
| 433 } | 439 } |
| 434 } | 440 } |
| 435 | 441 |
| 436 #if defined(__i386__) | 442 #if defined(__i386__) || defined(__mips__) |
| 437 // Big multiplexing system call for sockets. | 443 // Big multiplexing system call for sockets. |
| 438 bool SyscallSets::IsSocketCall(int sysno) { | 444 bool SyscallSets::IsSocketCall(int sysno) { |
| 439 switch (sysno) { | 445 switch (sysno) { |
| 440 case __NR_socketcall: | 446 case __NR_socketcall: |
| 441 return true; | 447 return true; |
| 442 default: | 448 default: |
| 443 return false; | 449 return false; |
| 444 } | 450 } |
| 445 } | 451 } |
| 446 #endif | 452 #endif |
| 447 | 453 |
| 448 #if defined(__x86_64__) || defined(__arm__) | 454 #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
| 449 bool SyscallSets::IsNetworkSocketInformation(int sysno) { | 455 bool SyscallSets::IsNetworkSocketInformation(int sysno) { |
| 450 switch (sysno) { | 456 switch (sysno) { |
| 451 case __NR_getpeername: | 457 case __NR_getpeername: |
| 452 case __NR_getsockname: | 458 case __NR_getsockname: |
| 453 case __NR_getsockopt: | 459 case __NR_getsockopt: |
| 454 case __NR_setsockopt: | 460 case __NR_setsockopt: |
| 455 return true; | 461 return true; |
| 456 default: | 462 default: |
| 457 return false; | 463 return false; |
| 458 } | 464 } |
| 459 } | 465 } |
| 460 #endif | 466 #endif |
| 461 | 467 |
| 462 bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { | 468 bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { |
| 463 switch (sysno) { | 469 switch (sysno) { |
| 464 case __NR_brk: | 470 case __NR_brk: |
| 465 case __NR_mlock: | 471 case __NR_mlock: |
| 466 case __NR_munlock: | 472 case __NR_munlock: |
| 467 case __NR_munmap: | 473 case __NR_munmap: |
| 468 return true; | 474 return true; |
| 469 case __NR_madvise: | 475 case __NR_madvise: |
| 470 case __NR_mincore: | 476 case __NR_mincore: |
| 471 case __NR_mlockall: | 477 case __NR_mlockall: |
| 472 #if defined(__i386__) || defined(__x86_64__) | 478 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 473 case __NR_mmap: | 479 case __NR_mmap: |
| 474 #endif | 480 #endif |
| 475 #if defined(__i386__) || defined(__arm__) | 481 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 476 case __NR_mmap2: | 482 case __NR_mmap2: |
| 477 #endif | 483 #endif |
| 478 #if defined(__i386__) || defined(__x86_64__) | 484 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 479 case __NR_modify_ldt: | 485 case __NR_modify_ldt: |
| 480 #endif | 486 #endif |
| 481 case __NR_mprotect: | 487 case __NR_mprotect: |
| 482 case __NR_mremap: | 488 case __NR_mremap: |
| 483 case __NR_msync: | 489 case __NR_msync: |
| 484 case __NR_munlockall: | 490 case __NR_munlockall: |
| 485 case __NR_readahead: | 491 case __NR_readahead: |
| 486 case __NR_remap_file_pages: | 492 case __NR_remap_file_pages: |
| 493 #if defined(__i386__) || defined(__mips__) |
| 494 case __NR_vm86: |
| 495 #endif |
| 487 #if defined(__i386__) | 496 #if defined(__i386__) |
| 488 case __NR_vm86: | |
| 489 case __NR_vm86old: | 497 case __NR_vm86old: |
| 490 #endif | 498 #endif |
| 491 default: | 499 default: |
| 492 return false; | 500 return false; |
| 493 } | 501 } |
| 494 } | 502 } |
| 495 | 503 |
| 496 bool SyscallSets::IsAllowedGeneralIo(int sysno) { | 504 bool SyscallSets::IsAllowedGeneralIo(int sysno) { |
| 497 switch (sysno) { | 505 switch (sysno) { |
| 498 case __NR_lseek: | 506 case __NR_lseek: |
| 499 #if defined(__i386__) || defined(__arm__) | 507 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 500 case __NR__llseek: | 508 case __NR__llseek: |
| 501 #endif | 509 #endif |
| 502 case __NR_poll: | 510 case __NR_poll: |
| 503 case __NR_ppoll: | 511 case __NR_ppoll: |
| 504 case __NR_pselect6: | 512 case __NR_pselect6: |
| 505 case __NR_read: | 513 case __NR_read: |
| 506 case __NR_readv: | 514 case __NR_readv: |
| 507 #if defined(__arm__) | 515 #if defined(__arm__) || defined(__mips__) |
| 508 case __NR_recv: | 516 case __NR_recv: |
| 509 #endif | 517 #endif |
| 510 #if defined(__x86_64__) || defined(__arm__) | 518 #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
| 511 case __NR_recvfrom: // Could specify source. | 519 case __NR_recvfrom: // Could specify source. |
| 512 case __NR_recvmsg: // Could specify source. | 520 case __NR_recvmsg: // Could specify source. |
| 513 #endif | 521 #endif |
| 514 #if defined(__i386__) || defined(__x86_64__) | 522 #if defined(__i386__) || defined(__x86_64__) |
| 515 case __NR_select: | 523 case __NR_select: |
| 516 #endif | 524 #endif |
| 517 #if defined(__i386__) || defined(__arm__) | 525 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 518 case __NR__newselect: | 526 case __NR__newselect: |
| 519 #endif | 527 #endif |
| 520 #if defined(__arm__) | 528 #if defined(__arm__) |
| 521 case __NR_send: | 529 case __NR_send: |
| 522 #endif | 530 #endif |
| 523 #if defined(__x86_64__) || defined(__arm__) | 531 #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
| 524 case __NR_sendmsg: // Could specify destination. | 532 case __NR_sendmsg: // Could specify destination. |
| 525 case __NR_sendto: // Could specify destination. | 533 case __NR_sendto: // Could specify destination. |
| 526 #endif | 534 #endif |
| 527 case __NR_write: | 535 case __NR_write: |
| 528 case __NR_writev: | 536 case __NR_writev: |
| 529 return true; | 537 return true; |
| 530 case __NR_ioctl: // Can be very powerful. | 538 case __NR_ioctl: // Can be very powerful. |
| 531 case __NR_pread64: | 539 case __NR_pread64: |
| 532 case __NR_preadv: | 540 case __NR_preadv: |
| 533 case __NR_pwrite64: | 541 case __NR_pwrite64: |
| 534 case __NR_pwritev: | 542 case __NR_pwritev: |
| 535 case __NR_recvmmsg: // Could specify source. | 543 case __NR_recvmmsg: // Could specify source. |
| 536 case __NR_sendfile: | 544 case __NR_sendfile: |
| 537 #if defined(__i386__) || defined(__arm__) | 545 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 538 case __NR_sendfile64: | 546 case __NR_sendfile64: |
| 539 #endif | 547 #endif |
| 540 case __NR_sendmmsg: // Could specify destination. | 548 case __NR_sendmmsg: // Could specify destination. |
| 541 case __NR_splice: | 549 case __NR_splice: |
| 542 case __NR_tee: | 550 case __NR_tee: |
| 543 case __NR_vmsplice: | 551 case __NR_vmsplice: |
| 544 default: | 552 default: |
| 545 return false; | 553 return false; |
| 546 } | 554 } |
| 547 } | 555 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 558 } | 566 } |
| 559 } | 567 } |
| 560 | 568 |
| 561 bool SyscallSets::IsAllowedBasicScheduler(int sysno) { | 569 bool SyscallSets::IsAllowedBasicScheduler(int sysno) { |
| 562 switch (sysno) { | 570 switch (sysno) { |
| 563 case __NR_sched_yield: | 571 case __NR_sched_yield: |
| 564 case __NR_pause: | 572 case __NR_pause: |
| 565 case __NR_nanosleep: | 573 case __NR_nanosleep: |
| 566 return true; | 574 return true; |
| 567 case __NR_getpriority: | 575 case __NR_getpriority: |
| 568 #if defined(__i386__) || defined(__arm__) | 576 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 569 case __NR_nice: | 577 case __NR_nice: |
| 570 #endif | 578 #endif |
| 571 case __NR_setpriority: | 579 case __NR_setpriority: |
| 572 default: | 580 default: |
| 573 return false; | 581 return false; |
| 574 } | 582 } |
| 575 } | 583 } |
| 576 | 584 |
| 577 bool SyscallSets::IsAdminOperation(int sysno) { | 585 bool SyscallSets::IsAdminOperation(int sysno) { |
| 578 switch (sysno) { | 586 switch (sysno) { |
| 579 #if defined(__i386__) || defined(__arm__) | 587 #if defined(__i386__) || defined(__arm__) || defined(__mips__) |
| 580 case __NR_bdflush: | 588 case __NR_bdflush: |
| 581 #endif | 589 #endif |
| 582 case __NR_kexec_load: | 590 case __NR_kexec_load: |
| 583 case __NR_reboot: | 591 case __NR_reboot: |
| 584 case __NR_setdomainname: | 592 case __NR_setdomainname: |
| 585 case __NR_sethostname: | 593 case __NR_sethostname: |
| 586 case __NR_syslog: | 594 case __NR_syslog: |
| 587 return true; | 595 return true; |
| 588 default: | 596 default: |
| 589 return false; | 597 return false; |
| 590 } | 598 } |
| 591 } | 599 } |
| 592 | 600 |
| 593 bool SyscallSets::IsKernelModule(int sysno) { | 601 bool SyscallSets::IsKernelModule(int sysno) { |
| 594 switch (sysno) { | 602 switch (sysno) { |
| 595 #if defined(__i386__) || defined(__x86_64__) | 603 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 596 case __NR_create_module: | 604 case __NR_create_module: |
| 597 case __NR_get_kernel_syms: // Should ENOSYS. | 605 case __NR_get_kernel_syms: // Should ENOSYS. |
| 598 case __NR_query_module: | 606 case __NR_query_module: |
| 599 #endif | 607 #endif |
| 600 case __NR_delete_module: | 608 case __NR_delete_module: |
| 601 case __NR_init_module: | 609 case __NR_init_module: |
| 602 return true; | 610 return true; |
| 603 default: | 611 default: |
| 604 return false; | 612 return false; |
| 605 } | 613 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 616 } | 624 } |
| 617 } | 625 } |
| 618 | 626 |
| 619 bool SyscallSets::IsFsControl(int sysno) { | 627 bool SyscallSets::IsFsControl(int sysno) { |
| 620 switch (sysno) { | 628 switch (sysno) { |
| 621 case __NR_mount: | 629 case __NR_mount: |
| 622 case __NR_nfsservctl: | 630 case __NR_nfsservctl: |
| 623 case __NR_quotactl: | 631 case __NR_quotactl: |
| 624 case __NR_swapoff: | 632 case __NR_swapoff: |
| 625 case __NR_swapon: | 633 case __NR_swapon: |
| 626 #if defined(__i386__) | 634 #if defined(__i386__) || defined(__mips__) |
| 627 case __NR_umount: | 635 case __NR_umount: |
| 628 #endif | 636 #endif |
| 629 case __NR_umount2: | 637 case __NR_umount2: |
| 630 return true; | 638 return true; |
| 631 default: | 639 default: |
| 632 return false; | 640 return false; |
| 633 } | 641 } |
| 634 } | 642 } |
| 635 | 643 |
| 636 bool SyscallSets::IsNuma(int sysno) { | 644 bool SyscallSets::IsNuma(int sysno) { |
| 637 switch (sysno) { | 645 switch (sysno) { |
| 638 case __NR_get_mempolicy: | 646 case __NR_get_mempolicy: |
| 639 case __NR_getcpu: | 647 case __NR_getcpu: |
| 640 case __NR_mbind: | 648 case __NR_mbind: |
| 641 #if defined(__i386__) || defined(__x86_64__) | 649 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 642 case __NR_migrate_pages: | 650 case __NR_migrate_pages: |
| 643 #endif | 651 #endif |
| 644 case __NR_move_pages: | 652 case __NR_move_pages: |
| 645 case __NR_set_mempolicy: | 653 case __NR_set_mempolicy: |
| 646 return true; | 654 return true; |
| 647 default: | 655 default: |
| 648 return false; | 656 return false; |
| 649 } | 657 } |
| 650 } | 658 } |
| 651 | 659 |
| 652 bool SyscallSets::IsMessageQueue(int sysno) { | 660 bool SyscallSets::IsMessageQueue(int sysno) { |
| 653 switch (sysno) { | 661 switch (sysno) { |
| 654 case __NR_mq_getsetattr: | 662 case __NR_mq_getsetattr: |
| 655 case __NR_mq_notify: | 663 case __NR_mq_notify: |
| 656 case __NR_mq_open: | 664 case __NR_mq_open: |
| 657 case __NR_mq_timedreceive: | 665 case __NR_mq_timedreceive: |
| 658 case __NR_mq_timedsend: | 666 case __NR_mq_timedsend: |
| 659 case __NR_mq_unlink: | 667 case __NR_mq_unlink: |
| 660 return true; | 668 return true; |
| 661 default: | 669 default: |
| 662 return false; | 670 return false; |
| 663 } | 671 } |
| 664 } | 672 } |
| 665 | 673 |
| 666 bool SyscallSets::IsGlobalProcessEnvironment(int sysno) { | 674 bool SyscallSets::IsGlobalProcessEnvironment(int sysno) { |
| 667 switch (sysno) { | 675 switch (sysno) { |
| 668 case __NR_acct: // Privileged. | 676 case __NR_acct: // Privileged. |
| 669 #if defined(__i386__) || defined(__x86_64__) | 677 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 670 case __NR_getrlimit: | 678 case __NR_getrlimit: |
| 671 #endif | 679 #endif |
| 672 #if defined(__i386__) || defined(__arm__) | 680 #if defined(__i386__) || defined(__arm__) |
| 673 case __NR_ugetrlimit: | 681 case __NR_ugetrlimit: |
| 674 #endif | 682 #endif |
| 675 #if defined(__i386__) | 683 #if defined(__i386__) || defined(__mips__) |
| 676 case __NR_ulimit: | 684 case __NR_ulimit: |
| 677 #endif | 685 #endif |
| 678 case __NR_getrusage: | 686 case __NR_getrusage: |
| 679 case __NR_personality: // Can change its personality as well. | 687 case __NR_personality: // Can change its personality as well. |
| 680 case __NR_prlimit64: // Like setrlimit / getrlimit. | 688 case __NR_prlimit64: // Like setrlimit / getrlimit. |
| 681 case __NR_setrlimit: | 689 case __NR_setrlimit: |
| 682 case __NR_times: | 690 case __NR_times: |
| 683 return true; | 691 return true; |
| 684 default: | 692 default: |
| 685 return false; | 693 return false; |
| 686 } | 694 } |
| 687 } | 695 } |
| 688 | 696 |
| 689 bool SyscallSets::IsDebug(int sysno) { | 697 bool SyscallSets::IsDebug(int sysno) { |
| 690 switch (sysno) { | 698 switch (sysno) { |
| 691 case __NR_ptrace: | 699 case __NR_ptrace: |
| 692 case __NR_process_vm_readv: | 700 case __NR_process_vm_readv: |
| 693 case __NR_process_vm_writev: | 701 case __NR_process_vm_writev: |
| 694 #if defined(__i386__) || defined(__x86_64__) | 702 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 695 case __NR_kcmp: | 703 case __NR_kcmp: |
| 696 #endif | 704 #endif |
| 697 return true; | 705 return true; |
| 698 default: | 706 default: |
| 699 return false; | 707 return false; |
| 700 } | 708 } |
| 701 } | 709 } |
| 702 | 710 |
| 703 bool SyscallSets::IsGlobalSystemStatus(int sysno) { | 711 bool SyscallSets::IsGlobalSystemStatus(int sysno) { |
| 704 switch (sysno) { | 712 switch (sysno) { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 case __NR_msgget: | 795 case __NR_msgget: |
| 788 case __NR_msgrcv: | 796 case __NR_msgrcv: |
| 789 case __NR_msgsnd: | 797 case __NR_msgsnd: |
| 790 return true; | 798 return true; |
| 791 default: | 799 default: |
| 792 return false; | 800 return false; |
| 793 } | 801 } |
| 794 } | 802 } |
| 795 #endif | 803 #endif |
| 796 | 804 |
| 797 #if defined(__i386__) | 805 #if defined(__i386__) || defined(__mips__) |
| 798 // Big system V multiplexing system call. | 806 // Big system V multiplexing system call. |
| 799 bool SyscallSets::IsSystemVIpc(int sysno) { | 807 bool SyscallSets::IsSystemVIpc(int sysno) { |
| 800 switch (sysno) { | 808 switch (sysno) { |
| 801 case __NR_ipc: | 809 case __NR_ipc: |
| 802 return true; | 810 return true; |
| 803 default: | 811 default: |
| 804 return false; | 812 return false; |
| 805 } | 813 } |
| 806 } | 814 } |
| 807 #endif | 815 #endif |
| 808 | 816 |
| 809 bool SyscallSets::IsAnySystemV(int sysno) { | 817 bool SyscallSets::IsAnySystemV(int sysno) { |
| 810 #if defined(__x86_64__) || defined(__arm__) | 818 #if defined(__x86_64__) || defined(__arm__) |
| 811 return IsSystemVMessageQueue(sysno) || IsSystemVSemaphores(sysno) || | 819 return IsSystemVMessageQueue(sysno) || IsSystemVSemaphores(sysno) || |
| 812 IsSystemVSharedMemory(sysno); | 820 IsSystemVSharedMemory(sysno); |
| 813 #elif defined(__i386__) | 821 #elif defined(__i386__) || defined(__mips__) |
| 814 return IsSystemVIpc(sysno); | 822 return IsSystemVIpc(sysno); |
| 815 #endif | 823 #endif |
| 816 } | 824 } |
| 817 | 825 |
| 818 bool SyscallSets::IsAdvancedScheduler(int sysno) { | 826 bool SyscallSets::IsAdvancedScheduler(int sysno) { |
| 819 switch (sysno) { | 827 switch (sysno) { |
| 820 case __NR_ioprio_get: // IO scheduler. | 828 case __NR_ioprio_get: // IO scheduler. |
| 821 case __NR_ioprio_set: | 829 case __NR_ioprio_set: |
| 822 case __NR_sched_get_priority_max: | 830 case __NR_sched_get_priority_max: |
| 823 case __NR_sched_get_priority_min: | 831 case __NR_sched_get_priority_min: |
| (...skipping 28 matching lines...) Expand all Loading... |
| 852 case __NR_fanotify_mark: | 860 case __NR_fanotify_mark: |
| 853 return true; | 861 return true; |
| 854 default: | 862 default: |
| 855 return false; | 863 return false; |
| 856 } | 864 } |
| 857 } | 865 } |
| 858 | 866 |
| 859 bool SyscallSets::IsTimer(int sysno) { | 867 bool SyscallSets::IsTimer(int sysno) { |
| 860 switch (sysno) { | 868 switch (sysno) { |
| 861 case __NR_getitimer: | 869 case __NR_getitimer: |
| 862 #if defined(__i386__) || defined(__x86_64__) | 870 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 863 case __NR_alarm: | 871 case __NR_alarm: |
| 864 #endif | 872 #endif |
| 865 case __NR_setitimer: | 873 case __NR_setitimer: |
| 866 return true; | 874 return true; |
| 867 default: | 875 default: |
| 868 return false; | 876 return false; |
| 869 } | 877 } |
| 870 } | 878 } |
| 871 | 879 |
| 872 bool SyscallSets::IsAdvancedTimer(int sysno) { | 880 bool SyscallSets::IsAdvancedTimer(int sysno) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 908 // Various system calls that need to be researched. | 916 // Various system calls that need to be researched. |
| 909 // TODO(jln): classify this better. | 917 // TODO(jln): classify this better. |
| 910 bool SyscallSets::IsMisc(int sysno) { | 918 bool SyscallSets::IsMisc(int sysno) { |
| 911 switch (sysno) { | 919 switch (sysno) { |
| 912 case __NR_name_to_handle_at: | 920 case __NR_name_to_handle_at: |
| 913 case __NR_open_by_handle_at: | 921 case __NR_open_by_handle_at: |
| 914 case __NR_perf_event_open: | 922 case __NR_perf_event_open: |
| 915 case __NR_syncfs: | 923 case __NR_syncfs: |
| 916 case __NR_vhangup: | 924 case __NR_vhangup: |
| 917 // The system calls below are not implemented. | 925 // The system calls below are not implemented. |
| 918 #if defined(__i386__) || defined(__x86_64__) | 926 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 919 case __NR_afs_syscall: | 927 case __NR_afs_syscall: |
| 920 #endif | 928 #endif |
| 921 #if defined(__i386__) | 929 #if defined(__i386__) || defined(__mips__) |
| 922 case __NR_break: | 930 case __NR_break: |
| 923 #endif | 931 #endif |
| 924 #if defined(__i386__) || defined(__x86_64__) | 932 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 925 case __NR_getpmsg: | 933 case __NR_getpmsg: |
| 926 #endif | 934 #endif |
| 927 #if defined(__i386__) | 935 #if defined(__i386__) || defined(__mips__) |
| 928 case __NR_gtty: | 936 case __NR_gtty: |
| 929 case __NR_idle: | 937 case __NR_idle: |
| 930 case __NR_lock: | 938 case __NR_lock: |
| 931 case __NR_mpx: | 939 case __NR_mpx: |
| 932 case __NR_prof: | 940 case __NR_prof: |
| 933 case __NR_profil: | 941 case __NR_profil: |
| 934 #endif | 942 #endif |
| 935 #if defined(__i386__) || defined(__x86_64__) | 943 #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
| 936 case __NR_putpmsg: | 944 case __NR_putpmsg: |
| 937 #endif | 945 #endif |
| 938 #if defined(__x86_64__) | 946 #if defined(__x86_64__) |
| 939 case __NR_security: | 947 case __NR_security: |
| 940 #endif | 948 #endif |
| 941 #if defined(__i386__) | 949 #if defined(__i386__) || defined(__mips__) |
| 942 case __NR_stty: | 950 case __NR_stty: |
| 943 #endif | 951 #endif |
| 944 #if defined(__x86_64__) | 952 #if defined(__x86_64__) |
| 945 case __NR_tuxcall: | 953 case __NR_tuxcall: |
| 946 #endif | 954 #endif |
| 947 case __NR_vserver: | 955 case __NR_vserver: |
| 948 return true; | 956 return true; |
| 949 default: | 957 default: |
| 950 return false; | 958 return false; |
| 951 } | 959 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 970 case __ARM_NR_set_tls: | 978 case __ARM_NR_set_tls: |
| 971 case __ARM_NR_usr26: | 979 case __ARM_NR_usr26: |
| 972 case __ARM_NR_usr32: | 980 case __ARM_NR_usr32: |
| 973 return true; | 981 return true; |
| 974 default: | 982 default: |
| 975 return false; | 983 return false; |
| 976 } | 984 } |
| 977 } | 985 } |
| 978 #endif // defined(__arm__) | 986 #endif // defined(__arm__) |
| 979 | 987 |
| 988 #if defined(__mips__) |
| 989 bool SyscallSets::IsMipsPrivate(int sysno) { |
| 990 switch (sysno) { |
| 991 case __NR_cacheflush: |
| 992 case __NR_cachectl: |
| 993 return true; |
| 994 default: |
| 995 return false; |
| 996 } |
| 997 } |
| 998 |
| 999 bool SyscallSets::IsMipsMisc(int sysno) { |
| 1000 switch (sysno) { |
| 1001 case __NR_sysmips: |
| 1002 case __NR_unused150: |
| 1003 return true; |
| 1004 default: |
| 1005 return false; |
| 1006 } |
| 1007 } |
| 1008 #endif // defined(__mips__) |
| 980 } // namespace sandbox. | 1009 } // namespace sandbox. |
| OLD | NEW |