Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3314547imu; Sun, 11 Nov 2018 12:11:00 -0800 (PST) X-Google-Smtp-Source: AJdET5fRlozmjuot+CjQWPTCkziR6Q2le+7IkuMkeWOzhLTe/w5pAtm57OfMhjv0iqfnmQWuCTbT X-Received: by 2002:a63:c642:: with SMTP id x2-v6mr14603536pgg.16.1541967060897; Sun, 11 Nov 2018 12:11:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1541967060; cv=none; d=google.com; s=arc-20160816; b=KIWrwb4sVsaBk9JSoHaNXZIQ4wFvwRDuq1i3LLWPrJkh6Dlqd+sR7httYXsaFes0+k vc7+C57CxjzJspoGKMXvvWp45dv9QskSZDSegw9rct20P1TA8YEh5lFWC4P3rc6aJ5OU /Ylb7YCiMAGen7I5lx/GXhsg6oOdXgSuPhi0wq3AMNJTOnHDWdCqWVjDaGvVbHCXTIYq 0Tps5qT3oFY/NJHybPZTVsOMcv8F03qgg6c2QJJ6rg+Jr47iG2yCLvSdMOJzW9W7SEa7 ziOukZ4W5omdL36tAr+vNRCE3iRgKGn6TolE4W6a5DivEQNoDtIJsh9W4xQqNW7EGHjL kVuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:subject:message-id:date:cc:to :from:mime-version:content-transfer-encoding:content-disposition; bh=WaIkWAVi2YSV2Eu8bm0m2saY2+hfdO4f9JKdIxwjZuI=; b=PvAylISA22kdR13njKWqaDrfBMNINQAgWhauDmMQkg+wgYZa/RsR63YDZ7vIgRrjvT ovKdSD8b5WUk/WvO2j0MA/gLgwpWuuymmr+Ui68/cYWwZx9++nos3tYnORQk0NV4EBxy 7MMcDKxFaOscJp7M5gLW9erR9xfYPZ4tVgaPlCgFIpWjB825wbw7mhMH0K80Xqxathr7 5XW6eUtUkqcOFHBweVeH9G68w8uzb/Z099ZqrLoXPF0j4XbwEigCWZexpqPYcpTdPH9O cXCSE/1dxIhhZRe7+n4clcybMj6W1Mx61TKfSSlydv6Y+I37oVEWwi7b7SgG+HyW9X3l xHAw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i11si8054630pgd.74.2018.11.11.12.10.45; Sun, 11 Nov 2018 12:11:00 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731531AbeKLF5K (ORCPT + 99 others); Mon, 12 Nov 2018 00:57:10 -0500 Received: from shadbolt.e.decadent.org.uk ([88.96.1.126]:52180 "EHLO shadbolt.e.decadent.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731517AbeKLF5J (ORCPT ); Mon, 12 Nov 2018 00:57:09 -0500 Received: from [192.168.4.242] (helo=deadeye) by shadbolt.decadent.org.uk with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1gLvsy-0000lM-VG; Sun, 11 Nov 2018 19:59:09 +0000 Received: from ben by deadeye with local (Exim 4.91) (envelope-from ) id 1gLvsT-0001cf-SL; Sun, 11 Nov 2018 19:58:37 +0000 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 From: Ben Hutchings To: linux-kernel@vger.kernel.org, stable@vger.kernel.org CC: akpm@linux-foundation.org, "Sven Eckelmann" , "John Soros" , "Simon Wunderlich" Date: Sun, 11 Nov 2018 19:49:05 +0000 Message-ID: X-Mailer: LinuxStableQueue (scripts by bwh) Subject: [PATCH 3.16 187/366] batman-adv: Fix debugfs path for renamed hardif In-Reply-To: X-SA-Exim-Connect-IP: 192.168.4.242 X-SA-Exim-Mail-From: ben@decadent.org.uk X-SA-Exim-Scanned: No (on shadbolt.decadent.org.uk); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.16.61-rc1 review patch. If anyone has any objections, please let me know. ------------------ From: Sven Eckelmann 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 Signed-off-by: Sven Eckelmann Signed-off-by: Simon Wunderlich Signed-off-by: Ben Hutchings --- 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 @@ -17,6 +17,7 @@ #include "main.h" +#include #include #include "debugfs.h" @@ -486,6 +487,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 @@ -27,6 +27,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 @@ -55,6 +56,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 @@ -695,6 +695,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; }