aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorIlias Apalodimas <ilias.apalodimas@linaro.org>2023-06-20 09:19:30 +0300
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2023-07-15 11:20:41 +0200
commit748cb553ff9c1fefdfad540ea949c869ee9e3306 (patch)
treee17360c363877ec75ccabf2a46a5b34a3e3337c0 /lib
parent747d16d93c3b03e835925dd9ecb8f8d0b8d1ad22 (diff)
downloadu-boot-748cb553ff9c1fefdfad540ea949c869ee9e3306.zip
u-boot-748cb553ff9c1fefdfad540ea949c869ee9e3306.tar.gz
u-boot-748cb553ff9c1fefdfad540ea949c869ee9e3306.tar.bz2
efi_loader: fix the return codes of UninstallProtocol
Up to now we did not check the return value of DisconnectController. A previous patch is fixing that taking into account what happened during the controller disconnect. But that check takes place before our code is trying to figure out if the interface exists to begin with. In case a driver is not allowed to unbind -- e.g returning EFI_DEVICE_ERROR, we will end up returning that error instead of EFI_NOT_FOUND. Add an extra check on the top of the function to make sure the protocol interface exists before trying to disconnect any drivers Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_loader/efi_boottime.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index d294db9..2ca7359 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -1373,6 +1373,8 @@ static efi_status_t efi_uninstall_protocol
r = efi_search_protocol(handle, protocol, &handler);
if (r != EFI_SUCCESS)
goto out;
+ if (handler->protocol_interface != protocol_interface)
+ return EFI_NOT_FOUND;
/* Disconnect controllers */
r = efi_disconnect_all_drivers(efiobj, protocol, NULL);
if (r != EFI_SUCCESS) {