All of lore.kernel.org
 help / color / mirror / Atom feed
* [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif
@ 2018-06-01 17:24 Sven Eckelmann
  2018-06-01 17:24 ` [B.A.T.M.A.N.] [PATCH maint 2/2] batman-adv: Fix debugfs path for renamed softif Sven Eckelmann
  2018-06-03 13:16 ` [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif Sven Eckelmann
  0 siblings, 2 replies; 4+ messages in thread
From: Sven Eckelmann @ 2018-06-01 17:24 UTC (permalink / raw)
  To: b.a.t.m.a.n; +Cc: Sven Eckelmann, John Soros

batman-adv is creating special debugfs directories in the init
net_namespace for each valid hard-interface (net_device). But it is
possible to rename a net_device to a completely different name then the
original one.

It can therefore happen that a user registers a new net_device which gets
the name "wlan0" assigned by default. batman-adv is also adding a new
directory under $debugfs/batman-adv/ with the name "wlan0".

The user then decides to rename this device to "wl_pri" and registers a
different device. The kernel may now decide to use the name "wlan0" again
for this new device. batman-adv will detect it as a valid net_device and
tries to create a directory with the name "wlan0" under
$debugfs/batman-adv/. But there already exists one with this name under
this path and thus this fails. batman-adv will detect a problem and
rollback the registering of this device.

batman-adv must therefore take care of renaming the debugfs directories
for hard-interfaces whenever it detects such a net_device rename.

Fixes: 3c926a01c8e8 ("batman-adv: add debugfs structure for information per interface")
Reported-by: John Soros <sorosj@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
Cc: John Soros <sorosj@gmail.com>

You can find a backported version of the patch at 
https://git.open-mesh.org/batman-adv.git/patch/9c24af2f54e7dd138150f2e8c463a15f4fa12b39

 net/batman-adv/debugfs.c        | 20 ++++++++++++++++++++
 net/batman-adv/debugfs.h        |  6 ++++++
 net/batman-adv/hard-interface.c |  3 +++
 3 files changed, 29 insertions(+)

diff --git a/net/batman-adv/debugfs.c b/net/batman-adv/debugfs.c
index 4229b01a..7e5de7b9 100644
--- a/net/batman-adv/debugfs.c
+++ b/net/batman-adv/debugfs.c
@@ -19,6 +19,7 @@
 #include "debugfs.h"
 #include "main.h"
 
+#include <linux/dcache.h>
 #include <linux/debugfs.h>
 #include <linux/err.h>
 #include <linux/errno.h>
@@ -343,6 +344,25 @@ int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface)
 	return -ENOMEM;
 }
 
