lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 3 Dec 2020 08:29:35 -0500 From: Sasha Levin <sashal@...nel.org> To: linux-kernel@...r.kernel.org, stable@...r.kernel.org Cc: Oliver Hartkopp <socketcan@...tkopp.net>, syzbot+381d06e0c8eaacb8706f@...kaller.appspotmail.com, syzbot+d0ddd88c9a7432f041e6@...kaller.appspotmail.com, syzbot+76d62d3b8162883c7d11@...kaller.appspotmail.com, Marc Kleine-Budde <mkl@...gutronix.de>, Sasha Levin <sashal@...nel.org>, linux-can@...r.kernel.org, netdev@...r.kernel.org Subject: [PATCH AUTOSEL 5.4 23/23] can: af_can: can_rx_unregister(): remove WARN() statement from list operation sanity check From: Oliver Hartkopp <socketcan@...tkopp.net> [ Upstream commit d73ff9b7c4eacaba0fd956d14882bcae970f8307 ] To detect potential bugs in CAN protocol implementations (double removal of receiver entries) a WARN() statement has been used if no matching list item was found for removal. The fault injection issued by syzkaller was able to create a situation where the closing of a socket runs simultaneously to the notifier call chain for removing the CAN network device in use. This case is very unlikely in real life but it doesn't break anything. Therefore we just replace the WARN() statement with pr_warn() to preserve the notification for the CAN protocol development. Reported-by: syzbot+381d06e0c8eaacb8706f@...kaller.appspotmail.com Reported-by: syzbot+d0ddd88c9a7432f041e6@...kaller.appspotmail.com Reported-by: syzbot+76d62d3b8162883c7d11@...kaller.appspotmail.com Signed-off-by: Oliver Hartkopp <socketcan@...tkopp.net> Link: https://lore.kernel.org/r/20201126192140.14350-1-socketcan@hartkopp.net Signed-off-by: Marc Kleine-Budde <mkl@...gutronix.de> Signed-off-by: Sasha Levin <sashal@...nel.org> --- net/can/af_can.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/net/can/af_can.c b/net/can/af_can.c index fd6ef6d26846f..306d3584a4417 100644 --- a/net/can/af_can.c +++ b/net/can/af_can.c @@ -539,10 +539,13 @@ void can_rx_unregister(struct net *net, struct net_device *dev, canid_t can_id, /* Check for bugs in CAN protocol implementations using af_can.c: * 'rcv' will be NULL if no matching list item was found for removal. + * As this case may potentially happen when closing a socket while + * the notifier for removing the CAN netdev is running we just print + * a warning here. */ if (!rcv) { - WARN(1, "BUG: receive list entry not found for dev %s, id %03X, mask %03X\n", - DNAME(dev), can_id, mask); + pr_warn("can: receive list entry not found for dev %s, id %03X, mask %03X\n", + DNAME(dev), can_id, mask); goto out; } -- 2.27.0
Powered by blists - more mailing lists