diff mbox series

Fix suspicious RCU usage warning

Message ID 20200513061610.22313-1-madhuparnabhowmik10@gmail.com
State Changes Requested
Delegated to: David Miller
Headers show
Series Fix suspicious RCU usage warning | expand

Commit Message

Madhuparna Bhowmik May 13, 2020, 6:16 a.m. UTC
From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>

This patch fixes the following warning:

=============================
WARNING: suspicious RCU usage
5.7.0-rc4-next-20200507-syzkaller #0 Not tainted
-----------------------------
net/ipv6/ip6mr.c:124 RCU-list traversed in non-reader section!!

ipmr_new_table() returns an existing table, but there is no table at
init. Therefore the condition: either holding rtnl or the list is empty
is used.

Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>

Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
---
 net/ipv6/ip6mr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Stephen Rothwell May 13, 2020, 11:52 a.m. UTC | #1
Hi all,

On Wed, 13 May 2020 11:46:10 +0530 madhuparnabhowmik10@gmail.com wrote:
>
> From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> 
> This patch fixes the following warning:
> 
> =============================
> WARNING: suspicious RCU usage
> 5.7.0-rc4-next-20200507-syzkaller #0 Not tainted
> -----------------------------
> net/ipv6/ip6mr.c:124 RCU-list traversed in non-reader section!!
> 
> ipmr_new_table() returns an existing table, but there is no table at
> init. Therefore the condition: either holding rtnl or the list is empty
> is used.
> 
> Suggested-by: Jakub Kicinski <kuba@kernel.org>
> Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>

Thanks.  Added to my fixes tree from tomorrow (until it turns up
elsewhere).
David Miller May 13, 2020, 7 p.m. UTC | #2
From: madhuparnabhowmik10@gmail.com
Date: Wed, 13 May 2020 11:46:10 +0530

> From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> 
> This patch fixes the following warning:
> 
> =============================
> WARNING: suspicious RCU usage
> 5.7.0-rc4-next-20200507-syzkaller #0 Not tainted
> -----------------------------
> net/ipv6/ip6mr.c:124 RCU-list traversed in non-reader section!!
> 
> ipmr_new_table() returns an existing table, but there is no table at
> init. Therefore the condition: either holding rtnl or the list is empty
> is used.
> 
> Suggested-by: Jakub Kicinski <kuba@kernel.org>
> Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> 
> Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>

Please only provide one signoff line.

Please provide a proper Fixes: tag for this bug fix.

And finally, please make your Subject line more appropriate.  It must
first state the target tree inside of the "[PATCH]" area, the two choices
are "[PATCH net]" and "[PATCH net-next]" and it depends upon which tree
this patch is targetting.

Then your Subject line should also be more descriptive about exactly the
subsystem and area the change is being made to, for this change for
example you could use something like:

	ipv6: Fix suspicious RCU usage warning in ip6mr.

Also, obviously, there are also syzkaller tags you can add to the
commit message as well.
Madhuparna Bhowmik May 14, 2020, 7:04 a.m. UTC | #3
On Wed, May 13, 2020 at 12:00:10PM -0700, David Miller wrote:
> From: madhuparnabhowmik10@gmail.com
> Date: Wed, 13 May 2020 11:46:10 +0530
> 
> > From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> > 
> > This patch fixes the following warning:
> > 
> > =============================
> > WARNING: suspicious RCU usage
> > 5.7.0-rc4-next-20200507-syzkaller #0 Not tainted
> > -----------------------------
> > net/ipv6/ip6mr.c:124 RCU-list traversed in non-reader section!!
> > 
> > ipmr_new_table() returns an existing table, but there is no table at
> > init. Therefore the condition: either holding rtnl or the list is empty
> > is used.
> > 
> > Suggested-by: Jakub Kicinski <kuba@kernel.org>
> > Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> > 
> > Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> 
> Please only provide one signoff line.
> 
> Please provide a proper Fixes: tag for this bug fix.
> 
> And finally, please make your Subject line more appropriate.  It must
> first state the target tree inside of the "[PATCH]" area, the two choices
> are "[PATCH net]" and "[PATCH net-next]" and it depends upon which tree
> this patch is targetting.
> 
> Then your Subject line should also be more descriptive about exactly the
> subsystem and area the change is being made to, for this change for
> example you could use something like:
> 
> 	ipv6: Fix suspicious RCU usage warning in ip6mr.
> 
> Also, obviously, there are also syzkaller tags you can add to the
> commit message as well.
Sorry for this malformed patch, I have sent a patch with all these
corrections.

Thank you,
Madhuparna
David Miller May 14, 2020, 7:50 p.m. UTC | #4
From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
Date: Thu, 14 May 2020 12:34:09 +0530

> Sorry for this malformed patch, I have sent a patch with all these
> corrections.

It still needs more work, see Jakub's feedback.

Thank you.
Madhuparna Bhowmik May 16, 2020, 7:47 a.m. UTC | #5
On Thu, May 14, 2020 at 12:50:11PM -0700, David Miller wrote:
> From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com>
> Date: Thu, 14 May 2020 12:34:09 +0530
> 
> > Sorry for this malformed patch, I have sent a patch with all these
> > corrections.
> 
> It still needs more work, see Jakub's feedback.
>
Yes, I have sent the v2 of this patch.

Thank you,
Madhuparna

> Thank you.
diff mbox series

Patch

diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
index 65a54d74acc1..fbe282bb8036 100644
--- a/net/ipv6/ip6mr.c
+++ b/net/ipv6/ip6mr.c
@@ -98,7 +98,7 @@  static void ipmr_expire_process(struct timer_list *t);
 #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
 #define ip6mr_for_each_table(mrt, net) \
 	list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list, \
-				lockdep_rtnl_is_held())
+				lockdep_rtnl_is_held() ||  list_empty(&net->ipv6.mr6_tables))
 
 static struct mr_table *ip6mr_mr_table_iter(struct net *net,
 					    struct mr_table *mrt)