mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	The layerscape kernel patches appears to be just some uncleaned local development tree, where patches are sometimes directly followed by their revert. While this does not seem a problem in the first place, it becomes incredibly unpleasant when the upstream kernel changes in the relevant areas and requires rebase. This removes all these patch-revert pairs and refreshs the rest. It removes about 44000 lines of entirely useless code. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
		
			
				
	
	
		
			124 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 5ae4c4ac2d992afcf4087e5f33ad7e5f7d073fbf Mon Sep 17 00:00:00 2001
 | |
| From: Claudiu Manoil <claudiu.manoil@nxp.com>
 | |
| Date: Wed, 4 Dec 2019 14:36:09 +0200
 | |
| Subject: [PATCH] net: dsa: felix: Fix probing allocation and cleanup path
 | |
| 
 | |
| dsa_switch_alloc() uses managed (devm_alloc) allocation
 | |
| to alloc 'ds'.  kfree()-ing 'ds' results in memory corruption.
 | |
| kfree(ds) seems harmless on the error path, however for this
 | |
| particular device, dsa_register_swtich() deffers probing to
 | |
| allow the enetc driver to probe the master port first.
 | |
| This results in kfree(ds) being called during the first
 | |
| probing attempt of felix, followed by a NULL poiter access
 | |
| crash during enetc driver probing (when accessing its net_device).
 | |
| 
 | |
| This patch fixes following crash (triggerred in the enetc driver by
 | |
| the probing routine of the felix driver):
 | |
| 
 | |
| [    3.502254] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
 | |
| [    3.511073] Mem abort info:
 | |
| [    3.513874]   ESR = 0x96000044
 | |
| [    3.516936]   EC = 0x25: DABT (current EL), IL = 32 bits
 | |
| [    3.522266]   SET = 0, FnV = 0
 | |
| [    3.525327]   EA = 0, S1PTW = 0
 | |
| [    3.528476] Data abort info:
 | |
| [    3.531359]   ISV = 0, ISS = 0x00000044
 | |
| [    3.535205]   CM = 0, WnR = 1
 | |
| [    3.538182] user pgtable: 4k pages, 48-bit VAs, pgdp=00000020f612d000
 | |
| [    3.544645] [0000000000000000] pgd=0000000000000000
 | |
