• Daniel Borkmann's avatar
    cls_bpf: reset class and reuse major in da · 3a461da1
    Daniel Borkmann authored
    There are two issues with the current code. First one is that we need
    to set res->class to 0 in case we use non-default classid matching.
    
    This is important for the case where cls_bpf was initially set up with
    an optional binding to a default class with tcf_bind_filter(), where
    the underlying qdisc implements bind_tcf() that fills res->class and
    tests for it later on when doing the classification. Convention for
    these cases is that after tc_classify() was called, such qdiscs (atm,
    drr, qfq, cbq, hfsc, htb) first test class, and if 0, then they lookup
    based on classid.
    
    Second, there's a bug with da mode, where res->classid is only assigned
    a 16 bit minor, but it needs to expand to the full 32 bit major/minor
    combination instead, therefore we need to expand with the bound major.
    This is fine as classes belonging to a classful qdisc must share the
    same major.
    
    Fixes: 045efa82 ("cls_bpf: introduce integrated actions")
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3a461da1
cls_bpf.c 11.8 KB