[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20221130091705.1831140-1-weiyongjun@huaweicloud.com>
Date: Wed, 30 Nov 2022 09:17:05 +0000
From: Wei Yongjun <weiyongjun@...weicloud.com>
To: Alexander Aring <alex.aring@...il.com>,
Stefan Schmidt <stefan@...enfreihafen.org>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Marcel Holtmann <marcel@...tmann.org>
Cc: Wei Yongjun <weiyongjun1@...wei.com>, linux-wpan@...r.kernel.org,
netdev@...r.kernel.org
Subject: [PATCH wpan] mac802154: fix missing INIT_LIST_HEAD in ieee802154_if_add()
From: Wei Yongjun <weiyongjun1@...wei.com>
Kernel fault injection test reports null-ptr-deref as follows:
BUG: kernel NULL pointer dereference, address: 0000000000000008
RIP: 0010:cfg802154_netdev_notifier_call+0x120/0x310 include/linux/list.h:114
Call Trace:
<TASK>
raw_notifier_call_chain+0x6d/0xa0 kernel/notifier.c:87
call_netdevice_notifiers_info+0x6e/0xc0 net/core/dev.c:1944
unregister_netdevice_many_notify+0x60d/0xcb0 net/core/dev.c:1982
unregister_netdevice_queue+0x154/0x1a0 net/core/dev.c:10879
register_netdevice+0x9a8/0xb90 net/core/dev.c:10083
ieee802154_if_add+0x6ed/0x7e0 net/mac802154/iface.c:659
ieee802154_register_hw+0x29c/0x330 net/mac802154/main.c:229
mcr20a_probe+0xaaa/0xcb1 drivers/net/ieee802154/mcr20a.c:1316
ieee802154_if_add() allocates wpan_dev as netdev's private data, but not
init the list in struct wpan_dev. cfg802154_netdev_notifier_call() manage
the list when device register/unregister, and may lead to null-ptr-deref.
Use INIT_LIST_HEAD() on it to initialize it correctly.
Fixes: fcf39e6e88e9 ("ieee802154: add wpan_dev_list")
Signed-off-by: Wei Yongjun <weiyongjun1@...wei.com>
diff --git a/net/mac802154/iface.c b/net/mac802154/iface.c
index d9b50884d34e..f6122ab15449 100644
--- a/net/mac802154/iface.c
+++ b/net/mac802154/iface.c
@@ -650,6 +650,7 @@ ieee802154_if_add(struct ieee802154_local *local, const char *name,
sdata->dev = ndev;
sdata->wpan_dev.wpan_phy = local->hw.phy;
sdata->local = local;
+ INIT_LIST_HEAD(&sdata->wpan_dev.list);
/* setup type-dependent data */
ret = ieee802154_setup_sdata(sdata, type);
--
2.34.1
Powered by blists - more mailing lists