• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <errno.h>
6 
7 #include "sandbox/linux/seccomp-bpf/sandbox_bpf.h"
8 #include "sandbox/linux/tests/unit_tests.h"
9 
10 namespace sandbox {
11 
12 namespace {
13 
SANDBOX_TEST(ErrorCode,ErrnoConstructor)14 SANDBOX_TEST(ErrorCode, ErrnoConstructor) {
15   ErrorCode e0;
16   SANDBOX_ASSERT(e0.err() == SECCOMP_RET_INVALID);
17 
18   ErrorCode e1(ErrorCode::ERR_ALLOWED);
19   SANDBOX_ASSERT(e1.err() == SECCOMP_RET_ALLOW);
20 
21   ErrorCode e2(EPERM);
22   SANDBOX_ASSERT(e2.err() == SECCOMP_RET_ERRNO + EPERM);
23 
24   SandboxBPF sandbox;
25   ErrorCode e3 = sandbox.Trap(NULL, NULL);
26   SANDBOX_ASSERT((e3.err() & SECCOMP_RET_ACTION)  == SECCOMP_RET_TRAP);
27 }
28 
SANDBOX_TEST(ErrorCode,Trap)29 SANDBOX_TEST(ErrorCode, Trap) {
30   SandboxBPF sandbox;
31   ErrorCode e0 = sandbox.Trap(NULL, "a");
32   ErrorCode e1 = sandbox.Trap(NULL, "b");
33   SANDBOX_ASSERT((e0.err() & SECCOMP_RET_DATA) + 1 ==
34                  (e1.err() & SECCOMP_RET_DATA));
35 
36   ErrorCode e2 = sandbox.Trap(NULL, "a");
37   SANDBOX_ASSERT((e0.err() & SECCOMP_RET_DATA) ==
38                  (e2.err() & SECCOMP_RET_DATA));
39 }
40 
SANDBOX_TEST(ErrorCode,Equals)41 SANDBOX_TEST(ErrorCode, Equals) {
42   ErrorCode e1(ErrorCode::ERR_ALLOWED);
43   ErrorCode e2(ErrorCode::ERR_ALLOWED);
44   SANDBOX_ASSERT(e1.Equals(e1));
45   SANDBOX_ASSERT(e1.Equals(e2));
46   SANDBOX_ASSERT(e2.Equals(e1));
47 
48   ErrorCode e3(EPERM);
49   SANDBOX_ASSERT(!e1.Equals(e3));
50 
51   SandboxBPF sandbox;
52   ErrorCode e4 = sandbox.Trap(NULL, "a");
53   ErrorCode e5 = sandbox.Trap(NULL, "b");
54   ErrorCode e6 = sandbox.Trap(NULL, "a");
55   SANDBOX_ASSERT(!e1.Equals(e4));
56   SANDBOX_ASSERT(!e3.Equals(e4));
57   SANDBOX_ASSERT(!e5.Equals(e4));
58   SANDBOX_ASSERT( e6.Equals(e4));
59 }
60 
SANDBOX_TEST(ErrorCode,LessThan)61 SANDBOX_TEST(ErrorCode, LessThan) {
62   ErrorCode e1(ErrorCode::ERR_ALLOWED);
63   ErrorCode e2(ErrorCode::ERR_ALLOWED);
64   SANDBOX_ASSERT(!e1.LessThan(e1));
65   SANDBOX_ASSERT(!e1.LessThan(e2));
66   SANDBOX_ASSERT(!e2.LessThan(e1));
67 
68   ErrorCode e3(EPERM);
69   SANDBOX_ASSERT(!e1.LessThan(e3));
70   SANDBOX_ASSERT( e3.LessThan(e1));
71 
72   SandboxBPF sandbox;
73   ErrorCode e4 = sandbox.Trap(NULL, "a");
74   ErrorCode e5 = sandbox.Trap(NULL, "b");
75   ErrorCode e6 = sandbox.Trap(NULL, "a");
76   SANDBOX_ASSERT(e1.LessThan(e4));
77   SANDBOX_ASSERT(e3.LessThan(e4));
78   SANDBOX_ASSERT(e4.LessThan(e5));
79   SANDBOX_ASSERT(!e4.LessThan(e6));
80   SANDBOX_ASSERT(!e6.LessThan(e4));
81 }
82 
83 }  // namespace
84 
85 }  // namespace sandbox
86