mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
@ 2023-03-12 16:08 Zheng Wang
  2023-03-13  6:52 ` Krzysztof Kozlowski
  2023-03-15  7:30 ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 5+ messages in thread
From: Zheng Wang @ 2023-03-12 16:08 UTC (permalink / raw)
  To: krzysztof.kozlowski
  Cc: netdev, linux-kernel, hackerzheng666, 1395428693sheep,
	alex000young, Zheng Wang

This bug influences both st_nci_i2c_remove and st_nci_spi_remove.
Take st_nci_i2c_remove as an example.

In st_nci_i2c_probe, it called ndlc_probe and bound &ndlc->sm_work
with llt_ndlc_sm_work.

When it calls ndlc_recv or timeout handler, it will finally call
schedule_work to start the work.

When we call st_nci_i2c_remove to remove the driver, there
may be a sequence as follows:

Fix it by finishing the work before cleanup in ndlc_remove

CPU0                  CPU1

                    |llt_ndlc_sm_work
st_nci_i2c_remove   |
  ndlc_remove       |
     st_nci_remove  |
     nci_free_device|
     kfree(ndev)    |
//free ndlc->ndev   |
                    |llt_ndlc_rcv_queue
                    |nci_recv_frame
                    |//use ndlc->ndev

Fixes: 35630df68d60 ("NFC: st21nfcb: Add driver for STMicroelectronics ST21NFCB NFC chip")
Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
---
 drivers/nfc/st-nci/ndlc.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/nfc/st-nci/ndlc.c b/drivers/nfc/st-nci/ndlc.c
index 755460a73c0d..d2aa9f766738 100644
--- a/drivers/nfc/st-nci/ndlc.c
+++ b/drivers/nfc/st-nci/ndlc.c
@@ -282,13 +282,15 @@ EXPORT_SYMBOL(ndlc_probe);
 
 void ndlc_remove(struct llt_ndlc *ndlc)
 {
-	st_nci_remove(ndlc->ndev);
-
 	/* cancel timers */
 	del_timer_sync(&ndlc->t1_timer);
 	del_timer_sync(&ndlc->t2_timer);
 	ndlc->t2_active = false;
 	ndlc->t1_active = false;
+	/* cancel work */
+	cancel_work_sync(&ndlc->sm_work);
+
+	st_nci_remove(ndlc->ndev);
 
 	skb_queue_purge(&ndlc->rcv_q);
 	skb_queue_purge(&ndlc->send_q);
-- 
2.25.1


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

* Re: [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
  2023-03-12 16:08 [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition Zheng Wang
@ 2023-03-13  6:52 ` Krzysztof Kozlowski
  2023-03-13 16:56   ` Zheng Hacker
  2023-03-15  7:30 ` patchwork-bot+netdevbpf
  1 sibling, 1 reply; 5+ messages in thread
From: Krzysztof Kozlowski @ 2023-03-13  6:52 UTC (permalink / raw)
  To: Zheng Wang
  Cc: netdev, linux-kernel, hackerzheng666, 1395428693sheep, alex000young

On 12/03/2023 17:08, Zheng Wang wrote:
> This bug influences both st_nci_i2c_remove and st_nci_spi_remove.
> Take st_nci_i2c_remove as an example.
> 
> In st_nci_i2c_probe, it called ndlc_probe and bound &ndlc->sm_work
> with llt_ndlc_sm_work.
> 
> When it calls ndlc_recv or timeout handler, it will finally call
> schedule_work to start the work.
> 
> When we call st_nci_i2c_remove to remove the driver, there
> may be a sequence as follows:
> 
> Fix it by finishing the work before cleanup in ndlc_remove


Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof


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

