in seccomp_linux.go [50:82]
func LoadFilter(filter Filter) error {
insts, err := filter.Policy.Assemble()
if err != nil {
return fmt.Errorf("failed to assemble policy: %w", err)
}
raw, err := bpf.Assemble(insts)
if err != nil {
return fmt.Errorf("failed to assemble BPF instructions: %w", err)
}
sockFilter := sockFilter(raw)
program := &syscall.SockFprog{
Len: uint16(len(sockFilter)),
Filter: &sockFilter[0],
}
if filter.NoNewPrivs {
if err = SetNoNewPrivs(); err != nil {
return fmt.Errorf("failed to set no_new_privs with prctl: %w", err)
}
}
if err = seccomp(seccompSetModeFilter, filter.Flag, unsafe.Pointer(program)); err != nil {
if err == syscall.ENOSYS {
return fmt.Errorf("failed loading seccomp filter: seccomp "+
"is not supported by the kernel: %w", err)
}
return fmt.Errorf("failed loading seccomp filter: %w", err)
}
return nil
}