Repository navigation
doc: warn that argument comparisons don't ignore the upper 32 bits - #504
Open
ricardobranco777 wants to merge 1 commit into
Open
ricardobranco777 wants to merge 1 commit into
ricardobranco777 wants to merge 1 commit into
Conversation
The kernel's seccomp filter sees the raw 64-bit argument registers,
while syscalls with 32-bit argument types (e.g. the socket(2) domain)
ignore the upper 32 bits. A rule such as
SCMP_A0(SCMP_CMP_EQ, AF_NETLINK)
is therefore bypassed by socket(0x100000000|AF_NETLINK, ...). The
SCMP_CMP32/SCMP_A{0-5}_32 macros don't help, as they only truncate the
datum and mask values and still compare the full 64-bit argument.
Document this in seccomp_rule_add(3) and in the SCMP_CMP32 header
comment, and recommend SCMP_CMP_MASKED_EQ with a 0xffffffff mask for
arguments the kernel treats as 32-bit.
Signed-off-by: Ricardo Branco <rbranco@suse.de>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The kernel's seccomp filter sees the raw 64-bit argument registers, while syscalls with 32-bit argument types (e.g. the socket(2) domain) ignore the upper 32 bits. A rule such as
SCMP_A0(SCMP_CMP_EQ, AF_NETLINK)
is therefore bypassed by socket(0x100000000|AF_NETLINK, ...). The SCMP_CMP32/SCMP_A{0-5}_32 macros don't help, as they only truncate the datum and mask values and still compare the full 64-bit argument.
Document this in seccomp_rule_add(3) and in the SCMP_CMP32 header comment, and recommend SCMP_CMP_MASKED_EQ with a 0xffffffff mask for arguments the kernel treats as 32-bit.