net/sched: cls_u32: fix refcount leak in the error path of u32_change()
authorDavide Caratti <dcaratti@redhat.com>
Tue, 17 Dec 2019 23:00:04 +0000 (00:00 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Dec 2019 01:53:05 +0000 (17:53 -0800)
commit275c44aa194b7159d1191817b20e076f55f0e620
treeec1b8335b428eee44534c96e0d36913d51d4d3f7
parent615f22f58029aa747b12768985e7f91cd053daa2
net/sched: cls_u32: fix refcount leak in the error path of u32_change()

when users replace cls_u32 filters with new ones having wrong parameters,
so that u32_change() fails to validate them, the kernel doesn't roll-back
correctly, and leaves semi-configured rules.

Fix this in u32_walk(), avoiding a call to the walker function on filters
that don't have a match rule connected. The side effect is, these "empty"
filters are not even dumped when present; but that shouldn't be a problem
as long as we are restoring the original behaviour, where semi-configured
filters were not even added in the error path of u32_change().

Fixes: 6676d5e416ee ("net: sched: set dedicated tcf_walker flag when tp is empty")
Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_u32.c