Skip to content
  • Jakub Kicinski's avatar
    cls_bpf: don't decrement net's refcount when offload fails · 25415cec
    Jakub Kicinski authored
    When cls_bpf offload was added it seemed like a good idea to
    call cls_bpf_delete_prog() instead of extending the error
    handling path, since the software state is fully initialized
    at that point.  This handling of errors without jumping to
    the end of the function is error prone, as proven by later
    commit missing that extra call to __cls_bpf_delete_prog().
    
    __cls_bpf_delete_prog() is now expected to be invoked with
    a reference on exts->net or the field zeroed out.  The call
    on the offload's error patch does not fullfil this requirement,
    leading to each error stealing a reference on net namespace.
    
    Create a function undoing what cls_bpf_set_parms() did and
    use it from __cls_bpf_delete_prog() and the error path.
    
    Fixes: aae2c35e
    
     ("cls_bpf: use tcf_exts_get_net() before call_rcu()")
    Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
    Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
    Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Ack...
    25415cec