lkml.org 
[lkml]   [2020]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 66/90] batman-adv: Fix debugfs path for renamed hardif
    Date
    From: Sven Eckelmann <sven@narfation.org>

    commit 36dc621ceca1be3ec885aeade5fdafbbcc452a6d upstream.

    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: 5bc7c1eb44f2 ("batman-adv: add debugfs structure for information per interface")
    Reported-by: John Soros <sorosj@gmail.com>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/batman-adv/debugfs.c | 20 ++++++++++++++++++++
    net/batman-adv/debugfs.h | 6 ++++++
    net/batman-adv/hard-interface.c | 3 +++
    3 files changed, 29 insertions(+)

    --- a/net/batman-adv/debugfs.c
    +++ b/net/batman-adv/debugfs.c
    @@ -18,6 +18,7 @@
    #include "debugfs.h"
    #include "main.h"

    +#include <linux/dcache.h>
    #include <linux/debugfs.h>
    #include <linux/device.h>
    #include <linux/errno.h>
    @@ -340,6 +341,25 @@ out:
    }

    /**
    + * 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.
    * @hard_iface: hard interface which is deleted.
    --- a/net/batman-adv/debugfs.h
    +++ b/net/batman-adv/debugfs.h
    @@ -31,6 +31,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 bat
    }

    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)
    {
    }
    --- a/net/batman-adv/hard-interface.c
    +++ b/net/batman-adv/hard-interface.c
    @@ -812,6 +812,9 @@ static int batadv_hard_if_event(struct n
    if (hard_iface == primary_if)
    batadv_primary_if_update_addr(bat_priv, NULL);
    break;
    + case NETDEV_CHANGENAME:
    + batadv_debugfs_rename_hardif(hard_iface);
    + break;
    default:
    break;
    }

    \
     
     \ /
      Last update: 2020-03-19 14:13    [W:2.681 / U:0.496 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site