mirror of
https://github.com/containers/podman.git
synced 2025-09-27 16:54:42 +08:00
Switch to containers/common for seccomp
The seccomp/containers-golang library is not maintained any more and we should stick to containers/common. Signed-off-by: Sascha Grunert <sgrunert@suse.com>
This commit is contained in:
84
vendor/github.com/seccomp/libseccomp-golang/seccomp.go
generated
vendored
84
vendor/github.com/seccomp/libseccomp-golang/seccomp.go
generated
vendored
@ -125,7 +125,8 @@ const (
|
||||
// ActInvalid is a placeholder to ensure uninitialized ScmpAction
|
||||
// variables are invalid
|
||||
ActInvalid ScmpAction = iota
|
||||
// ActKill kills the process
|
||||
// ActKill kills the thread that violated the rule. It is the same as ActKillThread.
|
||||
// All other threads from the same thread group will continue to execute.
|
||||
ActKill ScmpAction = iota
|
||||
// ActTrap throws SIGSYS
|
||||
ActTrap ScmpAction = iota
|
||||
@ -141,6 +142,14 @@ const (
|
||||
// This action is only usable when libseccomp API level 3 or higher is
|
||||
// supported.
|
||||
ActLog ScmpAction = iota
|
||||
// ActKillThread kills the thread that violated the rule. It is the same as ActKill.
|
||||
// All other threads from the same thread group will continue to execute.
|
||||
ActKillThread ScmpAction = iota
|
||||
// ActKillProcess kills the process that violated the rule.
|
||||
// All threads in the thread group are also terminated.
|
||||
// This action is only usable when libseccomp API level 3 or higher is
|
||||
// supported.
|
||||
ActKillProcess ScmpAction = iota
|
||||
)
|
||||
|
||||
const (
|
||||
@ -290,8 +299,10 @@ func (a ScmpCompareOp) String() string {
|
||||
// String returns a string representation of a seccomp match action
|
||||
func (a ScmpAction) String() string {
|
||||
switch a & 0xFFFF {
|
||||
case ActKill:
|
||||
return "Action: Kill Process"
|
||||
case ActKill, ActKillThread:
|
||||
return "Action: Kill thread"
|
||||
case ActKillProcess:
|
||||
return "Action: Kill process"
|
||||
case ActTrap:
|
||||
return "Action: Send SIGSYS"
|
||||
case ActErrno:
|
||||
@ -334,23 +345,23 @@ func GetLibraryVersion() (major, minor, micro uint) {
|
||||
return verMajor, verMinor, verMicro
|
||||
}
|
||||
|
||||
// GetApi returns the API level supported by the system.
|
||||
// GetAPI returns the API level supported by the system.
|
||||
// Returns a positive int containing the API level, or 0 with an error if the
|
||||
// API level could not be detected due to the library being older than v2.4.0.
|
||||
// See the seccomp_api_get(3) man page for details on available API levels:
|
||||
// https://github.com/seccomp/libseccomp/blob/master/doc/man/man3/seccomp_api_get.3
|
||||
func GetApi() (uint, error) {
|
||||
return getApi()
|
||||
func GetAPI() (uint, error) {
|
||||
return getAPI()
|
||||
}
|
||||
|
||||
// SetApi forcibly sets the API level. General use of this function is strongly
|
||||
// SetAPI forcibly sets the API level. General use of this function is strongly
|
||||
// discouraged.
|
||||
// Returns an error if the API level could not be set. An error is always
|
||||
// returned if the library is older than v2.4.0
|
||||
// See the seccomp_api_get(3) man page for details on available API levels:
|
||||
// https://github.com/seccomp/libseccomp/blob/master/doc/man/man3/seccomp_api_get.3
|
||||
func SetApi(api uint) error {
|
||||
return setApi(api)
|
||||
func SetAPI(api uint) error {
|
||||
return setAPI(api)
|
||||
}
|
||||
|
||||
// Syscall functions
|
||||
@ -552,9 +563,8 @@ func (f *ScmpFilter) Reset(defaultAction ScmpAction) error {
|
||||
return errBadFilter
|
||||
}
|
||||
|
||||
retCode := C.seccomp_reset(f.filterCtx, defaultAction.toNative())
|
||||
if retCode != 0 {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
if retCode := C.seccomp_reset(f.filterCtx, defaultAction.toNative()); retCode != 0 {
|
||||
return errRc(retCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -600,11 +610,12 @@ func (f *ScmpFilter) Merge(src *ScmpFilter) error {
|
||||
}
|
||||
|
||||
// Merge the filters
|
||||
retCode := C.seccomp_merge(f.filterCtx, src.filterCtx)
|
||||
if syscall.Errno(-1*retCode) == syscall.EINVAL {
|
||||
return fmt.Errorf("filters could not be merged due to a mismatch in attributes or invalid filter")
|
||||
} else if retCode != 0 {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
if retCode := C.seccomp_merge(f.filterCtx, src.filterCtx); retCode != 0 {
|
||||
e := errRc(retCode)
|
||||
if e == syscall.EINVAL {
|
||||
return fmt.Errorf("filters could not be merged due to a mismatch in attributes or invalid filter")
|
||||
}
|
||||
return e
|
||||
}
|
||||
|
||||
src.valid = false
|
||||
@ -633,12 +644,13 @@ func (f *ScmpFilter) IsArchPresent(arch ScmpArch) (bool, error) {
|
||||
return false, errBadFilter
|
||||
}
|
||||
|
||||
retCode := C.seccomp_arch_exist(f.filterCtx, arch.toNative())
|
||||
if syscall.Errno(-1*retCode) == syscall.EEXIST {
|
||||
// -EEXIST is "arch not present"
|
||||
return false, nil
|
||||
} else if retCode != 0 {
|
||||
return false, syscall.Errno(-1 * retCode)
|
||||
if retCode := C.seccomp_arch_exist(f.filterCtx, arch.toNative()); retCode != 0 {
|
||||
e := errRc(retCode)
|
||||
if e == syscall.EEXIST {
|
||||
// -EEXIST is "arch not present"
|
||||
return false, nil
|
||||
}
|
||||
return false, e
|
||||
}
|
||||
|
||||
return true, nil
|
||||
@ -661,9 +673,10 @@ func (f *ScmpFilter) AddArch(arch ScmpArch) error {
|
||||
// Libseccomp returns -EEXIST if the specified architecture is already
|
||||
// present. Succeed silently in this case, as it's not fatal, and the
|
||||
// architecture is present already.
|
||||
retCode := C.seccomp_arch_add(f.filterCtx, arch.toNative())
|
||||
if retCode != 0 && syscall.Errno(-1*retCode) != syscall.EEXIST {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
if retCode := C.seccomp_arch_add(f.filterCtx, arch.toNative()); retCode != 0 {
|
||||
if e := errRc(retCode); e != syscall.EEXIST {
|
||||
return e
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -686,9 +699,10 @@ func (f *ScmpFilter) RemoveArch(arch ScmpArch) error {
|
||||
// Similar to AddArch, -EEXIST is returned if the arch is not present
|
||||
// Succeed silently in that case, this is not fatal and the architecture
|
||||
// is not present in the filter after RemoveArch
|
||||
retCode := C.seccomp_arch_remove(f.filterCtx, arch.toNative())
|
||||
if retCode != 0 && syscall.Errno(-1*retCode) != syscall.EEXIST {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
if retCode := C.seccomp_arch_remove(f.filterCtx, arch.toNative()); retCode != 0 {
|
||||
if e := errRc(retCode); e != syscall.EEXIST {
|
||||
return e
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -705,7 +719,7 @@ func (f *ScmpFilter) Load() error {
|
||||
}
|
||||
|
||||
if retCode := C.seccomp_load(f.filterCtx); retCode != 0 {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
return errRc(retCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -764,7 +778,7 @@ func (f *ScmpFilter) GetNoNewPrivsBit() (bool, error) {
|
||||
func (f *ScmpFilter) GetLogBit() (bool, error) {
|
||||
log, err := f.getFilterAttr(filterAttrLog)
|
||||
if err != nil {
|
||||
api, apiErr := getApi()
|
||||
api, apiErr := getAPI()
|
||||
if (apiErr != nil && api == 0) || (apiErr == nil && api < 3) {
|
||||
return false, fmt.Errorf("getting the log bit is only supported in libseccomp 2.4.0 and newer with API level 3 or higher")
|
||||
}
|
||||
@ -818,7 +832,7 @@ func (f *ScmpFilter) SetLogBit(state bool) error {
|
||||
|
||||
err := f.setFilterAttr(filterAttrLog, toSet)
|
||||
if err != nil {
|
||||
api, apiErr := getApi()
|
||||
api, apiErr := getAPI()
|
||||
if (apiErr != nil && api == 0) || (apiErr == nil && api < 3) {
|
||||
return fmt.Errorf("setting the log bit is only supported in libseccomp 2.4.0 and newer with API level 3 or higher")
|
||||
}
|
||||
@ -842,7 +856,7 @@ func (f *ScmpFilter) SetSyscallPriority(call ScmpSyscall, priority uint8) error
|
||||
|
||||
if retCode := C.seccomp_syscall_priority(f.filterCtx, C.int(call),
|
||||
C.uint8_t(priority)); retCode != 0 {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
return errRc(retCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -907,7 +921,7 @@ func (f *ScmpFilter) ExportPFC(file *os.File) error {
|
||||
}
|
||||
|
||||
if retCode := C.seccomp_export_pfc(f.filterCtx, C.int(fd)); retCode != 0 {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
return errRc(retCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
@ -928,7 +942,7 @@ func (f *ScmpFilter) ExportBPF(file *os.File) error {
|
||||
}
|
||||
|
||||
if retCode := C.seccomp_export_bpf(f.filterCtx, C.int(fd)); retCode != 0 {
|
||||
return syscall.Errno(-1 * retCode)
|
||||
return errRc(retCode)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user