From: Greg Kroah-Hartman Date: Mon, 16 Oct 2023 17:04:52 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v5.15.136~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2149ba48cea15a8caf06022575f33271e68d34f2;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: ravb-fix-use-after-free-issue-in-ravb_tx_timeout_work.patch --- diff --git a/queue-5.10/ravb-fix-use-after-free-issue-in-ravb_tx_timeout_work.patch b/queue-5.10/ravb-fix-use-after-free-issue-in-ravb_tx_timeout_work.patch new file mode 100644 index 00000000000..476c874e7d6 --- /dev/null +++ b/queue-5.10/ravb-fix-use-after-free-issue-in-ravb_tx_timeout_work.patch @@ -0,0 +1,50 @@ +From 3971442870713de527684398416970cf025b4f89 Mon Sep 17 00:00:00 2001 +From: Yoshihiro Shimoda +Date: Thu, 5 Oct 2023 10:12:01 +0900 +Subject: ravb: Fix use-after-free issue in ravb_tx_timeout_work() + +From: Yoshihiro Shimoda + +commit 3971442870713de527684398416970cf025b4f89 upstream. + +The ravb_stop() should call cancel_work_sync(). Otherwise, +ravb_tx_timeout_work() is possible to use the freed priv after +ravb_remove() was called like below: + +CPU0 CPU1 + ravb_tx_timeout() +ravb_remove() +unregister_netdev() +free_netdev(ndev) +// free priv + ravb_tx_timeout_work() + // use priv + +unregister_netdev() will call .ndo_stop() so that ravb_stop() is +called. And, after phy_stop() is called, netif_carrier_off() +is also called. So that .ndo_tx_timeout() will not be called +after phy_stop(). + +Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper") +Reported-by: Zheng Wang +Closes: https://lore.kernel.org/netdev/20230725030026.1664873-1-zyytlz.wz@163.com/ +Signed-off-by: Yoshihiro Shimoda +Reviewed-by: Sergey Shtylyov +Link: https://lore.kernel.org/r/20231005011201.14368-3-yoshihiro.shimoda.uh@renesas.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/ethernet/renesas/ravb_main.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/net/ethernet/renesas/ravb_main.c ++++ b/drivers/net/ethernet/renesas/ravb_main.c +@@ -1706,6 +1706,8 @@ static int ravb_close(struct net_device + of_phy_deregister_fixed_link(np); + } + ++ cancel_work_sync(&priv->work); ++ + if (priv->chip_id != RCAR_GEN2) { + free_irq(priv->tx_irqs[RAVB_NC], ndev); + free_irq(priv->rx_irqs[RAVB_NC], ndev); diff --git a/queue-5.10/series b/queue-5.10/series index b319fa5a309..bcc6eb9c56a 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -80,3 +80,4 @@ arm64-armv8_deprecated-fix-unused-function-error.patch eth-remove-remaining-copies-of-the-napi_poll_weight-define.patch rdma-srp-set-scmnd-result-only-when-scmnd-is-not-null.patch rdma-srp-fix-srp_abort.patch +ravb-fix-use-after-free-issue-in-ravb_tx_timeout_work.patch