mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
netfilter: xt_dccp: handle reserved options as single-byte
The DCCP UAPI defines option numbers 3 through 31 as reserved. Like Padding and Mandatory, these options occupy one byte. dccp_find_option() only treats values below 2 as single-byte and interprets the byte after a reserved option as a TLV length. This can skip a later option and invert an XT_DCCP_OPTION rule result. A local production-hook fixture installed the same DROP rule for IPv4 and IPv6. In three fresh boots per kernel, a target-only packet was dropped 20/20 times, while adding reserved option 3 before the same target let 20/20 packets reach the protected receiver. The fixed kernel dropped all trigger packets in three fresh boots and preserved the normal controls. Treat every option up to DCCPO_MAX_RESERVED as single-byte, matching the protocol definition. Triggering requires CONFIG_NETFILTER_XTABLES_LEGACY, CONFIG_NETFILTER_XT_MATCH_DCCP, an option-based rule, and remote protocol-33 reachability. The touched source is unchanged at0c2669a9f4, where the patch applies and builds cleanly. Fixes:1d3de414eb("[NETFILTER]: New iptables DCCP protocol header match") Assisted-by: LLM Signed-off-by: Sung Byeongchan <tjdqudcks0424@naver.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
86d47d4c84
commit
2edda78aa4
|
|
@ -62,7 +62,7 @@ dccp_find_option(u_int8_t option,
|
|||
return true;
|
||||
}
|
||||
|
||||
if (op[i] < 2 || i == optlen - 1)
|
||||
if (op[i] <= DCCPO_MAX_RESERVED || i == optlen - 1)
|
||||
i++;
|
||||
else
|
||||
i += op[i + 1] ? : 1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user