From: Heinrich Schuchardt Date: Thu, 12 Sep 2019 06:34:06 +0000 (+0800) Subject: MdeModulePkg: Make retval in UninstallMultipleProtocol follow Spec X-Git-Tag: edk2-stable202002~7 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=0997352ddb4761c49dfedf6fef46b4cd15f6c9bf MdeModulePkg: Make retval in UninstallMultipleProtocol follow Spec REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1869 The UEFI spec requires that if any error occurs in UninstallMultipleProtocolInterfaces(), EFI_INVALID_PARAMETER is returned and not the return code of UninstallProtocolInterface(). Signed-off-by: Heinrich Schuchardt Reviewed-by: Dandan Bi --- diff --git a/MdeModulePkg/Core/Dxe/Hand/Handle.c b/MdeModulePkg/Core/Dxe/Hand/Handle.c index b2721b3ab2..6eccb41ecb 100644 --- a/MdeModulePkg/Core/Dxe/Hand/Handle.c +++ b/MdeModulePkg/Core/Dxe/Hand/Handle.c @@ -802,20 +802,27 @@ Done: - /** Uninstalls a list of protocol interface in the boot services environment. - This function calls UnisatllProtocolInterface() in a loop. This is + This function calls UninstallProtocolInterface() in a loop. This is basically a lib function to save space. - @param Handle The handle to uninstall the protocol + If any errors are generated while the protocol interfaces are being + uninstalled, then the protocol interfaces uninstalled prior to the error will + be reinstalled and EFI_INVALID_PARAMETER will be returned. + + @param Handle The handle to uninstall the protocol interfaces + from. @param ... EFI_GUID followed by protocol instance. A NULL - terminates the list. The pairs are the + terminates the list. The pairs are the arguments to UninstallProtocolInterface(). All the protocols are added to Handle. - @return Status code - + @retval EFI_SUCCESS if all protocol interfaces where uninstalled. + @retval EFI_INVALID_PARAMETER if any protocol interface could not be + uninstalled and an attempt was made to + reinstall previously uninstalled protocol + interfaces. **/ EFI_STATUS EFIAPI @@ -864,6 +871,7 @@ CoreUninstallMultipleProtocolInterfaces ( CoreInstallProtocolInterface (&Handle, Protocol, EFI_NATIVE_INTERFACE, Interface); } VA_END (Args); + Status = EFI_INVALID_PARAMETER; } return Status;