Re: [PATCH net 1/1] net sched actions: decrement module reference count after table flush.

2017-02-26 Thread David Miller
From: Roman Mashak 
Date: 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.

2017-02-24 Thread Roman Mashak
Cong Wang  writes:

> 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.

2017-02-24 Thread Cong Wang
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.
>
> 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.

2017-02-24 Thread Roman Mashak
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 
---
 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