netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] nfc: virtual_ncidev: Add variable to check if ndev is running
@ 2023-11-19 16:47 Nguyen Dinh Phi
       [not found] ` <CGME20231119164714epcas2p2c0480d014abc4f0f780c714a445881ca@epcms2p4>
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Nguyen Dinh Phi @ 2023-11-19 16:47 UTC (permalink / raw)
  To: bongsu.jeon, krzysztof.kozlowski
  Cc: netdev, linux-kernel, Nguyen Dinh Phi,
	syzbot+6eb09d75211863f15e3e

syzbot reported an memory leak that happens when an skb is add to
send_buff after virtual nci closed.
This patch adds a variable to track if the ndev is running before
handling new skb in send function.

Reported-by: syzbot+6eb09d75211863f15e3e@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/lkml/00000000000075472b06007df4fb@google.com
Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com>
---
 drivers/nfc/virtual_ncidev.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/nfc/virtual_ncidev.c b/drivers/nfc/virtual_ncidev.c
index b027be0b0b6f..ac8226db54e2 100644
--- a/drivers/nfc/virtual_ncidev.c
+++ b/drivers/nfc/virtual_ncidev.c
@@ -20,26 +20,31 @@
 				 NFC_PROTO_ISO14443_MASK | \
 				 NFC_PROTO_ISO14443_B_MASK | \
 				 NFC_PROTO_ISO15693_MASK)
+#define NCIDEV_RUNNING 0
 
 struct virtual_nci_dev {
 	struct nci_dev *ndev;
 	struct mutex mtx;
 	struct sk_buff *send_buff;
 	struct wait_queue_head wq;
+	bool running;
 };
 
 static int virtual_nci_open(struct nci_dev *ndev)
 {
+	struct virtual_nci_dev *vdev = nci_get_drvdata(ndev);
+
+	vdev->running = true;
 	return 0;
 }
 
 static int virtual_nci_close(struct nci_dev *ndev)
 {
 	struct virtual_nci_dev *vdev = nci_get_drvdata(ndev);
-
 	mutex_lock(&vdev->mtx);
 	kfree_skb(vdev->send_buff);
 	vdev->send_buff = NULL;
+	vdev->running = false;
 	mutex_unlock(&vdev->mtx);
 
 	return 0;
@@ -50,7 +55,7 @@ static int virtual_nci_send(struct nci_dev *ndev, struct sk_buff *skb)
 	struct virtual_nci_dev *vdev = nci_get_drvdata(ndev);
 
 	mutex_lock(&vdev->mtx);
-	if (vdev->send_buff) {
+	if (vdev->send_buff || !vdev->running) {
 		mutex_unlock(&vdev->mtx);
 		kfree_skb(skb);
 		return -1;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2023-11-21  7:05 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-19 16:47 [PATCH] nfc: virtual_ncidev: Add variable to check if ndev is running Nguyen Dinh Phi
     [not found] ` <CGME20231119164714epcas2p2c0480d014abc4f0f780c714a445881ca@epcms2p4>
2023-11-20  4:47   ` Bongsu Jeon
2023-11-20  9:06     ` Krzysztof Kozlowski
2023-11-20 10:39       ` Nguyen Dinh Phi
2023-11-20 10:45         ` Krzysztof Kozlowski
2023-11-20 18:23           ` Phi Nguyen
2023-11-20 18:29             ` Krzysztof Kozlowski
2023-11-20 18:32               ` Krzysztof Kozlowski
2023-11-20 18:44 ` Krzysztof Kozlowski
     [not found] ` <CGME20231120184433epcas2p23e9f5db776d46ad8dd77a16dd326c1bc@epcms2p1>
2023-11-21  1:31   ` Bongsu Jeon
2023-11-21  7:05     ` Krzysztof Kozlowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).