Index: sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc |
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc |
index 7daacfda5745498e8b22fa765f878fcf823d0c5c..40cb5ad8393569abdfbdbcf22154342016709cc6 100644 |
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc |
+++ b/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc |
@@ -29,7 +29,7 @@ bool SyscallSets::IsAllowedGettime(int sysno) { |
switch (sysno) { |
case __NR_clock_gettime: |
case __NR_gettimeofday: |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_time: |
#endif |
return true; |
@@ -38,11 +38,11 @@ bool SyscallSets::IsAllowedGettime(int sysno) { |
case __NR_clock_getres: // Could be allowed. |
case __NR_clock_nanosleep: // Could be allowed. |
case __NR_clock_settime: // Privileged. |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_ftime: // Obsolete. |
#endif |
case __NR_settimeofday: // Privileged. |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_stime: |
#endif |
default: |
@@ -89,7 +89,7 @@ bool SyscallSets::IsFileSystem(int sysno) { |
case __NR_fchownat: // Should be called chownat ? |
#if defined(__x86_64__) |
case __NR_newfstatat: // fstatat(). EPERM not a valid errno. |
-#elif defined(__i386__) || defined(__arm__) |
+#elif defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_fstatat64: |
#endif |
case __NR_futimesat: // Should be called utimesat ? |
@@ -104,7 +104,7 @@ bool SyscallSets::IsFileSystem(int sysno) { |
#if defined(__i386__) |
case __NR_oldlstat: |
#endif |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_lstat64: |
#endif |
case __NR_mkdir: |
@@ -122,24 +122,24 @@ bool SyscallSets::IsFileSystem(int sysno) { |
#if defined(__i386__) |
case __NR_oldstat: |
#endif |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_stat64: |
#endif |
case __NR_statfs: // EPERM not a valid errno. |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_statfs64: |
#endif |
case __NR_symlink: |
case __NR_symlinkat: |
case __NR_truncate: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_truncate64: |
#endif |
case __NR_unlink: |
case __NR_unlinkat: |
case __NR_uselib: // Neither EPERM, nor ENOENT are valid errno. |
case __NR_ustat: // Same as above. Deprecated. |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_utime: |
#endif |
case __NR_utimensat: // New. |
@@ -153,12 +153,12 @@ bool SyscallSets::IsFileSystem(int sysno) { |
bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) { |
switch (sysno) { |
case __NR_fstat: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_fstat64: |
#endif |
return true; |
// TODO(jln): these should be denied gracefully as well (moved below). |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_fadvise64: // EPERM not a valid errno. |
#endif |
#if defined(__i386__) |
@@ -170,14 +170,14 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) { |
case __NR_fdatasync: // EPERM not a valid errno. |
case __NR_flock: // EPERM not a valid errno. |
case __NR_fstatfs: // Give information about the whole filesystem. |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_fstatfs64: |
#endif |
case __NR_fsync: // EPERM not a valid errno. |
#if defined(__i386__) |
case __NR_oldfstat: |
#endif |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_sync_file_range: // EPERM not a valid errno. |
#elif defined(__arm__) |
case __NR_arm_sync_file_range: // EPERM not a valid errno. |
@@ -196,11 +196,13 @@ bool SyscallSets::IsDeniedFileSystemAccessViaFd(int sysno) { |
case __NR_ftruncate: |
#if defined(__i386__) || defined(__arm__) |
case __NR_fchown32: |
+#endif |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_ftruncate64: |
#endif |
case __NR_getdents: // EPERM not a valid errno. |
case __NR_getdents64: // EPERM not a valid errno. |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_readdir: |
#endif |
return true; |
@@ -241,7 +243,7 @@ bool SyscallSets::IsGetSimpleId(int sysno) { |
bool SyscallSets::IsProcessPrivilegeChange(int sysno) { |
switch (sysno) { |
case __NR_capset: |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_ioperm: // Intel privilege. |
case __NR_iopl: // Intel privilege. |
#endif |
@@ -288,7 +290,7 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) { |
case __NR_rt_sigaction: |
case __NR_rt_sigprocmask: |
case __NR_rt_sigreturn: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_sigaction: |
case __NR_sigprocmask: |
case __NR_sigreturn: |
@@ -301,11 +303,11 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) { |
case __NR_rt_tgsigqueueinfo: |
case __NR_signalfd: |
case __NR_signalfd4: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_sigpending: |
case __NR_sigsuspend: |
#endif |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_signal: |
case __NR_sgetmask: // Obsolete. |
case __NR_ssetmask: |
@@ -321,12 +323,12 @@ bool SyscallSets::IsAllowedOperationOnFd(int sysno) { |
case __NR_dup: |
case __NR_dup2: |
case __NR_dup3: |
-#if defined(__x86_64__) || defined(__arm__) |
+#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
case __NR_shutdown: |
#endif |
return true; |
case __NR_fcntl: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_fcntl64: |
#endif |
default: |
@@ -362,11 +364,15 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) { |
case __NR_fork: |
#if defined(__i386__) || defined(__x86_64__) |
case __NR_get_thread_area: |
+#endif |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_set_thread_area: |
#endif |
case __NR_set_tid_address: |
case __NR_unshare: |
+#if !defined(__mips__) |
case __NR_vfork: |
+#endif |
default: |
return false; |
} |
@@ -409,7 +415,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) { |
case __NR_pipe2: |
return true; |
default: |
-#if defined(__x86_64__) || defined(__arm__) |
+#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
case __NR_socketpair: // We will want to inspect its argument. |
#endif |
return false; |
@@ -418,7 +424,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) { |
bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) { |
switch (sysno) { |
-#if defined(__x86_64__) || defined(__arm__) |
+#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
case __NR_accept: |
case __NR_accept4: |
case __NR_bind: |
@@ -432,7 +438,7 @@ bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) { |
} |
} |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
// Big multiplexing system call for sockets. |
bool SyscallSets::IsSocketCall(int sysno) { |
switch (sysno) { |
@@ -444,7 +450,7 @@ bool SyscallSets::IsSocketCall(int sysno) { |
} |
#endif |
-#if defined(__x86_64__) || defined(__arm__) |
+#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
bool SyscallSets::IsNetworkSocketInformation(int sysno) { |
switch (sysno) { |
case __NR_getpeername: |
@@ -468,13 +474,13 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { |
case __NR_madvise: |
case __NR_mincore: |
case __NR_mlockall: |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_mmap: |
#endif |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_mmap2: |
#endif |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_modify_ldt: |
#endif |
case __NR_mprotect: |
@@ -483,8 +489,10 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { |
case __NR_munlockall: |
case __NR_readahead: |
case __NR_remap_file_pages: |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_vm86: |
+#endif |
+#if defined(__i386__) |
case __NR_vm86old: |
#endif |
default: |
@@ -495,7 +503,7 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { |
bool SyscallSets::IsAllowedGeneralIo(int sysno) { |
switch (sysno) { |
case __NR_lseek: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR__llseek: |
#endif |
case __NR_poll: |
@@ -503,23 +511,23 @@ bool SyscallSets::IsAllowedGeneralIo(int sysno) { |
case __NR_pselect6: |
case __NR_read: |
case __NR_readv: |
-#if defined(__arm__) |
+#if defined(__arm__) || defined(__mips__) |
case __NR_recv: |
#endif |
-#if defined(__x86_64__) || defined(__arm__) |
+#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
case __NR_recvfrom: // Could specify source. |
case __NR_recvmsg: // Could specify source. |
#endif |
#if defined(__i386__) || defined(__x86_64__) |
case __NR_select: |
#endif |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR__newselect: |
#endif |
#if defined(__arm__) |
case __NR_send: |
#endif |
-#if defined(__x86_64__) || defined(__arm__) |
+#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) |
case __NR_sendmsg: // Could specify destination. |
case __NR_sendto: // Could specify destination. |
#endif |
@@ -533,7 +541,7 @@ bool SyscallSets::IsAllowedGeneralIo(int sysno) { |
case __NR_pwritev: |
case __NR_recvmmsg: // Could specify source. |
case __NR_sendfile: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_sendfile64: |
#endif |
case __NR_sendmmsg: // Could specify destination. |
@@ -564,7 +572,7 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) { |
case __NR_nanosleep: |
return true; |
case __NR_getpriority: |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_nice: |
#endif |
case __NR_setpriority: |
@@ -575,7 +583,7 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) { |
bool SyscallSets::IsAdminOperation(int sysno) { |
switch (sysno) { |
-#if defined(__i386__) || defined(__arm__) |
+#if defined(__i386__) || defined(__arm__) || defined(__mips__) |
case __NR_bdflush: |
#endif |
case __NR_kexec_load: |
@@ -591,7 +599,7 @@ bool SyscallSets::IsAdminOperation(int sysno) { |
bool SyscallSets::IsKernelModule(int sysno) { |
switch (sysno) { |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_create_module: |
case __NR_get_kernel_syms: // Should ENOSYS. |
case __NR_query_module: |
@@ -622,7 +630,7 @@ bool SyscallSets::IsFsControl(int sysno) { |
case __NR_quotactl: |
case __NR_swapoff: |
case __NR_swapon: |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_umount: |
#endif |
case __NR_umount2: |
@@ -637,7 +645,7 @@ bool SyscallSets::IsNuma(int sysno) { |
case __NR_get_mempolicy: |
case __NR_getcpu: |
case __NR_mbind: |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_migrate_pages: |
#endif |
case __NR_move_pages: |
@@ -665,13 +673,13 @@ bool SyscallSets::IsMessageQueue(int sysno) { |
bool SyscallSets::IsGlobalProcessEnvironment(int sysno) { |
switch (sysno) { |
case __NR_acct: // Privileged. |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_getrlimit: |
#endif |
#if defined(__i386__) || defined(__arm__) |
case __NR_ugetrlimit: |
#endif |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_ulimit: |
#endif |
case __NR_getrusage: |
@@ -690,7 +698,7 @@ bool SyscallSets::IsDebug(int sysno) { |
case __NR_ptrace: |
case __NR_process_vm_readv: |
case __NR_process_vm_writev: |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_kcmp: |
#endif |
return true; |
@@ -793,7 +801,7 @@ bool SyscallSets::IsSystemVMessageQueue(int sysno) { |
} |
#endif |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
// Big system V multiplexing system call. |
bool SyscallSets::IsSystemVIpc(int sysno) { |
switch (sysno) { |
@@ -809,7 +817,7 @@ bool SyscallSets::IsAnySystemV(int sysno) { |
#if defined(__x86_64__) || defined(__arm__) |
return IsSystemVMessageQueue(sysno) || IsSystemVSemaphores(sysno) || |
IsSystemVSharedMemory(sysno); |
-#elif defined(__i386__) |
+#elif defined(__i386__) || defined(__mips__) |
return IsSystemVIpc(sysno); |
#endif |
} |
@@ -858,7 +866,7 @@ bool SyscallSets::IsFaNotify(int sysno) { |
bool SyscallSets::IsTimer(int sysno) { |
switch (sysno) { |
case __NR_getitimer: |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_alarm: |
#endif |
case __NR_setitimer: |
@@ -914,16 +922,16 @@ bool SyscallSets::IsMisc(int sysno) { |
case __NR_syncfs: |
case __NR_vhangup: |
// The system calls below are not implemented. |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_afs_syscall: |
#endif |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_break: |
#endif |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_getpmsg: |
#endif |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_gtty: |
case __NR_idle: |
case __NR_lock: |
@@ -931,13 +939,13 @@ bool SyscallSets::IsMisc(int sysno) { |
case __NR_prof: |
case __NR_profil: |
#endif |
-#if defined(__i386__) || defined(__x86_64__) |
+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) |
case __NR_putpmsg: |
#endif |
#if defined(__x86_64__) |
case __NR_security: |
#endif |
-#if defined(__i386__) |
+#if defined(__i386__) || defined(__mips__) |
case __NR_stty: |
#endif |
#if defined(__x86_64__) |
@@ -976,4 +984,25 @@ bool SyscallSets::IsArmPrivate(int sysno) { |
} |
#endif // defined(__arm__) |
+#if defined(__mips__) |
+bool SyscallSets::IsMipsSpecific(int sysno) { |
+ switch (sysno) { |
+ case __NR_cacheflush: |
+ case __NR_cachectl: |
+ return true; |
+ default: |
+ return false; |
+ } |
+} |
+ |
+bool SyscallSets::IsMipsMisc(int sysno) { |
+ switch (sysno) { |
+ case __NR_sysmips: |
+ case __NR_unused150: |
+ return true; |
+ default: |
+ return false; |
+ } |
+} |
+#endif // defined(__mips__) |
} // namespace sandbox. |