diff mbox

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

Message ID 1487952032-508-1-git-send-email-mrv@mojatatu.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Roman Mashak Feb. 24, 2017, 4 p.m. UTC
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 <mrv@mojatatu.com>
Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
---
 net/sched/act_api.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

Comments

Cong Wang Feb. 24, 2017, 5:58 p.m. UTC | #1
On Fri, Feb 24, 2017 at 8:00 AM, Roman Mashak <mrv@mojatatu.com> 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 <mrv@mojatatu.com>
> Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>

Fixes commit f97017cdefefdb6a0e19266024b0c6f9fd411eeb ?

Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
Roman Mashak Feb. 24, 2017, 10:10 p.m. UTC | #2
Cong Wang <xiyou.wangcong@gmail.com> writes:

> On Fri, Feb 24, 2017 at 8:00 AM, Roman Mashak <mrv@mojatatu.com> 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 <xiyou.wangcong@gmail.com>
David Miller Feb. 27, 2017, 2:29 a.m. UTC | #3
From: Roman Mashak <mrv@mojatatu.com>
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 <mrv@mojatatu.com>
> Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>

Applied and queued up for -stable, thanks.
diff mbox

Patch

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, &dcb, 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;
 }