• Jason Baron's avatar
    net: sched: correct flower port blocking · 8a9093c7
    Jason Baron authored
    tc flower rules that are based on src or dst port blocking are sometimes
    ineffective due to uninitialized stack data. __skb_flow_dissect() extracts
    ports from the skb for tc flower to match against. However, the port
    dissection is not done when when the FLOW_DIS_IS_FRAGMENT bit is set in
    key_control->flags. All callers of __skb_flow_dissect(), zero-out the
    key_control field except for fl_classify() as used by the flower
    classifier. Thus, the FLOW_DIS_IS_FRAGMENT may be set on entry to
    __skb_flow_dissect(), since key_control is allocated on the stack
    and may not be initialized.
    
    Since key_basic and key_control are present for all flow keys, let's
    make sure they are initialized.
    
    Fixes: 62230715 ("flow_dissector: do not dissect l4 ports for fragments")
    Co-developed-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Acked-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: default avatarJason Baron <jbaron@akamai.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    8a9093c7
flow_dissector.h 9.19 KB