+/**
+ * batadv_debugfs_rename_hardif() - Fix debugfs path for renamed hardif
+ * @hard_iface: hard interface which was renamed
+ */
+void batadv_debugfs_rename_hardif(struct batadv_hard_iface *hard_iface)
+{
+	const char *name = hard_iface->net_dev->name;
+	struct dentry *dir;
+	struct dentry *d;
+
+	dir = hard_iface->debug_dir;
+	if (!dir)
+		return;
+
+	d = debugfs_rename(dir->d_parent, dir, dir->d_parent, name);
+	if (!d)
+		pr_err("Can't rename debugfs dir to %s\n", name);
+}
+
 /**
  * batadv_debugfs_del_hardif() - delete the base directory for a hard interface
  *  in debugfs.
diff --git a/net/batman-adv/debugfs.h b/net/batman-adv/debugfs.h
index 37b06969..8538a7a7 100644
--- a/net/batman-adv/debugfs.h
+++ b/net/batman-adv/debugfs.h
@@ -32,6 +32,7 @@ void batadv_debugfs_destroy(void);
 int batadv_debugfs_add_meshif(struct net_device *dev);
 void batadv_debugfs_del_meshif(struct net_device *dev);
 int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface);
+void batadv_debugfs_rename_hardif(struct batadv_hard_iface *hard_iface);
 void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface);
 
 #else
@@ -59,6 +60,11 @@ int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface)
 	return 0;
 }
 
+static inline
+void batadv_debugfs_rename_hardif(struct batadv_hard_iface *hard_iface)
+{
+}
+
 static inline
 void batadv_debugfs_del_hardif(struct batadv_hard_iface *hard_iface)
 {
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index c405d15b..dc2763b1 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -1051,6 +1051,9 @@ static int batadv_hard_if_event(struct notifier_block *this,
 		if (batadv_is_wifi_hardif(hard_iface))
 			hard_iface->num_bcasts = BATADV_NUM_BCASTS_WIRELESS;
 		break;
+	case NETDEV_CHANGENAME:
+		batadv_debugfs_rename_hardif(hard_iface);
+		break;
 	default:
 		break;
 	}
-- 
2.17.0


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

* [B.A.T.M.A.N.] [PATCH maint 2/2] batman-adv: Fix debugfs path for renamed softif
  2018-06-01 17:24 [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif Sven Eckelmann
@ 2018-06-01 17:24 ` Sven Eckelmann
  2018-06-03 13:16   ` Sven Eckelmann
  2018-06-03 13:16 ` [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif Sven Eckelmann
  1 sibling, 1 reply; 4+ messages in thread
From: Sven Eckelmann @ 2018-06-01 17:24 UTC (permalink / raw)
  To: b.a.t.m.a.n

batman-adv is creating special debugfs directories in the init
net_namespace for each created soft-interface (batadv net_device). But it
is possible to rename a net_device to a completely different name then the
original one.

It can therefore happen that a user registers a new batadv net_device with
the name "bat0". batman-adv is then also adding a new directory under
$debugfs/batman-adv/ with the name "wlan0".

The user then decides to rename this device to "bat1" and registers a
different batadv device with the name "bat0". batman-adv will then try to
create a directory with the name "bat0" under $debugfs/batman-adv/ again.
But there already exists one with this name under this path and thus this
fails. batman-adv will detect a problem and rollback the registering of
this device.

batman-adv must therefore take care of renaming the debugfs directories for
soft-interfaces whenever it detects such a net_device rename.

Fixes: 230202d4b530 ("batman-adv: Move device for icmp injection to debugfs")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
 net/batman-adv/debugfs.c        | 20 +++++++++++++++++++
 net/batman-adv/debugfs.h        |  5 +++++
 net/batman-adv/hard-interface.c | 34 +++++++++++++++++++++++++++------
 3 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/net/batman-adv/debugfs.c b/net/batman-adv/debugfs.c
index 7e5de7b9..87479c60 100644
--- a/net/batman-adv/debugfs.c
+++ b/net/batman-adv/debugfs.c
@@ -433,6 +433,26 @@ int batadv_debugfs_add_meshif(struct net_device *dev)
 	return -ENOMEM;
 }
 
+/**
+ * batadv_debugfs_rename_meshif() - Fix debugfs path for renamed softif
+ * @dev: net_device which was renamed
+ */
+void batadv_debugfs_rename_meshif(struct net_device *dev)
+{
+	struct batadv_priv *bat_priv = netdev_priv(dev);
+	const char *name = dev->name;
+	struct dentry *dir;
+	struct dentry *d;
+
+	dir = bat_priv->debug_dir;
+	if (!dir)
+		return;
+
+	d = debugfs_rename(dir->d_parent, dir, dir->d_parent, name);
+	if (!d)
+		pr_err("Can't rename debugfs dir to %s\n", name);
+}
+
 /**
  * batadv_debugfs_del_meshif() - Remove interface dependent debugfs entries
  * @dev: netdev struct of the soft interface
diff --git a/net/batman-adv/debugfs.h b/net/batman-adv/debugfs.h
index 8538a7a7..08a592ff 100644
--- a/net/batman-adv/debugfs.h
+++ b/net/batman-adv/debugfs.h
@@ -30,6 +30,7 @@ struct net_device;
 void batadv_debugfs_init(void);
 void batadv_debugfs_destroy(void);
 int batadv_debugfs_add_meshif(struct net_device *dev);
+void batadv_debugfs_rename_meshif(struct net_device *dev);
 void batadv_debugfs_del_meshif(struct net_device *dev);
 int batadv_debugfs_add_hardif(struct batadv_hard_iface *hard_iface);
 void batadv_debugfs_rename_hardif(struct batadv_hard_iface *hard_iface);
@@ -50,6 +51,10 @@ static inline int batadv_debugfs_add_meshif(struct net_device *dev)
 	return 0;
 }
 
+static inline void batadv_debugfs_rename_meshif(struct net_device *dev)
+{
+}
+
 static inline void batadv_debugfs_del_meshif(struct net_device *dev)
 {
 }
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index dc2763b1..2f0d42f2 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -989,6 +989,32 @@ void batadv_hardif_remove_interfaces(void)
 	rtnl_unlock();
 }
 
+/**
+ * batadv_hard_if_event_softif() - Handle events for soft interfaces
+ * @event: NETDEV_* event to handle
+ * @net_dev: net_device which generated an event
+ *
+ * Return: NOTIFY_* result
+ */
+static int batadv_hard_if_event_softif(unsigned long event,
+				       struct net_device *net_dev)
+{
+	struct batadv_priv *bat_priv;
+
+	switch (event) {
+	case NETDEV_REGISTER:
+		batadv_sysfs_add_meshif(net_dev);
+		bat_priv = netdev_priv(net_dev);
+		batadv_softif_create_vlan(bat_priv, BATADV_NO_FLAGS);
+		break;
+	case NETDEV_CHANGENAME:
+		batadv_debugfs_rename_meshif(net_dev);
+		break;
+	}
+
+	return NOTIFY_DONE;
+}
+
 static int batadv_hard_if_event(struct notifier_block *this,
 				unsigned long event, void *ptr)
 {
@@ -997,12 +1023,8 @@ static int batadv_hard_if_event(struct notifier_block *this,
 	struct batadv_hard_iface *primary_if = NULL;
 	struct batadv_priv *bat_priv;
 
-	if (batadv_softif_is_valid(net_dev) && event == NETDEV_REGISTER) {
-		batadv_sysfs_add_meshif(net_dev);
-		bat_priv = netdev_priv(net_dev);
-		batadv_softif_create_vlan(bat_priv, BATADV_NO_FLAGS);
-		return NOTIFY_DONE;
-	}
+	if (batadv_softif_is_valid(net_dev))
+		return batadv_hard_if_event_softif(event, net_dev);
 
 	hard_iface = batadv_hardif_get_by_netdev(net_dev);
 	if (!hard_iface && (event == NETDEV_REGISTER ||
-- 
2.17.0


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

* Re: [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif
  2018-06-01 17:24 [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif Sven Eckelmann
  2018-06-01 17:24 ` [B.A.T.M.A.N.] [PATCH maint 2/2] batman-adv: Fix debugfs path for renamed softif Sven Eckelmann
@ 2018-06-03 13:16 ` Sven Eckelmann
  1 sibling, 0 replies; 4+ messages in thread
From: Sven Eckelmann @ 2018-06-03 13:16 UTC (permalink / raw)
  To: b.a.t.m.a.n; +Cc: John Soros

[-- Attachment #1: Type: text/plain, Size: 1492 bytes --]

On Freitag, 1. Juni 2018 19:24:23 CEST Sven Eckelmann wrote:
> batman-adv is creating special debugfs directories in the init
> net_namespace for each valid hard-interface (net_device). But it is
> possible to rename a net_device to a completely different name then the
> original one.
> 
> It can therefore happen that a user registers a new net_device which gets
> the name "wlan0" assigned by default. batman-adv is also adding a new
> directory under $debugfs/batman-adv/ with the name "wlan0".
> 
> The user then decides to rename this device to "wl_pri" and registers a
> different device. The kernel may now decide to use the name "wlan0" again
> for this new device. batman-adv will detect it as a valid net_device and
> tries to create a directory with the name "wlan0" under
> $debugfs/batman-adv/. But there already exists one with this name under
> this path and thus this fails. batman-adv will detect a problem and
> rollback the registering of this device.
> 
> batman-adv must therefore take care of renaming the debugfs directories
> for hard-interfaces whenever it detects such a net_device rename.
> 
> Fixes: 3c926a01c8e8 ("batman-adv: add debugfs structure for information per interface")
> Reported-by: John Soros <sorosj@gmail.com>
> Signed-off-by: Sven Eckelmann <sven@narfation.org>
> ---
> Cc: John Soros <sorosj@gmail.com>

Added as 127086f503f6 [1]

Kind regards,
	Sven

[1] https://git.open-mesh.org/batman-adv.git/commit/127086f503f6495518b95455efebee33d328f335

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [B.A.T.M.A.N.] [PATCH maint 2/2] batman-adv: Fix debugfs path for renamed softif
  2018-06-01 17:24 ` [B.A.T.M.A.N.] [PATCH maint 2/2] batman-adv: Fix debugfs path for renamed softif Sven Eckelmann
@ 2018-06-03 13:16   ` Sven Eckelmann
  0 siblings, 0 replies; 4+ messages in thread
From: Sven Eckelmann @ 2018-06-03 13:16 UTC (permalink / raw)
  To: b.a.t.m.a.n

[-- Attachment #1: Type: text/plain, Size: 1308 bytes --]

On Freitag, 1. Juni 2018 19:24:24 CEST Sven Eckelmann wrote:
> batman-adv is creating special debugfs directories in the init
> net_namespace for each created soft-interface (batadv net_device). But it
> is possible to rename a net_device to a completely different name then the
> original one.
> 
> It can therefore happen that a user registers a new batadv net_device with
> the name "bat0". batman-adv is then also adding a new directory under
> $debugfs/batman-adv/ with the name "wlan0".
> 
> The user then decides to rename this device to "bat1" and registers a
> different batadv device with the name "bat0". batman-adv will then try to
> create a directory with the name "bat0" under $debugfs/batman-adv/ again.
> But there already exists one with this name under this path and thus this
> fails. batman-adv will detect a problem and rollback the registering of
> this device.
> 
> batman-adv must therefore take care of renaming the debugfs directories for
> soft-interfaces whenever it detects such a net_device rename.
> 
> Fixes: 230202d4b530 ("batman-adv: Move device for icmp injection to debugfs")
> Signed-off-by: Sven Eckelmann <sven@narfation.org>


Added as 3f2237bb191c [1]

Kind regards,
	Sven

[1] https://git.open-mesh.org/batman-adv.git/commit/3f2237bb191cd17654a4d5a5badfd6e7379c4b37

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

end of thread, other threads:[~2018-06-03 13:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-01 17:24 [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif Sven Eckelmann
2018-06-01 17:24 ` [B.A.T.M.A.N.] [PATCH maint 2/2] batman-adv: Fix debugfs path for renamed softif Sven Eckelmann
2018-06-03 13:16   ` Sven Eckelmann
2018-06-03 13:16 ` [B.A.T.M.A.N.] [PATCH maint 1/2] batman-adv: Fix debugfs path for renamed hardif Sven Eckelmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.