Patch "efi/libstub: Disable PCI DMA before grabbing the EFI memory map" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    efi/libstub: Disable PCI DMA before grabbing the EFI memory map

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     efi-libstub-disable-pci-dma-before-grabbing-the-efi-.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 9b5ff6e1d0658dd27d333a38ff96e31f26e095da
Author: Ard Biesheuvel <ardb@xxxxxxxxxx>
Date:   Tue Jun 27 09:33:09 2023 +0200

    efi/libstub: Disable PCI DMA before grabbing the EFI memory map
    
    [ Upstream commit 2e28a798c3092ea42b968fa16ac835969d124898 ]
    
    Currently, the EFI stub will disable PCI DMA as the very last thing it
    does before calling ExitBootServices(), to avoid interfering with the
    firmware's normal operation as much as possible.
    
    However, the stub will invoke DisconnectController() on all endpoints
    downstream of the PCI bridges it disables, and this may affect the
    layout of the EFI memory map, making it substantially more likely that
    ExitBootServices() will fail the first time around, and that the EFI
    memory map needs to be reloaded.
    
    This, in turn, increases the likelihood that the slack space we
    allocated is insufficient (and we can no longer allocate memory via boot
    services after having called ExitBootServices() once), causing the
    second call to GetMemoryMap (and therefore the boot) to fail. This makes
    the PCI DMA disable feature a bit more fragile than it already is, so
    let's make it more robust, by allocating the space for the EFI memory
    map after disabling PCI DMA.
    
    Fixes: 4444f8541dad16fe ("efi: Allow disabling PCI busmastering on bridges during boot")
    Reported-by: Glenn Washburn <development@xxxxxxxxxxxxxxx>
    Acked-by: Matthew Garrett <mjg59@xxxxxxxxxxxxx>
    Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
index d489bdc645fe1..2a00eb627c3c3 100644
--- a/drivers/firmware/efi/libstub/efi-stub-helper.c
+++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
@@ -439,8 +439,10 @@ efi_status_t efi_exit_boot_services(void *handle,
 {
 	efi_status_t status;
 
-	status = efi_get_memory_map(map);
+	if (efi_disable_pci_dma)
+		efi_pci_disable_bridge_busmaster();
 
+	status = efi_get_memory_map(map);
 	if (status != EFI_SUCCESS)
 		goto fail;
 
@@ -448,9 +450,6 @@ efi_status_t efi_exit_boot_services(void *handle,
 	if (status != EFI_SUCCESS)
 		goto free_map;
 
-	if (efi_disable_pci_dma)
-		efi_pci_disable_bridge_busmaster();
-
 	status = efi_bs_call(exit_boot_services, handle, *map->key_ptr);
 
 	if (status == EFI_INVALID_PARAMETER) {



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux