| // Copyright 2019 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| syntax = "proto3"; |
| |
| package sandbox2; |
| |
| import "sandboxed_api/sandbox2/mount_tree.proto"; |
| |
| enum PBViolationType { |
| VIOLATION_TYPE_UNSPECIFIED = 0; |
| DISALLOWED_SYSCALL = 1; |
| RESOURCE_LIMIT_EXCEEDED = 2; |
| SYSCALL_ARCHITECTURE_MISMATCH = 3; |
| } |
| |
| message RegisterX8664 { |
| uint64 r15 = 1; |
| uint64 r14 = 2; |
| uint64 r13 = 3; |
| uint64 r12 = 4; |
| uint64 rbp = 5; |
| uint64 rbx = 6; |
| uint64 r11 = 7; |
| uint64 r10 = 8; |
| uint64 r9 = 9; |
| uint64 r8 = 10; |
| uint64 rax = 11; |
| uint64 rcx = 12; |
| uint64 rdx = 13; |
| uint64 rsi = 14; |
| uint64 rdi = 15; |
| uint64 orig_rax = 16; |
| uint64 rip = 17; |
| uint64 cs = 18; |
| uint64 eflags = 19; |
| uint64 rsp = 20; |
| uint64 ss = 21; |
| uint64 fs_base = 22; |
| uint64 gs_base = 23; |
| uint64 ds = 24; |
| uint64 es = 25; |
| uint64 fs = 26; |
| uint64 gs = 27; |
| } |
| |
| message RegisterPowerpc64 { |
| repeated uint64 gpr = 1; |
| uint64 nip = 2; |
| uint64 msr = 3; |
| uint64 orig_gpr3 = 4; |
| uint64 ctr = 5; |
| uint64 link = 6; |
| uint64 xer = 7; |
| uint64 ccr = 8; |
| uint64 softe = 9; |
| uint64 trap = 10; |
| uint64 dar = 11; |
| uint64 dsisr = 12; |
| uint64 result = 13; |
| |
| uint64 zero0 = 14; |
| uint64 zero1 = 15; |
| uint64 zero2 = 16; |
| uint64 zero3 = 17; |
| } |
| |
| message RegisterAarch64 { |
| repeated uint64 regs = 1; |
| uint64 sp = 2; |
| uint64 pc = 3; |
| uint64 pstate = 4; |
| } |
| |
| message RegisterArm { |
| repeated uint32 regs = 1; |
| uint32 pc = 2; |
| uint32 cpsr = 3; |
| uint32 orig_x0 = 4; |
| } |
| |
| message RegisterValues { |
| // Architecture architecture = 1; |
| oneof register_values { |
| RegisterX8664 register_x86_64 = 2; |
| RegisterPowerpc64 register_powerpc64 = 3; |
| RegisterAarch64 register_aarch64 = 4; |
| RegisterArm register_arm = 5; |
| } |
| } |
| |
| message SyscallDescription { |
| int32 syscall = 1; |
| // Should we have a second one with the raw value? |
| // This would be redundant (We dump all registers) + should not be as useful |
| // for debugging as the decoded values. |
| repeated string argument = 2; |
| // Store the architecture of the desired syscall in here as well? Might be |
| // useful when the violation type was a change in syscall architecture. |
| } |
| |
| message PolicyBuilderDescription { |
| repeated int32 handled_syscalls = 1; |
| repeated string bind_mounts = 2; |
| string built_at_sloc = 3; |
| } |
| |
| message NamespaceDescription { |
| int32 clone_flags = 1; |
| // Do we want to have the mount tree in here? |
| MountTree mount_tree_mounts = 2; |
| } |
| |
| message PolicyDescription { |
| bytes user_bpf_policy = 1; |
| reserved 2 to 5; |
| // This requires additional fields. (e.g. allowed syscall numbers) |
| PolicyBuilderDescription policy_builder_description = 6; |
| |
| // namespace |
| NamespaceDescription namespace_description = 7; |
| |
| repeated int32 capabilities = 8; |
| } |
| |
| message Violation { |
| string legacy_fatal_message = 1; |
| PBViolationType violation_type = 2; |
| int32 pid = 3; |
| string prog_name = 4; |
| PolicyDescription policy = 5; |
| string stack_trace = 6; |
| SyscallDescription syscall_information = 7; |
| RegisterValues register_values = 8; |
| reserved 9; |
| string proc_maps = 10; |
| // Contains the received signal that caused the death if applicable. |
| int32 signal = 11; |
| } |