flow_dissector: do not dissect l4 ports for fragments
Subsystems (2)
PATCH 1/1 flow_dissector: do not dissect l4 ports for fragments
From: 배석진 <[email protected]>
Only first fragment has the sport/dport information, not the following ones.
If we want consistent hash for all fragments, we need to ignore ports even for first fragment.
This bug is visible for IPv6 traffic, if incoming fragments do not have a flow label, since skb_get_hash() will give different results for first fragment and following ones.
It is also visible if any routing rule wants dissection and sport or dport.
See commit 5e5d6fed3741 ("ipv6: route: dissect flow in input path if fib rules need it") for details.
[edumazet] rewrote the changelog completely.
--- net/core/flow_dissector.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/core/flow_dissector.c +2 -2
@@ -1166,8 +1166,8 @@ bool __skb_flow_dissect(const struct sk_buff *skb,break ; } -if (dissector_uses_key (flow_dissector, -FLOW_DISSECTOR_KEY_PORTS )) { +if (dissector_uses_key (flow_dissector,FLOW_DISSECTOR_KEY_PORTS ) && + !(key_control->flags &FLOW_DIS_IS_FRAGMENT )) { key_ports =skb_flow_dissector_target (flow_dissector,FLOW_DISSECTOR_KEY_PORTS , target_container);
Signature · 1 line
2.19.1.930.g4563a0d9d0-goog
David Miller
maintainerFrom: Eric Dumazet <[email protected]>
Date: Fri, 9 Nov 2018 16:53:06 -0800
Quoted 15 lines
From: 배석진 <[email protected]>
Only first fragment has the sport/dport information, not the following ones.
If we want consistent hash for all fragments, we need to ignore ports even for first fragment.
This bug is visible for IPv6 traffic, if incoming fragments do not have a flow label, since
skb_get_hash()will give different results for first fragment and following ones.It is also visible if any routing rule wants dissection and sport or dport.
Quoted 8 lines
See commit
5e5d6fed3741("ipv6: route: dissect flow in input path if fib rules need it") for details.[edumazet] rewrote the changelog completely.
Fixes 06635a35d13d ("flow_dissect: use programable dissector in skb_flow_dissect and friends")Signed-off-by 배석진 <[email protected]>Signed-off-by Eric Dumazet <[email protected]>
Applied and queued up for -stable.