From patchwork Sat Feb 16 16:22:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Wunderlich X-Patchwork-Id: 1043444 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=public-files.de Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 441wQW19Dpz9s3l for ; Sun, 17 Feb 2019 03:22:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730824AbfBPQWj (ORCPT ); Sat, 16 Feb 2019 11:22:39 -0500 Received: from mout.gmx.net ([212.227.17.21]:40535 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728198AbfBPQWi (ORCPT ); Sat, 16 Feb 2019 11:22:38 -0500 Received: from [93.201.40.167] ([93.201.40.167]) by web-mail.gmx.net (3c-app-gmx-bs35.server.lan [172.19.170.87]) (via HTTP); Sat, 16 Feb 2019 17:22:36 +0100 MIME-Version: 1.0 Message-ID: From: "Frank Wunderlich" To: netdev@vger.kernel.org Subject: [BUG] [FIX] net: dsa: oops in br_vlan_enabled Date: Sat, 16 Feb 2019 17:22:36 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:kvwqiwdU6HUdhUxSNqGsjnT7VG3WskaF+3TzfDQKQLES7GAtO9eUkFzH+Uk4IK4v9qh86 ZADqSfVKQxt0q5CfTIWxSJzU+XZ3Y5X79QK5aEnKKUJR0dAAFU2wjHGNP5E/F6vIn0n349XM7GyF 4+RvKBGQR7TYX0vVFXff8s19evTF9iv7eN5aEbV0dhYCtP3HqJHn8BGveDTY8WMBYMwEZw4EO1qf uyz+XnxpnBnIObXnpiYaHbUXJbtDqVPGMu0ESDeP3fR3ajgixslI0pEzjDM1T5QqWE1fwyov8182 7Y= X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:qQZggQG8wrk=:6+MEOnDo4iXCHbI2pv0P5m a0BI6EZpaStW7gY6vrzjwuARfkirOyg5wQ/PQw8gEepmaJ7nDiQ4fgzWq93+8pVszIf1Nm59H h4STM84h9JJLpP6LhDkI2A4IWKjXKPRAb6R6ZCnBLNCNIii0LYKxeGArE0bpfqlL8uWivhvxN WLEJv66kYupMOEVacrm6WlLvULTr/2+XvCNMB6K0NUP+BMw0v7n2dhUBv0e+fckJeOcVPqYbf 738MN2pQdSCXKNOmCff0PmvsLFyn3RK2xdorGZVu5cU7rBO/7gQLAvaIjxV5FcwuHjsk1FgDy LfuOv2d2NO9xPRkMO0TBxlH5Ntma/1dFA6gaRcs7r5zWQd8jLw2BvVX6s1E5xp4bajqmCPgkj 55t4wH6wIQJvrjoc3U26nwo8anx8q0qwk+mEm2T6MmWqpbZz7c2QgDftVeKwB5dX1g99PZYt+ kwO1EwO3crbKDX25G4nz9lffQgywxJ+rusxAtUFePb3HYVZO7L7fFBCUI8nuFyq56hPKC0lGr +nzkbst2qyA/1CNeTFwEP9yWi9L0/QyngCAj+mtnHi99X6ALUl3E/gLHCH7hIRFoAfSu5XDs3 isJa/MhHTl0ME= Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi, i've found an oops in 4.19.23/10, seems to be fixed anyhow in 5.0 (also works in 4.14.101) root@bpi-r2:~# ip link add link lan0 name lan0.5 type vlan id 5 root@bpi-r2:~# ip addr add 192.168.5.200/24 brd 192.168.5.255 dev lan0.5 root@bpi-r2:~# ip link set dev lan0 up root@bpi-r2:~# ip link set dev lan0.5 up 12: lan0.5@lan0: mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000 link/ether 02:02:02:02:02:02 brd ff:ff:ff:ff:ff:ff inet 192.168.5.200/24 brd 192.168.5.255 scope global lan0.5 valid_lft forever preferred_lft forever root@bpi-r2:~# brctl addbr bridge_name root@bpi-r2:~# brctl addif bridge_name lan0.5 [ 352.057128] bridge_name: port 1(lan0.5) entered blocking state [ 352.063065] bridge_name: port 1(lan0.5) entered disabled state [ 352.069181] device lan0.5 entered promiscuous mode [ 352.074018] device lan0 entered promiscuous mode [ 352.078906] Unable to handle kernel NULL pointer dereference at virtual address 00000558 ... [ 352.493085] [] (br_vlan_enabled [bridge]) from [] (dsa_port_vlan_add+0x60/0xbc [dsa_core]) [ 352.503050] [] (dsa_port_vlan_add [dsa_core]) from [] (dsa_slave_port_obj_add+0x4c/0x50 [dsa_core]) [ 352.513776] [] (dsa_slave_port_obj_add [dsa_core]) from [] (__switchdev_port_obj_add+0x50/0xc4) [ 352.524138] [] (__switchdev_port_obj_add) from [] (__switchdev_port_obj_add+0xa0/0xc4) [ 352.533721] [] (__switchdev_port_obj_add) from [] (switchdev_port_obj_add_now+0x60/0x130) [ 352.543562] [] (switchdev_port_obj_add_now) from [] (switchdev_port_obj_add+0x44/0x190) [ 352.553284] [] (switchdev_port_obj_add) from [] (br_switchdev_port_vlan_add+0x60/0x7c [bridge]) [ 352.563733] [] (br_switchdev_port_vlan_add [bridge]) from [] (__vlan_add+0xb0/0x620 [bridge]) [ 352.574007] [] (__vlan_add [bridge]) from [] (nbp_vlan_add+0xc4/0x150 [bridge]) [ 352.583073] [] (nbp_vlan_add [bridge]) from [] (nbp_vlan_init+0x134/0x164 [bridge]) [ 352.592482] [] (nbp_vlan_init [bridge]) from [] (br_add_if+0x40c/0x5fc [bridge]) [ 352.601632] [] (br_add_if [bridge]) from [] (add_del_if+0x6c/0x80 [bridge]) [ 352.610351] [] (add_del_if [bridge]) from [] (br_dev_ioctl+0x7c/0x9c [bridge]) [ 352.619290] [] (br_dev_ioctl [bridge]) from [] (dev_ifsioc+0x184/0x324) [ 352.627582] [] (dev_ifsioc) from [] (dev_ioctl+0x32c/0x5cc) [ 352.634837] [] (dev_ioctl) from [] (sock_ioctl+0x3bc/0x580) since my 4.19.23 kernel is modified a bit i tried with 4.19.10 without my net modifications and it is still reproducable with steps above (create a vlan on dsa-user-port and then use it in a bridge) i fixed it with these changes: i've found in a Patch from florian/vivien: https://www.mail-archive.com/netdev@vger.kernel.org/msg281415.html Strange that 5.0-rc1 does not crash,because these 2 code-sections are unchanged: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/dsa/port.c#n255 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/bridge/br_vlan.c#n788 maybe you know why only 4.19 is affected... regards Frank diff --git a/net/dsa/port.c b/net/dsa/port.c index ed0595459df1..962887752ae8 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -255,8 +255,9 @@ int dsa_port_vlan_add(struct dsa_port *dp, if (netif_is_bridge_master(vlan->obj.orig_dev)) return -EOPNOTSUPP; - if (br_vlan_enabled(dp->bridge_dev)) - return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info); + printk(KERN_ALERT "DEBUG: Passed %s %d 0x%x \n",__FUNCTION__,__LINE__,(unsigned int)dp->bridge_dev); + if (!dp->bridge_dev || br_vlan_enabled(dp->bridge_dev)) + return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info); return 0; } @@ -273,7 +274,7 @@ int dsa_port_vlan_del(struct dsa_port *dp, if (netif_is_bridge_master(vlan->obj.orig_dev)) return -EOPNOTSUPP; - if (br_vlan_enabled(dp->bridge_dev)) + if (!dp->bridge_dev || br_vlan_enabled(dp->bridge_dev)) return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info); return 0;