From: Oliver Hartkopp <socketcan@hartkopp.net>
To: mkl@pengutronix.de, dvyukov@google.com, netdev@vger.kernel.org,
linux-can@vger.kernel.org
Cc: syzkaller-bugs@googlegroups.com,
Oliver Hartkopp <socketcan@hartkopp.net>,
syzbot+381d06e0c8eaacb8706f@syzkaller.appspotmail.com,
syzbot+d0ddd88c9a7432f041e6@syzkaller.appspotmail.com,
syzbot+76d62d3b8162883c7d11@syzkaller.appspotmail.com
Subject: [PATCH] can: remove WARN() statement from list operation sanity check
Date: Thu, 26 Nov 2020 20:21:40 +0100 [thread overview]
Message-ID: <20201126192140.14350-1-socketcan@hartkopp.net> (raw)
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@syzkaller.appspotmail.com
Reported-by: syzbot+d0ddd88c9a7432f041e6@syzkaller.appspotmail.com
Reported-by: syzbot+76d62d3b8162883c7d11@syzkaller.appspotmail.com
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
---
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 5d124c155904..7c5ccdec89e1 100644
--- a/net/can/af_can.c
+++ b/net/can/af_can.c
@@ -539,14 +539,17 @@ void can_rx_unregister(struct net *net, struct net_device *dev, canid_t can_id,
break;
}
/* 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. Reported by syskaller (see commit message)
*/
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;
}
hlist_del_rcu(&rcv->list);
dev_rcv_lists->entries--;
--
2.29.2
next reply other threads:[~2020-11-26 19:22 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-26 19:21 Oliver Hartkopp [this message]
2020-11-27 7:28 ` [PATCH] can: remove WARN() statement from list operation sanity check Marc Kleine-Budde
2020-11-27 9:48 ` Marc Kleine-Budde
2020-11-27 13:16 ` Oliver Hartkopp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201126192140.14350-1-socketcan@hartkopp.net \
--to=socketcan@hartkopp.net \
--cc=dvyukov@google.com \
--cc=linux-can@vger.kernel.org \
--cc=mkl@pengutronix.de \
--cc=netdev@vger.kernel.org \
--cc=syzbot+381d06e0c8eaacb8706f@syzkaller.appspotmail.com \
--cc=syzbot+76d62d3b8162883c7d11@syzkaller.appspotmail.com \
--cc=syzbot+d0ddd88c9a7432f041e6@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox