[PATCH] netlink: put module reference if dump start fails

Subsystems: networking [general], the rest

STALE3101d

8 messages, 4 authors, 2018-02-22 · open the first message on its own page

[PATCH] netlink: put module reference if dump start fails

From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: 2018-02-21 03:42:10

Before, if cb->start() failed, the module reference would never be put,
because cb->cb_running is intentionally false at this point. Users are
generally annoyed by this because they can no longer unload modules that
leak references. Also, it may be possible to tediously wrap a reference
counter back to zero, especially since module.c still uses atomic_inc
instead of refcount_inc.

This patch expands the error path to simply call module_put if
cb->start() fails.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
This probably should be queued up for stable.

 net/netlink/af_netlink.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 2ad445c1d27c..07e8478068f0 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -2308,7 +2308,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
 	if (cb->start) {
 		ret = cb->start(cb);
 		if (ret)
-			goto error_unlock;
+			goto error_put;
 	}
 
 	nlk->cb_running = true;
@@ -2328,6 +2328,8 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
 	 */
 	return -EINTR;
 
+error_put:
+	module_put(control->module);
 error_unlock:
 	sock_put(sk);
 	mutex_unlock(nlk->cb_mutex);
-- 
2.16.1

Re: [PATCH] netlink: put module reference if dump start fails

From: Eric Dumazet <hidden>
Date: 2018-02-21 05:47:33

On Wed, 2018-02-21 at 04:41 +0100, Jason A. Donenfeld wrote:
Before, if cb->start() failed, the module reference would never be put,
because cb->cb_running is intentionally false at this point. Users are
generally annoyed by this because they can no longer unload modules that
leak references. Also, it may be possible to tediously wrap a reference
counter back to zero, especially since module.c still uses atomic_inc
instead of refcount_inc.

This patch expands the error path to simply call module_put if
cb->start() fails.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
This probably should be queued up for stable.
When was the bug added ? This would help a lot stable teams ...

Thanks.

Re: [PATCH] netlink: put module reference if dump start fails

From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: 2018-02-21 14:54:45

On Wed, Feb 21, 2018 at 6:47 AM, Eric Dumazet [off-list ref] wrote:
quoted
This probably should be queued up for stable.
When was the bug added ? This would help a lot stable teams ...
This needs to be backported to 4.16-rc0+, 4.15+, 4.14+, 4.13.14+, and 4.9.63+.

Re: [PATCH] netlink: put module reference if dump start fails

From: Eric Dumazet <hidden>
Date: 2018-02-21 15:12:04

On Wed, 2018-02-21 at 15:54 +0100, Jason A. Donenfeld wrote:
On Wed, Feb 21, 2018 at 6:47 AM, Eric Dumazet [off-list ref] wrote:
quoted
quoted
This probably should be queued up for stable.
When was the bug added ? This would help a lot stable teams ...
This needs to be backported to 4.16-rc0+, 4.15+, 4.14+, 4.13.14+, and 4.9.63+.
I guess I should have asked you to provide an appropriate Fixes: tag,
clearly identifying the commit that added the bug.

Fixes: 12-digit-sha1 ("patch title")

Thanks.

Re: [PATCH] netlink: put module reference if dump start fails

From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: 2018-02-21 15:41:10

Fixes: 41c87425a1ac ("netlink: do not set cb_running if dump's start() errs")

Re: [PATCH] netlink: put module reference if dump start fails

From: Bo YU <hidden>
Date: 2018-02-22 06:16:09

Hi,
On Wed, Feb 21, 2018 at 04:41:05PM +0100, Jason A. Donenfeld wrote:
Fixes: 41c87425a1ac ("netlink: do not set cb_running if dump's start() errs")
I think you Would better to resend it.

Bo,

Re: [PATCH] netlink: put module reference if dump start fails

From: David Miller <davem@davemloft.net>
Date: 2018-02-22 19:04:41

From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: Wed, 21 Feb 2018 04:41:59 +0100
Before, if cb->start() failed, the module reference would never be put,
because cb->cb_running is intentionally false at this point. Users are
generally annoyed by this because they can no longer unload modules that
leak references. Also, it may be possible to tediously wrap a reference
counter back to zero, especially since module.c still uses atomic_inc
instead of refcount_inc.

This patch expands the error path to simply call module_put if
cb->start() fails.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
This probably should be queued up for stable.
Applied and queued up for -stable.

Re: [PATCH] netlink: put module reference if dump start fails

From: "Jason A. Donenfeld" <Jason@zx2c4.com>
Date: 2018-02-22 22:28:58

Thanks!

Jason
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help