| 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_parameters_restrictions.h" | 5 #include "sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h" |
| 6 | 6 |
| 7 #include <errno.h> | 7 #include <errno.h> |
| 8 #include <fcntl.h> | 8 #include <fcntl.h> |
| 9 #include <fcntl.h> | 9 #include <fcntl.h> |
| 10 #include <linux/net.h> | 10 #include <linux/net.h> |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 #include "sandbox/linux/bpf_dsl/bpf_dsl.h" | 27 #include "sandbox/linux/bpf_dsl/bpf_dsl.h" |
| 28 #include "sandbox/linux/bpf_dsl/seccomp_macros.h" | 28 #include "sandbox/linux/bpf_dsl/seccomp_macros.h" |
| 29 #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" | 29 #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h" |
| 30 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" | 30 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h" |
| 31 #include "sandbox/linux/system_headers/linux_futex.h" | 31 #include "sandbox/linux/system_headers/linux_futex.h" |
| 32 #include "sandbox/linux/system_headers/linux_syscalls.h" | 32 #include "sandbox/linux/system_headers/linux_syscalls.h" |
| 33 | 33 |
| 34 // PNaCl toolchain does not provide sys/ioctl.h header. | 34 // PNaCl toolchain does not provide sys/ioctl.h header. |
| 35 #if !defined(OS_NACL_NONSFI) | 35 #if !defined(OS_NACL_NONSFI) |
| 36 #include <sys/ioctl.h> | 36 #include <sys/ioctl.h> |
| 37 #if defined(USE_OZONE) |
| 38 #include <drm.h> |
| 39 #endif |
| 37 #endif | 40 #endif |
| 38 | 41 |
| 39 #if defined(OS_ANDROID) | 42 #if defined(OS_ANDROID) |
| 40 | 43 |
| 41 #if !defined(F_DUPFD_CLOEXEC) | 44 #if !defined(F_DUPFD_CLOEXEC) |
| 42 #define F_DUPFD_CLOEXEC (F_LINUX_SPECIFIC_BASE + 6) | 45 #define F_DUPFD_CLOEXEC (F_LINUX_SPECIFIC_BASE + 6) |
| 43 #endif | 46 #endif |
| 44 | 47 |
| 45 // https://android.googlesource.com/platform/bionic/+/lollipop-release/libc/priv
ate/bionic_prctl.h | 48 // https://android.googlesource.com/platform/bionic/+/lollipop-release/libc/priv
ate/bionic_prctl.h |
| 46 #if !defined(PR_SET_VMA) | 49 #if !defined(PR_SET_VMA) |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 return Switch(option) | 145 return Switch(option) |
| 143 .CASES((PR_GET_NAME, PR_SET_NAME, PR_GET_DUMPABLE, PR_SET_DUMPABLE), | 146 .CASES((PR_GET_NAME, PR_SET_NAME, PR_GET_DUMPABLE, PR_SET_DUMPABLE), |
| 144 Allow()) | 147 Allow()) |
| 145 #if defined(OS_ANDROID) | 148 #if defined(OS_ANDROID) |
| 146 .CASES((PR_SET_VMA, PR_SET_TIMERSLACK_PID), Allow()) | 149 .CASES((PR_SET_VMA, PR_SET_TIMERSLACK_PID), Allow()) |
| 147 #endif | 150 #endif |
| 148 .Default(CrashSIGSYSPrctl()); | 151 .Default(CrashSIGSYSPrctl()); |
| 149 } | 152 } |
| 150 | 153 |
| 151 ResultExpr RestrictIoctl() { | 154 ResultExpr RestrictIoctl() { |
| 152 const Arg<int> request(1); | 155 // The type of DRM_IOCTL_XXX macro is long unsigned int. |
| 153 return Switch(request).CASES((TCGETS, FIONREAD), Allow()).Default( | 156 #if defined(USE_OZONE) |
| 154 CrashSIGSYSIoctl()); | 157 auto reference_type = DRM_IOCTL_MODE_MAP_DUMB; |
| 158 #else |
| 159 auto reference_type = TCGETS; |
| 160 #endif |
| 161 const Arg<decltype(reference_type)> request(1); |
| 162 return Switch(request) |
| 163 .CASES(((decltype(reference_type))TCGETS, FIONREAD), Allow()) |
| 164 #if defined(USE_OZONE) |
| 165 .CASES((DRM_IOCTL_GEM_CLOSE, DRM_IOCTL_MODE_DESTROY_DUMB, |
| 166 DRM_IOCTL_MODE_MAP_DUMB, DRM_IOCTL_PRIME_FD_TO_HANDLE), |
| 167 Allow()) |
| 168 #endif |
| 169 .Default(CrashSIGSYSIoctl()); |
| 155 } | 170 } |
| 156 | 171 |
| 157 ResultExpr RestrictMmapFlags() { | 172 ResultExpr RestrictMmapFlags() { |
| 158 // The flags you see are actually the allowed ones, and the variable is a | 173 // The flags you see are actually the allowed ones, and the variable is a |
| 159 // "denied" mask because of the negation operator. | 174 // "denied" mask because of the negation operator. |
| 160 // Significantly, we don't permit MAP_HUGETLB, or the newer flags such as | 175 // Significantly, we don't permit MAP_HUGETLB, or the newer flags such as |
| 161 // MAP_POPULATE. | 176 // MAP_POPULATE. |
| 162 // TODO(davidung), remove MAP_DENYWRITE with updated Tegra libraries. | 177 // TODO(davidung), remove MAP_DENYWRITE with updated Tegra libraries. |
| 163 const uint64_t kAllowedMask = MAP_SHARED | MAP_PRIVATE | MAP_ANONYMOUS | | 178 const uint64_t kAllowedMask = MAP_SHARED | MAP_PRIVATE | MAP_ANONYMOUS | |
| 164 MAP_STACK | MAP_NORESERVE | MAP_FIXED | | 179 MAP_STACK | MAP_NORESERVE | MAP_FIXED | |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 clockid == base::TimeTicks::kClockSystemTrace || | 322 clockid == base::TimeTicks::kClockSystemTrace || |
| 308 #endif | 323 #endif |
| 309 clockid == CLOCK_MONOTONIC || | 324 clockid == CLOCK_MONOTONIC || |
| 310 clockid == CLOCK_PROCESS_CPUTIME_ID || | 325 clockid == CLOCK_PROCESS_CPUTIME_ID || |
| 311 clockid == CLOCK_REALTIME || | 326 clockid == CLOCK_REALTIME || |
| 312 clockid == CLOCK_THREAD_CPUTIME_ID, | 327 clockid == CLOCK_THREAD_CPUTIME_ID, |
| 313 Allow()).Else(CrashSIGSYS()); | 328 Allow()).Else(CrashSIGSYS()); |
| 314 } | 329 } |
| 315 | 330 |
| 316 } // namespace sandbox. | 331 } // namespace sandbox. |
| OLD | NEW |