call e.g., socket(), mount() Container 4. The container wants to run the system call ioctl(fd, SECCOMP_IOCTL_NOTIF_RECV, req) 5. Read the system call arguments from /proc/$pid/mem 6. Validate the system call if OK, go to 7a-1. If NG, go to 7b 7a. Perform the system call on behalf of the process (Optional) Prepare for addfd to return fd to the process ioctl(fd, SECCOMP_IOCTL_NOTIF_ADDFD, addfd) 7b. Reject the system call 8a. Set the return value to 0 (success) (Optional) Return fd from the manager 8b. Set the return value to error code (failure) ioctl(fd, SECCOMP_IOCTL_NOTIF_SEND, req) Process 2. Execute filter 3. Return “notify” cBPF Program Seccomp 9a. Return 0 (success) (Optional) Get fd created by the manager 9b. Return error code (failure) ⚫ Install seccomp filter when the process is started. ⚫ After the process is started, handle syscalls like below Note. From “Rust-based, Secure and Lightweight Container Runtime for Embedded Systems" by Manabu Sugimoto, 2021, Cloud Native Rust Day, p. 25 (Presentation Slide), https://sched.co/iLkx