• Davide Caratti's avatar
    net/sched: act_skbedit: fix refcount leak when replace fails · 69e6fb18
    Davide Caratti authored
    [ Upstream commit 6191da98 ]
    
    when act_skbedit was converted to use RCU in the data plane, we added an
    error path, but we forgot to drop the action refcount in case of failure
    during a 'replace' operation:
    
     # tc actions add action skbedit ptype otherhost pass index 100
     # tc action show action skbedit
     total acts 1
    
             action order 0: skbedit  ptype otherhost pass
              index 100 ref 1 bind 0
     # tc actions replace action skbedit ptype otherhost drop index 100
     RTNETLINK answers: Cannot allocate memory
     We have an error talking to the kernel
     # tc action show action skbedit
     total acts 1
    
             action order 0: skbedit  ptype otherhost pass
              index 100 ref 2 bind 0
    
    Ensure we call tcf_idr_release(), in case 'params_new' allocation failed,
    also when the action is being replaced.
    
    Fixes: c749cdda ("net/sched: act_skbedit: don't use spinlock in the data path")
    Signed-off-by: default avatarDavide Caratti <dcaratti@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    69e6fb18
act_skbedit.c 9.34 KB