mirror of https://github.com/ipxe/ipxe.git
[efi] Avoid infinite loops when asked to stop non-existent devices
Calling EDK2's OpenProtocol() with attributes BY_DRIVER|EXCLUSIVE will call DisconnectController() in a loop to attempt to dislodge any existing openers with attributes BY_DRIVER. The loop will continue indefinitely until either no such openers remain, or until DisconnectController() returns an error. If our driver binding protocol's Stop() method is ever called to disconnect a device that we are not in fact driving, then return EFI_DEVICE_ERROR rather than EFI_SUCCESS, in order to break this potentially infinite loop. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/41/head
parent
7b976dd300
commit
9ff6d08bf5
|
@ -254,7 +254,7 @@ efi_driver_stop ( EFI_DRIVER_BINDING_PROTOCOL *driver __unused,
|
|||
if ( ! efidev ) {
|
||||
DBGCP ( device, "EFIDRV %s is not started\n",
|
||||
efi_handle_name ( device ) );
|
||||
return 0;
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
/* Stop this device */
|
||||
|
|
Loading…
Reference in New Issue