| [    3.549542] Internal error: Oops: 96000044 [#1] PREEMPT SMP
 | |
| [    3.555128] Modules linked in:
 | |
| [    3.558189] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.4.0-03552-gfa6e1cd69f80 #1
 | |
| [    3.565781] Hardware name: LS1028A RDB Board (DT)
 | |
| [    3.570496] pstate: a0000005 (NzCv daif -PAN -UAO)
 | |
| [    3.575303] pc : enetc_pf_probe+0x784/0xba8
 | |
| [    3.579495] lr : enetc_pf_probe+0x6e8/0xba8
 | |
| [    3.583686] sp : ffff80001002ba90
 | |
| [    3.587005] x29: ffff80001002ba90 x28: ffff002076130c08
 | |
| [    3.592331] x27: 0000000000000002 x26: ffff002076130c80
 | |
| [    3.597657] x25: ffff002076130c00 x24: ffff002076130c80
 | |
| [    3.602982] x23: ffffb3f2ab0ec000 x22: ffff0020760d7840
 | |
| [    3.608307] x21: ffff0020760d7000 x20: ffff002076130c00
 | |
| [    3.613632] x19: ffff800010850000 x18: ffffffffffffffff
 | |
| [    3.618957] x17: 000000007dee1586 x16: 00000000cb746ba4
 | |
| [    3.624282] x15: ffffb3f2abce9908 x14: 0000000000000000
 | |
| [    3.629608] x13: 0000000000000101 x12: 0000000000010000
 | |
| [    3.634933] x11: 00000000ffffffff x10: ffff4c2dd0136000
 | |
| [    3.640257] x9 : 0000000000000000 x8 : ffff002076122000
 | |
| [    3.645582] x7 : 0000000000000000 x6 : 000000000000003f
 | |
| [    3.650908] x5 : 0000000000000040 x4 : 0000000000000001
 | |
| [    3.656234] x3 : ffff800010850000 x2 : ffffb3f2ab0ed868
 | |
| [    3.661560] x1 : 0000000000000000 x0 : 00000000051ca556
 | |
| [    3.666886] Call trace:
 | |
| [    3.669333]  enetc_pf_probe+0x784/0xba8
 | |
| [    3.673178]  local_pci_probe+0x3c/0xa0
 | |
| [    3.676935]  pci_device_probe+0x128/0x1c0
 | |
| [    3.680954]  really_probe+0x108/0x348
 | |
| [    3.684623]  driver_probe_device+0x58/0x100
 | |
| [    3.688815]  device_driver_attach+0x6c/0x90
 | |
| [    3.693006]  __driver_attach+0x84/0xc8
 | |
| [    3.696762]  bus_for_each_dev+0x74/0xc8
 | |
| [    3.700605]  driver_attach+0x20/0x28
 | |
| [    3.704186]  bus_add_driver+0x148/0x1f0
 | |
| [    3.708029]  driver_register+0x60/0x110
 | |
| [    3.711872]  __pci_register_driver+0x40/0x48
 | |
| [    3.716153]  enetc_pf_driver_init+0x20/0x28
 | |
| [    3.720346]  do_one_initcall+0x5c/0x1b0
 | |
| [    3.724189]  kernel_init_freeable+0x1a4/0x24c
 | |
| [    3.728557]  kernel_init+0x10/0x108
 | |
| [    3.732052]  ret_from_fork+0x10/0x18
 | |
| [    3.735635] Code: f9400680 f9417ea1 91020000 b9400000 (b9000020)
 | |
| [    3.741749] ---[ end trace c8ab43e3d33fed3f ]---
 | |
| [    3.746396] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
 | |
| [    3.748522] ata1: SATA link down (SStatus 0 SControl 300)
 | |
| [    3.754077] SMP: stopping secondary CPUs
 | |
| [    3.754082] Kernel Offset: 0x33f299c00000 from 0xffff800010000000
 | |
| [    3.754083] PHYS_OFFSET: 0xfffff019c0000000
 | |
| [    3.754086] CPU features: 0x0002,21806008
 | |
| [    3.754088] Memory Limit: none
 | |
| [    3.780794] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]---
 | |
| 
 | |
| As a result of the fix, struct felix allocation also needs to
 | |
| be converted to managed allocation (devm_alloc).
 | |
| 
 | |
| Fixes: bb849431a970 ("net: dsa: ocelot: alloc memory for dsa switch instance")
 | |
| 
 | |
| Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
 | |
| ---
 | |
|  drivers/net/dsa/ocelot/felix.c | 7 +------
 | |
|  1 file changed, 1 insertion(+), 6 deletions(-)
 | |
| 
 | |
| --- a/drivers/net/dsa/ocelot/felix.c
 | |
| +++ b/drivers/net/dsa/ocelot/felix.c
 | |
| @@ -485,7 +485,7 @@ static int felix_pci_probe(struct pci_de
 | |
|  		}
 | |
|  	}
 | |
|  
 | |
| -	felix = kzalloc(sizeof(struct felix), GFP_KERNEL);
 | |
| +	felix = devm_kzalloc(&pdev->dev, sizeof(*felix), GFP_KERNEL);
 | |
|  	if (!felix) {
 | |
|  		err = -ENOMEM;
 | |
|  		dev_err(&pdev->dev, "Failed to allocate driver memory\n");
 | |
| @@ -532,11 +532,9 @@ static int felix_pci_probe(struct pci_de
 | |
|  	return 0;
 | |
|  
 | |
|  err_register_ds:
 | |
| -	kfree(ds);
 | |
|  err_alloc_ds:
 | |
|  err_alloc_irq:
 | |
|  err_alloc_felix:
 | |
| -	kfree(felix);
 | |
|  err_dma:
 | |
|  	pci_disable_device(pdev);
 | |
|  err_pci_enable:
 | |
| @@ -551,9 +549,6 @@ static void felix_pci_remove(struct pci_
 | |
|  
 | |
|  	dsa_unregister_switch(felix->ds);
 | |
|  
 | |
| -	kfree(felix->ds);
 | |
| -	kfree(felix);
 | |
| -
 | |
|  	pci_disable_device(pdev);
 | |
|  }
 | |
|  
 |