Index: sandbox/linux/services/yama.h |
diff --git a/sandbox/linux/services/yama.h b/sandbox/linux/services/yama.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7d89616e9ae2a0ff54d6d8e7738863e6fe809e48 |
--- /dev/null |
+++ b/sandbox/linux/services/yama.h |
@@ -0,0 +1,48 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef SANDBOX_LINUX_SERVICES_YAMA_H_ |
+#define SANDBOX_LINUX_SERVICES_YAMA_H_ |
+ |
+#include "base/basictypes.h" |
+ |
+namespace sandbox { |
+ |
+// Yama is a LSM kernel module which can restrict ptrace(). |
+// This class provides ways to detect if Yama is present and enabled |
+// and to restrict which processes can ptrace the current process. |
+class Yama { |
+ public: |
+ enum GlobalStatus { |
+ STATUS_DONT_KNOW = -2, |
+ STATUS_NOT_PRESENT = -1, |
+ STATUS_NOT_ENFORCING = 0, |
+ STATUS_ENFORCING = 1, |
+ }; |
+ |
+ // Restrict who can ptrace() the current process to its ancestors. |
+ // If this succeeds, then Yama is available on this kernel. |
+ // However, Yama may not be enforcing at this time. |
+ static bool RestrictPtracersToAncestors(); |
+ |
+ // Disable Yama restrictions for the current process. |
+ // This will fail if Yama is not available on this kernel. |
+ static bool DisableYamaRestrictions(); |
+ |
+ // Checks if Yama is currently in enforcing for the machine (not the current |
+ // process). This requires access to the filesystem and will use |
+ // /proc/sys/kernel/yama/ptrace_scope. |
+ static GlobalStatus GetStatus(); |
+ |
+ // Returns whether Yama is present (but it could be disabled). Returns |
+ // false if this cannot be determined. |
+ static bool IsAvailable(); |
+ |
+ private: |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(Yama); |
+}; |
+ |
+} // namespace sandbox |
+ |
+#endif // SANDBOX_LINUX_SERVICES_YAMA_H_ |