mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05:00 
			
		
		
		
	Backport Russell King's series [1] net: mvneta: reduce size of TSO header allocation to pending-5.15 to fix random crashes on Turris Omnia. This also backports two patches that are dependencies to this series: net: mvneta: Delete unused variable net: mvneta: fix potential double-frees in mvneta_txq_sw_deinit() [1] https://lore.kernel.org/netdev/ZCsbJ4nG+So%2Fn9qY@shell.armlinux.org.uk/ Signed-off-by: Marek Behún <kabel@kernel.org> Signed-off-by: Christian Lamparter <chunkeey@gmail.com> (squashed)
		
			
				
	
	
		
			38 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 0cf39c6543469aae4a30cba354243125514ed568 Mon Sep 17 00:00:00 2001
 | 
						|
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
 | 
						|
Date: Wed, 29 Mar 2023 13:11:17 +0100
 | 
						|
Subject: [PATCH] net: mvneta: fix potential double-frees in
 | 
						|
 mvneta_txq_sw_deinit()
 | 
						|
 | 
						|
Reported on the Turris forum, mvneta provokes kernel warnings in the
 | 
						|
architecture DMA mapping code when mvneta_setup_txqs() fails to
 | 
						|
allocate memory. This happens because when mvneta_cleanup_txqs() is
 | 
						|
called in the mvneta_stop() path, we leave pointers in the structure
 | 
						|
that have been freed.
 | 
						|
 | 
						|
Then on mvneta_open(), we call mvneta_setup_txqs(), which starts
 | 
						|
allocating memory. On memory allocation failure, mvneta_cleanup_txqs()
 | 
						|
will walk all the queues freeing any non-NULL pointers - which includes
 | 
						|
pointers that were previously freed in mvneta_stop().
 | 
						|
 | 
						|
Fix this by setting these pointers to NULL to prevent double-freeing
 | 
						|
of the same memory.
 | 
						|
 | 
						|
Link: https://forum.turris.cz/t/random-kernel-exceptions-on-hbl-tos-7-0/18865/8
 | 
						|
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
 | 
						|
---
 | 
						|
 drivers/net/ethernet/marvell/mvneta.c | 2 ++
 | 
						|
 1 file changed, 2 insertions(+)
 | 
						|
 | 
						|
--- a/drivers/net/ethernet/marvell/mvneta.c
 | 
						|
+++ b/drivers/net/ethernet/marvell/mvneta.c
 | 
						|
@@ -3481,6 +3481,8 @@ static void mvneta_txq_sw_deinit(struct
 | 
						|
 
 | 
						|
 	netdev_tx_reset_queue(nq);
 | 
						|
 
 | 
						|
+	txq->buf               = NULL;
 | 
						|
+	txq->tso_hdrs          = NULL;
 | 
						|
 	txq->descs             = NULL;
 | 
						|
 	txq->last_desc         = 0;
 | 
						|
 	txq->next_desc_to_proc = 0;
 |