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: Tue, 21 Nov 2023 17:17:03 +0900 From: Bongsu Jeon <bongsu.jeon@...sung.com> To: Nguyen Dinh Phi <phind.uet@...il.com>, Bongsu Jeon <bongsu.jeon@...sung.com>, Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org> CC: "syzbot+6eb09d75211863f15e3e@...kaller.appspotmail.com" <syzbot+6eb09d75211863f15e3e@...kaller.appspotmail.com>, "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org> Subject: Re: [PATCH v2] nfc: virtual_ncidev: Add variable to check if ndev is running On 21/11/2023 16:54, Nguyen Dinh Phi wrote: > 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. > > Signed-off-by: Nguyen Dinh Phi <phind.uet@...il.com> > Reported-by: syzbot+6eb09d75211863f15e3e@...kaller.appspotmail.com > Closes: https://lore.kernel.org/lkml/00000000000075472b06007df4fb@google.com > --- > V2: > - Remove unused macro. > - Re-adding a line that was removed wrongly. > drivers/nfc/virtual_ncidev.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/nfc/virtual_ncidev.c b/drivers/nfc/virtual_ncidev.c > index b027be0b0b6f..590b038e449e 100644 > --- a/drivers/nfc/virtual_ncidev.c > +++ b/drivers/nfc/virtual_ncidev.c > @@ -26,10 +26,14 @@ struct virtual_nci_dev { > 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; > } > > @@ -40,6 +44,7 @@ static int virtual_nci_close(struct nci_dev *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.39.2 Reviewed-by: Bongsu Jeon Best regards, Bongsu
Powered by blists - more mailing lists