* Re: [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
  2023-03-13  6:52 ` Krzysztof Kozlowski
@ 2023-03-13 16:56   ` Zheng Hacker
  0 siblings, 0 replies; 5+ messages in thread
From: Zheng Hacker @ 2023-03-13 16:56 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: Zheng Wang, netdev, linux-kernel, 1395428693sheep, alex000young

Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> 于2023年3月13日周一 14:52写道:
>
> On 12/03/2023 17:08, Zheng Wang wrote:
> > This bug influences both st_nci_i2c_remove and st_nci_spi_remove.
> > Take st_nci_i2c_remove as an example.
> >
> > In st_nci_i2c_probe, it called ndlc_probe and bound &ndlc->sm_work
> > with llt_ndlc_sm_work.
> >
> > When it calls ndlc_recv or timeout handler, it will finally call
> > schedule_work to start the work.
> >
> > When we call st_nci_i2c_remove to remove the driver, there
> > may be a sequence as follows:
> >
> > Fix it by finishing the work before cleanup in ndlc_remove
>
>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
>

Thanks for the detailed review.

Best regards,
Zheng

> Best regards,
> Krzysztof
>

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

* Re: [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
  2023-03-12 16:08 [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition Zheng Wang
  2023-03-13  6:52 ` Krzysztof Kozlowski
@ 2023-03-15  7:30 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-03-15  7:30 UTC (permalink / raw)
  To: Zheng Wang
  Cc: krzysztof.kozlowski, netdev, linux-kernel, hackerzheng666,
	1395428693sheep, alex000young

Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon, 13 Mar 2023 00:08:37 +0800 you wrote:
> This bug influences both st_nci_i2c_remove and st_nci_spi_remove.
> Take st_nci_i2c_remove as an example.
> 
> In st_nci_i2c_probe, it called ndlc_probe and bound &ndlc->sm_work
> with llt_ndlc_sm_work.
> 
> When it calls ndlc_recv or timeout handler, it will finally call
> schedule_work to start the work.
> 
> [...]

Here is the summary with links:
  - nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
    https://git.kernel.org/netdev/net/c/5000fe6c2782

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

* [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition
@ 2023-03-13 16:57 Zheng Wang
  0 siblings, 0 replies; 5+ messages in thread
From: Zheng Wang @ 2023-03-13 16:57 UTC (permalink / raw)
  To: krzysztof.kozlowski
  Cc: netdev, linux-kernel, hackerzheng666, 1395428693sheep,
	alex000young, Zheng Wang

This bug influences both st_nci_i2c_remove and st_nci_spi_remove.
Take st_nci_i2c_remove as an example.

In st_nci_i2c_probe, it called ndlc_probe and bound &ndlc->sm_work
with llt_ndlc_sm_work.

When it calls ndlc_recv or timeout handler, it will finally call
schedule_work to start the work.

When we call st_nci_i2c_remove to remove the driver, there
may be a sequence as follows:

Fix it by finishing the work before cleanup in ndlc_remove

CPU0                  CPU1

                    |llt_ndlc_sm_work
st_nci_i2c_remove   |
  ndlc_remove       |
     st_nci_remove  |
     nci_free_device|
     kfree(ndev)    |
//free ndlc->ndev   |
                    |llt_ndlc_rcv_queue
                    |nci_recv_frame
                    |//use ndlc->ndev

Fixes: 35630df68d60 ("NFC: st21nfcb: Add driver for STMicroelectronics ST21NFCB NFC chip")
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
---
 drivers/nfc/st-nci/ndlc.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/nfc/st-nci/ndlc.c b/drivers/nfc/st-nci/ndlc.c
index 755460a73c0d..d2aa9f766738 100644
--- a/drivers/nfc/st-nci/ndlc.c
+++ b/drivers/nfc/st-nci/ndlc.c
@@ -282,13 +282,15 @@ EXPORT_SYMBOL(ndlc_probe);
 
 void ndlc_remove(struct llt_ndlc *ndlc)
 {
-	st_nci_remove(ndlc->ndev);
-
 	/* cancel timers */
 	del_timer_sync(&ndlc->t1_timer);
 	del_timer_sync(&ndlc->t2_timer);
 	ndlc->t2_active = false;
 	ndlc->t1_active = false;
+	/* cancel work */
+	cancel_work_sync(&ndlc->sm_work);
+
+	st_nci_remove(ndlc->ndev);
 
 	skb_queue_purge(&ndlc->rcv_q);
 	skb_queue_purge(&ndlc->send_q);
-- 
2.25.1


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

end of thread, other threads:[~2023-03-15  7:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-12 16:08 [PATCH] nfc: st-nci: Fix use after free bug in ndlc_remove due to race condition Zheng Wang
2023-03-13  6:52 ` Krzysztof Kozlowski
2023-03-13 16:56   ` Zheng Hacker
2023-03-15  7:30 ` patchwork-bot+netdevbpf
2023-03-13 16:57 Zheng Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®