[PATCH net v2 0/3] net/sched: u32_change() fixes
Jedrzej Jagielski <[email protected]>
| Newsgroups | gmane.linux.network |
|---|---|
| Message-ID | <[email protected]> |
sorry for spam, previous series get treated as incomplete so resending
ALREADY ON NETDEV, SASHIKO RUN
This series fixes three bugs in cls_u32's u32_change() function:
Patch 1 fixes u32_replace_hw_knode() being fed the wrong flags variable.
Commit 695176bfe5de ("net_sched: refactor TC action init API") introduced
a function parameter `flags` that shadowed the local variable previously
set from TCA_U32_FLAGS. This caused tc_skip_sw() to always return false
during offload, silently ignoring skip_sw/skip_hw attributes. This fix
uncovered following 2 issues happening on u32_replace_hw_knode()
failure.
Patch 2 fixes a refcount leak of the linked hash table (n->ht_down) when
creating a new filter and u32_replace_hw_knode() fails. The error path
frees the node with kfree() but never drops the reference acquired by
u32_set_parms(), leaking the tc_u_hnode.
Patch 3 removes a spurious refcount_inc() in the update error path added
by commit e8d3d78c19be ("net: sched: cls_u32: Undo refcount decrement in
case update failed"). That commit misidentified an already-balanced
refcount (incremented by u32_init_knode, decremented by u32_set_parms)
as needing restoration on failure. The extra increment has no matching
decrement, permanently elevating the hash table's refcount.
Jedrzej Jagielski (3):
net/sched: cls_u32: feed u32_replace_hw_knode() with correct set of
flags
net/sched: cls_u32: fix linked hash table refcount leak
net/sched: cls_u32: remove erroneous refcount_inc()
net/sched/cls_u32.c | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
--
2.31.1