mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ACPI: fix single linked list manipulation
Fix single linked list manipulation for sub_driver. If the remving entry is not on the head of the sub_driver list, it goes into infinate loop. Though that infinite loop doesn't happen. Because the only user of acpi_pci_register_dirver() is acpiphp. Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
		
							parent
							
								
									9185cfa925
								
							
						
					
					
						commit
						f10bb2544b
					
				
					 1 changed files with 5 additions and 4 deletions
				
			
		| 
						 | 
					@ -98,11 +98,12 @@ void acpi_pci_unregister_driver(struct acpi_pci_driver *driver)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct acpi_pci_driver **pptr = &sub_driver;
 | 
						struct acpi_pci_driver **pptr = &sub_driver;
 | 
				
			||||||
	while (*pptr) {
 | 
						while (*pptr) {
 | 
				
			||||||
		if (*pptr != driver)
 | 
							if (*pptr == driver)
 | 
				
			||||||
			continue;
 | 
					 | 
				
			||||||
		*pptr = (*pptr)->next;
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
 | 
							pptr = &(*pptr)->next;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						BUG_ON(!*pptr);
 | 
				
			||||||
 | 
						*pptr = (*pptr)->next;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!driver->remove)
 | 
						if (!driver->remove)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue