Index: sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc |
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc |
index f5cbef00855d2945e7340e51444d2bba3fccaa88..56c4cb387dadc72b95fd4d8f4c5d108b6855120a 100644 |
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc |
+++ b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc |
@@ -47,11 +47,6 @@ |
#define PR_SET_VMA 0x53564d41 |
#endif |
-// https://android.googlesource.com/platform/system/core/+/lollipop-release/libcutils/sched_policy.c |
-#if !defined(PR_SET_TIMERSLACK_PID) |
-#define PR_SET_TIMERSLACK_PID 41 |
-#endif |
- |
#ifndef PR_SET_PTRACER |
#define PR_SET_PTRACER 0x59616d61 |
#endif |
@@ -158,9 +153,35 @@ ResultExpr RestrictPrctl() { |
return Switch(option) |
.CASES((PR_GET_NAME, PR_SET_NAME, PR_GET_DUMPABLE, PR_SET_DUMPABLE |
#if defined(OS_ANDROID) |
- , |
- PR_SET_VMA, PR_SET_TIMERSLACK_PID, PR_SET_PTRACER |
-#endif |
+ , PR_SET_VMA, PR_SET_PTRACER |
+ |
+// Enable PR_SET_TIMERSLACK_PID, an Android custom prctl which is used in: |
+// https://android.googlesource.com/platform/system/core/+/lollipop-release/libcutils/sched_policy.c. |
+// Depending on the Android kernel version, this prctl may have different |
+// values. Since we don't know the correct value for the running kernel, we must |
+// allow them all. |
+// |
+// The effect is: |
+// On 3.14 kernels, this allows PR_SET_TIMERSLACK_PID and 43 and 127 (invalid |
+// prctls which will return EINVAL) |
+// On 3.18 kernels, this allows PR_SET_TIMERSLACK_PID, PR_SET_THP_DISABLE, and |
+// 127 (invalid). |
+// On 4.1 kernels and up, this allows PR_SET_TIMERSLACK_PID, PR_SET_THP_DISABLE, |
+// and PR_MPX_ENABLE_MANAGEMENT. |
+ |
+// https://android.googlesource.com/kernel/common/+/android-3.14/include/uapi/linux/prctl.h |
+#define PR_SET_TIMERSLACK_PID_1 41 |
+ |
+// https://android.googlesource.com/kernel/common/+/android-3.18/include/uapi/linux/prctl.h |
+#define PR_SET_TIMERSLACK_PID_2 43 |
+ |
+// https://android.googlesource.com/kernel/common/+/android-4.1/include/uapi/linux/prctl.h and up |
+#define PR_SET_TIMERSLACK_PID_3 127 |
+ |
+ , PR_SET_TIMERSLACK_PID_1 |
+ , PR_SET_TIMERSLACK_PID_2 |
+ , PR_SET_TIMERSLACK_PID_3 |
+#endif // defined(OS_ANDROID) |
), |
Allow()) |
.Default(CrashSIGSYSPrctl()); |