diff options
Diffstat (limited to 'container/std/seccomp.go')
| -rw-r--r-- | container/std/seccomp.go | 58 |
1 files changed, 6 insertions, 52 deletions
diff --git a/container/std/seccomp.go b/container/std/seccomp.go index e808e61f..55974777 100644 --- a/container/std/seccomp.go +++ b/container/std/seccomp.go @@ -1,34 +1,20 @@ package std -import ( - "encoding/json" - "strconv" -) +import "hakurei.app/ext" type ( - // ScmpUint is equivalent to C.uint. - // - // Deprecated: This type has been renamed to Uint and will be removed in 0.4. - ScmpUint = Uint - // ScmpInt is equivalent to C.int. - // - // Deprecated: This type has been renamed to Int and will be removed in 0.4. - ScmpInt = Int - - // ScmpSyscall represents a syscall number passed to libseccomp via [NativeRule.Syscall]. - ScmpSyscall Int // ScmpErrno represents an errno value passed to libseccomp via [NativeRule.Errno]. - ScmpErrno Int + ScmpErrno = ext.Int // ScmpCompare is equivalent to enum scmp_compare; - ScmpCompare Uint + ScmpCompare = ext.Uint // ScmpDatum is equivalent to scmp_datum_t. - ScmpDatum uint64 + ScmpDatum = uint64 // ScmpArgCmp is equivalent to struct scmp_arg_cmp. ScmpArgCmp struct { // argument number, starting at 0 - Arg Uint `json:"arg"` + Arg ext.Uint `json:"arg"` // the comparison op, e.g. SCMP_CMP_* Op ScmpCompare `json:"op"` @@ -39,42 +25,10 @@ type ( // A NativeRule specifies an arch-specific action taken by seccomp under certain conditions. NativeRule struct { // Syscall is the arch-dependent syscall number to act against. - Syscall ScmpSyscall `json:"syscall"` + Syscall ext.SyscallNum `json:"syscall"` // Errno is the errno value to return when the condition is satisfied. Errno ScmpErrno `json:"errno"` // Arg is the optional struct scmp_arg_cmp passed to libseccomp. Arg *ScmpArgCmp `json:"arg,omitempty"` } ) - -// MarshalJSON resolves the name of [ScmpSyscall] and encodes it as a [json] string. -// If such a name does not exist, the syscall number is encoded instead. -func (num *ScmpSyscall) MarshalJSON() ([]byte, error) { - n := *num - for name, cur := range Syscalls() { - if cur == n { - return json.Marshal(name) - } - } - return json.Marshal(n) -} - -// SyscallNameError is returned when trying to unmarshal an invalid syscall name into [ScmpSyscall]. -type SyscallNameError string - -func (e SyscallNameError) Error() string { return "invalid syscall name " + strconv.Quote(string(e)) } - -// UnmarshalJSON looks up the syscall number corresponding to name encoded in data -// by calling [SyscallResolveName]. -func (num *ScmpSyscall) UnmarshalJSON(data []byte) error { - var name string - if err := json.Unmarshal(data, &name); err != nil { - return err - } - if n, ok := SyscallResolveName(name); !ok { - return SyscallNameError(name) - } else { - *num = n - return nil - } -} |
