• S
    net: qualcomm: rmnet: Fix crash on real dev unregistration · b37f78f2
    Subash Abhinov Kasiviswanathan 提交于
    With CONFIG_DEBUG_PREEMPT enabled, a crash with the following call
    stack was observed when removing a real dev which had rmnet devices
    attached to it.
    To fix this, remove the netdev_upper link APIs and instead use the
    existing information in rmnet_port and rmnet_priv to get the
    association between real and rmnet devs.
    
    BUG: sleeping function called from invalid context
    in_atomic(): 0, irqs_disabled(): 0, pid: 5762, name: ip
    Preemption disabled at:
    [<ffffff9d49043564>] debug_object_active_state+0xa4/0x16c
    Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
    Modules linked in:
    PC is at ___might_sleep+0x13c/0x180
    LR is at ___might_sleep+0x17c/0x180
    [<ffffff9d48ce0924>] ___might_sleep+0x13c/0x180
    [<ffffff9d48ce09c0>] __might_sleep+0x58/0x8c
    [<ffffff9d49d6253c>] mutex_lock+0x2c/0x48
    [<ffffff9d48ed4840>] kernfs_remove_by_name_ns+0x48/0xa8
    [<ffffff9d48ed6ec8>] sysfs_remove_link+0x30/0x58
    [<ffffff9d49b05840>] __netdev_adjacent_dev_remove+0x14c/0x1e0
    [<ffffff9d49b05914>] __netdev_adjacent_dev_unlink_lists+0x40/0x68
    [<ffffff9d49b08820>] netdev_upper_dev_unlink+0xb4/0x1fc
    [<ffffff9d494a29f0>] rmnet_dev_walk_unreg+0x6c/0xc8
    [<ffffff9d49b00b40>] netdev_walk_all_lower_dev_rcu+0x58/0xb4
    [<ffffff9d494a30fc>] rmnet_config_notify_cb+0xf4/0x134
    [<ffffff9d48cd21b4>] raw_notifier_call_chain+0x58/0x78
    [<ffffff9d49b028a4>] call_netdevice_notifiers_info+0x48/0x78
    [<ffffff9d49b0b568>] rollback_registered_many+0x230/0x3c8
    [<ffffff9d49b0b738>] unregister_netdevice_many+0x38/0x94
    [<ffffff9d49b1e110>] rtnl_delete_link+0x58/0x88
    [<ffffff9d49b201dc>] rtnl_dellink+0xbc/0x1cc
    [<ffffff9d49b2355c>] rtnetlink_rcv_msg+0xb0/0x244
    [<ffffff9d49b5230c>] netlink_rcv_skb+0xb4/0xdc
    [<ffffff9d49b204f4>] rtnetlink_rcv+0x34/0x44
    [<ffffff9d49b51af0>] netlink_unicast+0x1ec/0x294
    [<ffffff9d49b51fdc>] netlink_sendmsg+0x320/0x390
    [<ffffff9d49ae6858>] sock_sendmsg+0x54/0x60
    [<ffffff9d49ae6f94>] ___sys_sendmsg+0x298/0x2b0
    [<ffffff9d49ae98f8>] SyS_sendmsg+0xb4/0xf0
    [<ffffff9d48c83770>] el0_svc_naked+0x24/0x28
    
    Fixes: ceed73a2 ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Fixes: 60d58f97 ("net: qualcomm: rmnet: Implement bridge mode")
    Signed-off-by: NSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    b37f78f2
rmnet_config.c 10.8 KB