summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2019-09-07 01:43:28 +0200
committerLaszlo Ersek <lersek@redhat.com>2019-10-09 09:40:09 +0200
commite1b59e085a430674fc5f31be276432d18cab63b4 (patch)
treed8b981569acb528197485fffc01b4c9e2ac1a12a
parent7b6ceb4d3b4678a9e76a3ff881b25d5e68c4439c (diff)
downloadedk2-e1b59e085a430674fc5f31be276432d18cab63b4.tar.gz
edk2-e1b59e085a430674fc5f31be276432d18cab63b4.tar.bz2
edk2-e1b59e085a430674fc5f31be276432d18cab63b4.zip
EmbeddedPkg/Universal/MmcDxe: "fix" CloseProtocol() call in BindingStop()
The 3rd and 4th parameters of the CloseProtocol() call are wrong. Given that we're not dissociating a child controller from a parent controller (= closing a BY_CHILD_CONTROLLER open), but closing a BY_DRIVER open, the 4th parameter (ControllerHandle) should equal the 1st parameter (Handle). It's unclear why this code hasn't crashed before. Note that the patch doesn't fix the underlying driver model bug. I don't understand what the loop in MmcDriverBindingStop() attempts to do. Is this driver supposed to be a bus driver? It seems to create new handles, and to append device path nodes. But it doesn't set up proper parent/child protocol opens, and it doesn't close them. Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Leif Lindholm <leif.lindholm@linaro.org> Signed-off-by: Laszlo Ersek <lersek@redhat.com> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
-rw-r--r--EmbeddedPkg/Universal/MmcDxe/Mmc.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/EmbeddedPkg/Universal/MmcDxe/Mmc.c b/EmbeddedPkg/Universal/MmcDxe/Mmc.c
index 2f9ec9c7e7..c6170880de 100644
--- a/EmbeddedPkg/Universal/MmcDxe/Mmc.c
+++ b/EmbeddedPkg/Universal/MmcDxe/Mmc.c
@@ -329,8 +329,9 @@ MmcDriverBindingStop (
// Close gEfiMmcHostProtocolGuid
Status = gBS->CloseProtocol (
Controller,
- &gEfiMmcHostProtocolGuid,(VOID **) &MmcHostInstance->MmcHost,
- This->DriverBindingHandle
+ &gEfiMmcHostProtocolGuid,
+ This->DriverBindingHandle,
+ Controller
);
// Remove MMC Host Instance from the pool