• Chema Gonzalez's avatar
    net: filter: fix length calculation in BPF testsuite · e9d94504
    Chema Gonzalez authored
    The current probe_filter_length() (the function that calculates the
    length of a test BPF filter) behavior is to declare the end of the
    filter as soon as it finds {0, *, *, 0}. This is actually a valid
    insn ("ld #0"), so any filter with includes "BPF_STMT(BPF_LD | BPF_IMM, 0)"
    fails (its length is cut short).
    
    We are changing probe_filter_length() so as to start from the end, and
    declare the end of the filter as the first instruction which is not
    {0, *, *, 0}. This solution produces a simpler patch than the
    alternative of using an explicit end-of-filter mark. It is technically
    incorrect if your filter ends up with "ld #0", but that should not
    happen anyway.
    
    We also add a new test (LD_IMM_0) that includes ld #0 (does not work
    without this patch).
    Signed-off-by: default avatarChema Gonzalez <chema@google.com>
    Acked-by: default avatarDaniel Borkmann <dborkman@redhat.com>
    Acked-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e9d94504
test_bpf.c 53.7 KB