Skip to content

BUG: api: handle short writes in seccomp_export_bpf() - #505

Open
kolyshkin wants to merge 1 commit into
seccomp:mainfrom
kolyshkin:export-bpf-short-write
Open

kolyshkin wants to merge 1 commit into
seccomp:mainfrom
kolyshkin:export-bpf-short-write

Conversation

@kolyshkin

@kolyshkin kolyshkin commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

seccomp_export_bpf() issues a single write() and only checks for a negative return value. If the write is short (a non-blocking pipe with less room than the program, RLIMIT_FSIZE, or ENOSPC after some data was written), it returns success while only a part of the filter was written.

This was noticed in crun (containers/crun#2342), which writes the exported filter into a cache, so a truncated filter could be stored and used later.

The fix is to:

  • loop until the whole program is written, retrying on EINTR;
  • fail if write() returns an error or makes no progress.

A test case (which fails without the fix) is added to 11-basic-basic_errors.

seccomp_export_bpf() issues a single write() and only checks for a
negative return value, so if the write is short (e.g. a non-blocking
pipe with less room than the program, or RLIMIT_FSIZE, or ENOSPC
after some data was written) it returns success while only a part of
the filter was written.

Loop until the whole program is written, retrying on EINTR, and fail
if write() returns an error or does not make progress.

Add a test case using a non-blocking pipe which is smaller than the
filter program.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
@kolyshkin kolyshkin changed the title api: handle short writes in seccomp_export_bpf() BUG: api: handle short writes in seccomp_export_bpf() Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant