Re: [PATCH net 1/1] net sched actions: decrement module reference count after table flush.
From: Roman MashakDate: Fri, 24 Feb 2017 11:00:32 -0500 > When tc actions are loaded as a module and no actions have been installed, > flushing them would result in actions removed from the memory, but modules > reference count not being decremented, so that the modules would not be > unloaded. ... > Signed-off-by: Roman Mashak > Signed-off-by: Jamal Hadi Salim Applied and queued up for -stable, thanks.
Re: [PATCH net 1/1] net sched actions: decrement module reference count after table flush.
Cong Wangwrites: > On Fri, Feb 24, 2017 at 8:00 AM, Roman Mashak wrote: >> When tc actions are loaded as a module and no actions have been installed, >> flushing them would result in actions removed from the memory, but modules >> reference count not being decremented, so that the modules would not be >> unloaded. [...] > Fixes commit f97017cdefefdb6a0e19266024b0c6f9fd411eeb ? Yes, exactly. > Acked-by: Cong Wang -- Roman Mashak
Re: [PATCH net 1/1] net sched actions: decrement module reference count after table flush.
On Fri, Feb 24, 2017 at 8:00 AM, Roman Mashakwrote: > When tc actions are loaded as a module and no actions have been installed, > flushing them would result in actions removed from the memory, but modules > reference count not being decremented, so that the modules would not be > unloaded. > > Following is example with GACT action: > > % sudo modprobe act_gact > % lsmod > Module Size Used by > act_gact 16384 0 > % > % sudo tc actions ls action gact > % > % sudo tc actions flush action gact > % lsmod > Module Size Used by > act_gact 16384 1 > % sudo tc actions flush action gact > % lsmod > Module Size Used by > act_gact 16384 2 > % sudo rmmod act_gact > rmmod: ERROR: Module act_gact is in use > > > After the fix: > % lsmod > Module Size Used by > act_gact 16384 0 > % > % sudo tc actions add action pass index 1 > % sudo tc actions add action pass index 2 > % sudo tc actions add action pass index 3 > % lsmod > Module Size Used by > act_gact 16384 3 > % > % sudo tc actions flush action gact > % lsmod > Module Size Used by > act_gact 16384 0 > % > % sudo tc actions flush action gact > % lsmod > Module Size Used by > act_gact 16384 0 > % sudo rmmod act_gact > % lsmod > Module Size Used by > % > > Signed-off-by: Roman Mashak > Signed-off-by: Jamal Hadi Salim Fixes commit f97017cdefefdb6a0e19266024b0c6f9fd411eeb ? Acked-by: Cong Wang
[PATCH net 1/1] net sched actions: decrement module reference count after table flush.
When tc actions are loaded as a module and no actions have been installed, flushing them would result in actions removed from the memory, but modules reference count not being decremented, so that the modules would not be unloaded. Following is example with GACT action: % sudo modprobe act_gact % lsmod Module Size Used by act_gact 16384 0 % % sudo tc actions ls action gact % % sudo tc actions flush action gact % lsmod Module Size Used by act_gact 16384 1 % sudo tc actions flush action gact % lsmod Module Size Used by act_gact 16384 2 % sudo rmmod act_gact rmmod: ERROR: Module act_gact is in use After the fix: % lsmod Module Size Used by act_gact 16384 0 % % sudo tc actions add action pass index 1 % sudo tc actions add action pass index 2 % sudo tc actions add action pass index 3 % lsmod Module Size Used by act_gact 16384 3 % % sudo tc actions flush action gact % lsmod Module Size Used by act_gact 16384 0 % % sudo tc actions flush action gact % lsmod Module Size Used by act_gact 16384 0 % sudo rmmod act_gact % lsmod Module Size Used by % Signed-off-by: Roman MashakSigned-off-by: Jamal Hadi Salim --- net/sched/act_api.c | 5 + 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/net/sched/act_api.c b/net/sched/act_api.c index f219ff3..dfe64f8 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c @@ -859,10 +859,8 @@ static int tca_action_flush(struct net *net, struct nlattr *nla, goto out_module_put; err = ops->walk(net, skb, , RTM_DELACTION, ops); - if (err < 0) + if (err <= 0) goto out_module_put; - if (err == 0) - goto noflush_out; nla_nest_end(skb, nest); @@ -879,7 +877,6 @@ static int tca_action_flush(struct net *net, struct nlattr *nla, out_module_put: module_put(ops->owner); err_out: -noflush_out: kfree_skb(skb); return err; } -- 1.9.1