Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <errno.h> | 5 #include <errno.h> |
| 6 #include <fcntl.h> | 6 #include <fcntl.h> |
| 7 #include <sys/ptrace.h> | 7 #include <sys/ptrace.h> |
| 8 #include <sys/stat.h> | 8 #include <sys/stat.h> |
| 9 #include <sys/types.h> | 9 #include <sys/types.h> |
| 10 #include <unistd.h> | 10 #include <unistd.h> |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 ASSERT_GE(Yama::STATUS_KNOWN | Yama::STATUS_PRESENT | Yama::STATUS_ENFORCING | | 65 ASSERT_GE(Yama::STATUS_KNOWN | Yama::STATUS_PRESENT | Yama::STATUS_ENFORCING | |
| 66 Yama::STATUS_STRICT_ENFORCING, | 66 Yama::STATUS_STRICT_ENFORCING, |
| 67 status1); | 67 status1); |
| 68 | 68 |
| 69 // The status should not just be a random value. | 69 // The status should not just be a random value. |
| 70 int status2 = Yama::GetStatus(); | 70 int status2 = Yama::GetStatus(); |
| 71 EXPECT_EQ(status1, status2); | 71 EXPECT_EQ(status1, status2); |
| 72 | 72 |
| 73 // This test is not running sandboxed, there is no reason to not know the | 73 // This test is not running sandboxed, there is no reason to not know the |
| 74 // status. | 74 // status. |
| 75 EXPECT_NE(0, Yama::STATUS_KNOWN & status1); | 75 if (!Yama::HasLinux32Bug()) { |
|
Jorge Lucangeli Obes
2014/07/08 04:14:28
GetStatus should still work as before.
| |
| 76 EXPECT_NE(0, Yama::STATUS_KNOWN & status1); | |
| 77 } | |
| 76 | 78 |
| 77 if (status1 & Yama::STATUS_STRICT_ENFORCING) { | 79 if (status1 & Yama::STATUS_STRICT_ENFORCING) { |
| 78 // If Yama is strictly enforcing, it is also enforcing. | 80 // If Yama is strictly enforcing, it is also enforcing. |
| 79 EXPECT_TRUE(status1 & Yama::STATUS_ENFORCING); | 81 EXPECT_TRUE(status1 & Yama::STATUS_ENFORCING); |
| 80 } | 82 } |
| 81 | 83 |
| 82 if (status1 & Yama::STATUS_ENFORCING) { | 84 if (status1 & Yama::STATUS_ENFORCING) { |
| 83 // If Yama is enforcing, Yama is present. | 85 // If Yama is enforcing, Yama is present. |
| 84 EXPECT_NE(0, status1 & Yama::STATUS_PRESENT); | 86 EXPECT_NE(0, status1 & Yama::STATUS_PRESENT); |
| 85 } | 87 } |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 105 // Attempts to enable or disable Yama restrictions. | 107 // Attempts to enable or disable Yama restrictions. |
| 106 void SetYamaRestrictions(bool enable_restriction) { | 108 void SetYamaRestrictions(bool enable_restriction) { |
| 107 if (enable_restriction) { | 109 if (enable_restriction) { |
| 108 Yama::RestrictPtracersToAncestors(); | 110 Yama::RestrictPtracersToAncestors(); |
| 109 } else { | 111 } else { |
| 110 Yama::DisableYamaRestrictions(); | 112 Yama::DisableYamaRestrictions(); |
| 111 } | 113 } |
| 112 } | 114 } |
| 113 | 115 |
| 114 TEST(Yama, RestrictPtraceWorks) { | 116 TEST(Yama, RestrictPtraceWorks) { |
| 117 if (!Yama::IsPresent()) | |
|
Jorge Lucangeli Obes
2014/07/08 04:14:28
This is where we should be if-casing 3.2 kernels.
| |
| 118 return; | |
| 119 | |
| 115 ScopedProcess process1(base::Bind(&SetYamaRestrictions, true)); | 120 ScopedProcess process1(base::Bind(&SetYamaRestrictions, true)); |
| 116 ASSERT_TRUE(process1.WaitForClosureToRun()); | 121 ASSERT_TRUE(process1.WaitForClosureToRun()); |
| 117 | 122 |
| 118 if (Yama::IsEnforcing()) { | 123 if (Yama::IsEnforcing()) { |
| 119 // A sibling process cannot ptrace process1. | 124 // A sibling process cannot ptrace process1. |
| 120 ASSERT_FALSE(CanSubProcessPtrace(process1.GetPid())); | 125 ASSERT_FALSE(CanSubProcessPtrace(process1.GetPid())); |
| 121 } | 126 } |
| 122 | 127 |
| 123 if (!(Yama::GetStatus() & Yama::STATUS_STRICT_ENFORCING)) { | 128 if (!(Yama::GetStatus() & Yama::STATUS_STRICT_ENFORCING)) { |
| 124 // However, parent can ptrace process1. | 129 // However, parent can ptrace process1. |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 143 if (Yama::IsEnforcing()) { | 148 if (Yama::IsEnforcing()) { |
| 144 // Check that process1 is protected by Yama, even though it has | 149 // Check that process1 is protected by Yama, even though it has |
| 145 // been created from a process that disabled Yama. | 150 // been created from a process that disabled Yama. |
| 146 CHECK(!CanSubProcessPtrace(process1.GetPid())); | 151 CHECK(!CanSubProcessPtrace(process1.GetPid())); |
| 147 } | 152 } |
| 148 } | 153 } |
| 149 | 154 |
| 150 } // namespace | 155 } // namespace |
| 151 | 156 |
| 152 } // namespace sandbox | 157 } // namespace sandbox |
| OLD | NEW |