b.a.t.m.a.n.lists.open-mesh.org archive mirror
 help / color / mirror / Atom feed
* [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26
@ 2016-10-26 15:55 Simon Wunderlich
  2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: Modify neigh_list only with rcu-list functions Simon Wunderlich
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Simon Wunderlich @ 2016-10-26 15:55 UTC (permalink / raw)
  To: davem; +Cc: netdev, b.a.t.m.a.n

Hi David,

here are some bugfix patches which we would like to have integrated
into net.

Please pull or let me know of any problem!

Thank you,
      Simon

The following changes since commit 29fbff8698fc0ac1a1d74584b258e0bf18b469f9:

  Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net (2016-10-13 21:40:23 -0700)

are available in the git repository at:

  git://git.open-mesh.org/linux-merge.git tags/batadv-net-for-davem-20161026

for you to fetch changes up to 9799c50372b23ed774791bdb87d700f1286ee8a9:

  batman-adv: fix splat on disabling an interface (2016-10-21 14:47:02 +0200)

----------------------------------------------------------------
Here are three batman-adv bugfix patches:

 - Fix RCU usage for neighbor list, by Sven Eckelmann

 - Fix BATADV_DBG_ALL loglevel to include TP Meter messages, by Sven Eckelmann

 - Fix possible splat when disabling an interface, by Linus Luessing

----------------------------------------------------------------
Linus Lüssing (1):
      batman-adv: fix splat on disabling an interface

Sven Eckelmann (2):
      batman-adv: Modify neigh_list only with rcu-list functions
      batman-adv: Add BATADV_DBG_TP_METER to BATADV_DBG_ALL

 net/batman-adv/hard-interface.c | 1 -
 net/batman-adv/log.h            | 2 +-
 net/batman-adv/originator.c     | 2 +-
 3 files changed, 2 insertions(+), 3 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: Modify neigh_list only with rcu-list functions
  2016-10-26 15:55 [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 Simon Wunderlich
@ 2016-10-26 15:55 ` Simon Wunderlich
  2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: Add BATADV_DBG_TP_METER to BATADV_DBG_ALL Simon Wunderlich
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Simon Wunderlich @ 2016-10-26 15:55 UTC (permalink / raw)
  To: davem; +Cc: netdev, b.a.t.m.a.n, Sven Eckelmann

From: Sven Eckelmann <sven.eckelmann@open-mesh.com>

The batadv_hard_iface::neigh_list is accessed via rcu based primitives.
Thus all operations done on it have to fulfill the requirements by RCU. So
using non-RCU mechanisms like hlist_add_head is not allowed because it
misses the barriers required to protect concurrent readers when accessing
the data behind the pointer.

Fixes: cef63419f7db ("batman-adv: add list of unique single hop neighbors per hard-interface")
Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
Acked-by: Linus Lüssing <linus.luessing@c0d3.blue>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
---
 net/batman-adv/originator.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c
index 5f3bfc4..7c8d160 100644
--- a/net/batman-adv/originator.c
+++ b/net/batman-adv/originator.c
@@ -544,7 +544,7 @@ batadv_hardif_neigh_create(struct batadv_hard_iface *hard_iface,
 	if (bat_priv->algo_ops->neigh.hardif_init)
 		bat_priv->algo_ops->neigh.hardif_init(hardif_neigh);
 
-	hlist_add_head(&hardif_neigh->list, &hard_iface->neigh_list);
+	hlist_add_head_rcu(&hardif_neigh->list, &hard_iface->neigh_list);
 
 out:
 	spin_unlock_bh(&hard_iface->neigh_list_lock);
-- 
2.10.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: Add BATADV_DBG_TP_METER to BATADV_DBG_ALL
  2016-10-26 15:55 [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 Simon Wunderlich
  2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: Modify neigh_list only with rcu-list functions Simon Wunderlich
@ 2016-10-26 15:55 ` Simon Wunderlich
  2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: fix splat on disabling an interface Simon Wunderlich
  2016-10-29 19:06 ` [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Simon Wunderlich @ 2016-10-26 15:55 UTC (permalink / raw)
  To: davem; +Cc: netdev, b.a.t.m.a.n

From: Sven Eckelmann <sven@narfation.org>

The BATADV_DBG_ALL has to contain the bit of BATADV_DBG_TP_METER to really
support all available debug messages.

Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
---
 net/batman-adv/log.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/batman-adv/log.h b/net/batman-adv/log.h
index e0e1a88..d2905a8 100644
--- a/net/batman-adv/log.h
+++ b/net/batman-adv/log.h
@@ -63,7 +63,7 @@ enum batadv_dbg_level {
 	BATADV_DBG_NC		= BIT(5),
 	BATADV_DBG_MCAST	= BIT(6),
 	BATADV_DBG_TP_METER	= BIT(7),
-	BATADV_DBG_ALL		= 127,
+	BATADV_DBG_ALL		= 255,
 };
 
 #ifdef CONFIG_BATMAN_ADV_DEBUG
-- 
2.10.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: fix splat on disabling an interface
  2016-10-26 15:55 [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 Simon Wunderlich
  2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: Modify neigh_list only with rcu-list functions Simon Wunderlich
  2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: Add BATADV_DBG_TP_METER to BATADV_DBG_ALL Simon Wunderlich
@ 2016-10-26 15:55 ` Simon Wunderlich
  2016-10-29 19:06 ` [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Simon Wunderlich @ 2016-10-26 15:55 UTC (permalink / raw)
  To: davem; +Cc: netdev, b.a.t.m.a.n

From: Linus Lüssing <linus.luessing@c0d3.blue>

As long as there is still a reference for a hard interface held, there might
still be a forwarding packet relying on its attributes.

Therefore avoid setting hard_iface->soft_iface to NULL when disabling a hard
interface.

This fixes the following, potential splat:

    batman_adv: bat0: Interface deactivated: eth1
    batman_adv: bat0: Removing interface: eth1
    cgroup: new mount options do not match the existing superblock, will be ignored
    batman_adv: bat0: Interface deactivated: eth3
    batman_adv: bat0: Removing interface: eth3
    ------------[ cut here ]------------
    WARNING: CPU: 3 PID: 1986 at ./net/batman-adv/bat_iv_ogm.c:549 batadv_iv_send_outstanding_bat_ogm_packet+0x145/0x643 [batman_adv]
    Modules linked in: batman_adv(O-) <...>
    CPU: 3 PID: 1986 Comm: kworker/u8:2 Tainted: G        W  O    4.6.0-rc6+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.7.5-20140531_083030-gandalf 04/01/2014
    Workqueue: bat_events batadv_iv_send_outstanding_bat_ogm_packet [batman_adv]
     0000000000000000 ffff88001d93bca0 ffffffff8126c26b 0000000000000000
     0000000000000000 ffff88001d93bcf0 ffffffff81051615 ffff88001f19f818
     000002251d93bd68 0000000000000046 ffff88001dc04a00 ffff88001becbe48
    Call Trace:
     [<ffffffff8126c26b>] dump_stack+0x67/0x90
     [<ffffffff81051615>] __warn+0xc7/0xe5
     [<ffffffff8105164b>] warn_slowpath_null+0x18/0x1a
     [<ffffffffa0356f24>] batadv_iv_send_outstanding_bat_ogm_packet+0x145/0x643 [batman_adv]
     [<ffffffff8108b01f>] ? __lock_is_held+0x32/0x54
     [<ffffffff810689a2>] process_one_work+0x2a8/0x4f5
     [<ffffffff81068856>] ? process_one_work+0x15c/0x4f5
     [<ffffffff81068df2>] worker_thread+0x1d5/0x2c0
     [<ffffffff81068c1d>] ? process_scheduled_works+0x2e/0x2e
     [<ffffffff81068c1d>] ? process_scheduled_works+0x2e/0x2e
     [<ffffffff8106dd90>] kthread+0xc0/0xc8
     [<ffffffff8144de82>] ret_from_fork+0x22/0x40
     [<ffffffff8106dcd0>] ? __init_kthread_worker+0x55/0x55
    ---[ end trace 647f9f325123dc05 ]---

What happened here is, that there was still a forw_packet (here: a BATMAN IV
OGM) in the queue of eth3 with the forw_packet->if_incoming set to eth1 and the
forw_packet->if_outgoing set to eth3.

When eth3 is to be deactivated and removed, then this thread waits for the
forw_packet queued on eth3 to finish. Because eth1 was deactivated and removed
earlier and by that had forw_packet->if_incoming->soft_iface, set to NULL, the
splat when trying to send/flush the OGM on eth3 occures.

Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
[sven@narfation.org: Reduced size of Oops message]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
---
 net/batman-adv/hard-interface.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index 08ce361..e034afb 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -652,7 +652,6 @@ void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
 			batadv_softif_destroy_sysfs(hard_iface->soft_iface);
 	}
 
-	hard_iface->soft_iface = NULL;
 	batadv_hardif_put(hard_iface);
 
 out:
-- 
2.10.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26
  2016-10-26 15:55 [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 Simon Wunderlich
                   ` (2 preceding siblings ...)
  2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: fix splat on disabling an interface Simon Wunderlich
@ 2016-10-29 19:06 ` David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2016-10-29 19:06 UTC (permalink / raw)
  To: sw; +Cc: netdev, b.a.t.m.a.n

From: Simon Wunderlich <sw@simonwunderlich.de>
Date: Wed, 26 Oct 2016 17:55:12 +0200

> here are some bugfix patches which we would like to have integrated
> into net.
> 
> Please pull or let me know of any problem!

Pulled, thanks Simon.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-10-29 19:06 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-26 15:55 [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 Simon Wunderlich
2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 1/3] batman-adv: Modify neigh_list only with rcu-list functions Simon Wunderlich
2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 2/3] batman-adv: Add BATADV_DBG_TP_METER to BATADV_DBG_ALL Simon Wunderlich
2016-10-26 15:55 ` [B.A.T.M.A.N.] [PATCH 3/3] batman-adv: fix splat on disabling an interface Simon Wunderlich
2016-10-29 19:06 ` [B.A.T.M.A.N.] [PATCH 0/3] pull request for net: batman-adv 2016-10-26 David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).