Repository : ssh://git@diktynna/batman-adv
On branch : master
commit 74efdf49af45d78d0738356a872dd85e4fa6507c Author: Cong Wang xiyou.wangcong@gmail.com Date: Sat May 2 22:22:19 2020 -0700
batman-adv: partially revert dynamic lockdep key changes
This patch reverts the folowing commits:
commit fced7f6bdf34d5d3aff5722f045653c4fe3baa1d "batman-adv: use generic lockdep keys"
Reported-and-tested-by: syzbot+aaa6fa4949cc5d9b7b25@syzkaller.appspotmail.com Cc: Dmitry Vyukov dvyukov@google.com Cc: Taehee Yoo ap420073@gmail.com Signed-off-by: Cong Wang xiyou.wangcong@gmail.com Acked-by: Taehee Yoo ap420073@gmail.com Signed-off-by: David S. Miller davem@davemloft.net [sven@narfation.org: Extract batman-adv related parts, add missing include] Signed-off-by: Sven Eckelmann sven@narfation.org
74efdf49af45d78d0738356a872dd85e4fa6507c net/batman-adv/soft-interface.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+)
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c index 5f05a728..0ddd8013 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c @@ -22,6 +22,7 @@ #include <linux/kernel.h> #include <linux/kref.h> #include <linux/list.h> +#include <linux/lockdep.h> #include <linux/netdevice.h> #include <linux/netlink.h> #include <linux/percpu.h> @@ -739,6 +740,34 @@ static int batadv_interface_kill_vid(struct net_device *dev, __be16 proto, return 0; }
+/* batman-adv network devices have devices nesting below it and are a special + * "super class" of normal network devices; split their locks off into a + * separate class since they always nest. + */ +static struct lock_class_key batadv_netdev_xmit_lock_key; + +/** + * batadv_set_lockdep_class_one() - Set lockdep class for a single tx queue + * @dev: device which owns the tx queue + * @txq: tx queue to modify + * @_unused: always NULL + */ +static void batadv_set_lockdep_class_one(struct net_device *dev, + struct netdev_queue *txq, + void *_unused) +{ + lockdep_set_class(&txq->_xmit_lock, &batadv_netdev_xmit_lock_key); +} + +/** + * batadv_set_lockdep_class() - Set txq and addr_list lockdep class + * @dev: network device to modify + */ +static void batadv_set_lockdep_class(struct net_device *dev) +{ + netdev_for_each_tx_queue(dev, batadv_set_lockdep_class_one, NULL); +} + /** * batadv_softif_init_late() - late stage initialization of soft interface * @dev: registered network device to modify @@ -752,6 +781,8 @@ static int batadv_softif_init_late(struct net_device *dev) int ret; size_t cnt_len = sizeof(u64) * BATADV_CNT_NUM;
+ batadv_set_lockdep_class(dev); + bat_priv = netdev_priv(dev); bat_priv->soft_iface = dev;