Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(704)

Unified Diff: components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc

Issue 286363003: Non-SFI NaCl: Disallow fancy clock IDs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix test name Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc
diff --git a/components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc b/components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc
index febbcd927057d65610c5624915b6fb740e79af44..1a41e887c3d7dc7e19b20818123ba67af1847756 100644
--- a/components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc
+++ b/components/nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc
@@ -22,6 +22,7 @@
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <time.h>
#include <unistd.h>
#include "base/bind.h"
@@ -391,6 +392,59 @@ BPF_TEST_C(NaClNonSfiSandboxTest,
BPF_ASSERT_EQ(ENOMEM, errno);
}
+void CheckClock(clockid_t clockid) {
+ struct timespec ts;
+ ts.tv_sec = ts.tv_nsec = -1;
+ BPF_ASSERT_EQ(0, clock_gettime(clockid, &ts));
+ BPF_ASSERT_LE(0, ts.tv_sec);
+ BPF_ASSERT_LE(0, ts.tv_nsec);
+}
+
+BPF_TEST_C(NaClNonSfiSandboxTest,
+ clock_gettime_allowed,
+ nacl::nonsfi::NaClNonSfiBPFSandboxPolicy) {
+ CheckClock(CLOCK_MONOTONIC);
+ CheckClock(CLOCK_PROCESS_CPUTIME_ID);
+ CheckClock(CLOCK_REALTIME);
+ CheckClock(CLOCK_THREAD_CPUTIME_ID);
+}
+
+BPF_DEATH_TEST_C(NaClNonSfiSandboxTest,
+ clock_gettime_crash_monotonic_raw,
+ DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+ nacl::nonsfi::NaClNonSfiBPFSandboxPolicy) {
+ struct timespec ts;
+ clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
+}
+
+// We need this test delegate so we can compute the clock ID for the init
Mark Seaborn 2014/05/20 21:21:30 You might also test this by constructing the clock
mdempsky 2014/05/20 23:02:51 Done. I found that LSS has the same MAKE_PROCESS_
+// process's CPU clock before enabling the seccomp-BPF policy.
+class ClockGetTimeCrashCPUClockDelegate : public sandbox::BPFTesterDelegate {
+ public:
+ ClockGetTimeCrashCPUClockDelegate() {
+ const pid_t kInitPID = 1;
+ CHECK_EQ(0, clock_getcpuclockid(kInitPID, &init_clock_id_));
+ }
+
+ virtual scoped_ptr<sandbox::SandboxBPFPolicy> GetSandboxBPFPolicy() OVERRIDE {
+ return scoped_ptr<sandbox::SandboxBPFPolicy>(
+ new nacl::nonsfi::NaClNonSfiBPFSandboxPolicy);
+ }
+
+ virtual void RunTestFunction() OVERRIDE {
+ struct timespec ts;
+ clock_gettime(init_clock_id_, &ts);
+ }
+
+ private:
+ clockid_t init_clock_id_;
+};
+
+BPF_DEATH_TEST_D(NaClNonSfiSandboxTest,
+ clock_gettime_crash_cpu_clock,
+ DEATH_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+ ClockGetTimeCrashCPUClockDelegate);
+
// The following test cases check if syscalls return EPERM regardless
// of arguments.
#define RESTRICT_SYSCALL_EPERM_TEST(name) \

Powered by Google App Engine
This is Rietveld 408576698