From: Michael Brown Date: Fri, 23 Jun 2023 15:12:01 +0000 (+0100) Subject: [efi] Check for protocols opened by vetoed driver and image handles X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8a0d1c0b8cfd7b04bdc9a006c52434661afd06a;p=thirdparty%2Fipxe.git [efi] Check for protocols opened by vetoed driver and image handles The UEFI specification states that the AgentHandle may be either the driving binding protocol handle or the image handle. Check for both handles when searching for stale handles to be forcibly closed on behalf of a vetoed driver. Signed-off-by: Michael Brown --- diff --git a/src/interface/efi/efi_veto.c b/src/interface/efi/efi_veto.c index 3e0806e01..bc19a0091 100644 --- a/src/interface/efi/efi_veto.c +++ b/src/interface/efi/efi_veto.c @@ -205,6 +205,7 @@ static int efi_veto_close_protocol ( struct efi_veto *veto, EFI_HANDLE handle, EFI_GUID *protocol ) { EFI_BOOT_SERVICES *bs = efi_systab->BootServices; EFI_HANDLE driver = veto->driver; + EFI_HANDLE image = veto->image; EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *openers; EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *opener; EFI_HANDLE controller; @@ -227,8 +228,10 @@ static int efi_veto_close_protocol ( struct efi_veto *veto, EFI_HANDLE handle, /* Close anything opened by this driver */ for ( i = 0 ; i < count ; i++ ) { opener = &openers[i]; - if ( opener->AgentHandle != driver ) + if ( ( opener->AgentHandle != driver ) && + ( opener->AgentHandle != image ) ) { continue; + } controller = opener->ControllerHandle; DBGC_EFI_OPENER ( driver, handle, protocol, opener ); if ( ( efirc = bs->CloseProtocol ( handle, protocol, driver,