mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
EFI fixes for v6.9 #2
- Fix logic that is supposed to prevent placement of the kernel image below LOAD_PHYSICAL_ADDR - Use the firmware stack in the EFI stub when running in mixed mode - Clear BSS only once when using mixed mode - Check efi.get_variable() function pointer for NULL before trying to call it -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQQm/3uucuRGn1Dmh0wbglWLn0tXAUCZgCRgwAKCRAwbglWLn0t XHozAP9jLdeGs1ReYZAn+W0QtW/SJHJznoPiHcktdNKG4rNX3QD9G3URu0f4jKCG yvjw8qHM1pC2cihXXjABjf7gL7g6LAE= =cNP7 -----END PGP SIGNATURE----- Merge tag 'efi-fixes-for-v6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi Pull EFI fixes from Ard Biesheuvel: - Fix logic that is supposed to prevent placement of the kernel image below LOAD_PHYSICAL_ADDR - Use the firmware stack in the EFI stub when running in mixed mode - Clear BSS only once when using mixed mode - Check efi.get_variable() function pointer for NULL before trying to call it * tag 'efi-fixes-for-v6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi: efi: fix panic in kdump kernel x86/efistub: Don't clear BSS twice in mixed mode x86/efistub: Call mixed mode boot services on the firmware's stack efi/libstub: fix efi_random_alloc() to allocate memory at alloc_min or higher address
This commit is contained in:
commit
ab8de2dbfc
@ -49,6 +49,11 @@ SYM_FUNC_START(startup_64_mixed_mode)
|
||||
lea efi32_boot_args(%rip), %rdx
|
||||
mov 0(%rdx), %edi
|
||||
mov 4(%rdx), %esi
|
||||
|
||||
/* Switch to the firmware's stack */
|
||||
movl efi32_boot_sp(%rip), %esp
|
||||
andl $~7, %esp
|
||||
|
||||
#ifdef CONFIG_EFI_HANDOVER_PROTOCOL
|
||||
mov 8(%rdx), %edx // saved bootparams pointer
|
||||
test %edx, %edx
|
||||
@ -254,6 +259,9 @@ SYM_FUNC_START_LOCAL(efi32_entry)
|
||||
/* Store firmware IDT descriptor */
|
||||
sidtl (efi32_boot_idt - 1b)(%ebx)
|
||||
|
||||
/* Store firmware stack pointer */
|
||||
movl %esp, (efi32_boot_sp - 1b)(%ebx)
|
||||
|
||||
/* Store boot arguments */
|
||||
leal (efi32_boot_args - 1b)(%ebx), %ebx
|
||||
movl %ecx, 0(%ebx)
|
||||
@ -318,5 +326,6 @@ SYM_DATA_END(efi32_boot_idt)
|
||||
|
||||
SYM_DATA_LOCAL(efi32_boot_cs, .word 0)
|
||||
SYM_DATA_LOCAL(efi32_boot_ds, .word 0)
|
||||
SYM_DATA_LOCAL(efi32_boot_sp, .long 0)
|
||||
SYM_DATA_LOCAL(efi32_boot_args, .long 0, 0, 0)
|
||||
SYM_DATA(efi_is64, .byte 1)
|
||||
|
@ -203,6 +203,8 @@ static bool generic_ops_supported(void)
|
||||
|
||||
name_size = sizeof(name);
|
||||
|
||||
if (!efi.get_next_variable)
|
||||
return false;
|
||||
status = efi.get_next_variable(&name_size, &name, &guid);
|
||||
if (status == EFI_UNSUPPORTED)
|
||||
return false;
|
||||
|
@ -120,7 +120,7 @@ efi_status_t efi_random_alloc(unsigned long size,
|
||||
continue;
|
||||
}
|
||||
|
||||
target = round_up(md->phys_addr, align) + target_slot * align;
|
||||
target = round_up(max(md->phys_addr, alloc_min), align) + target_slot * align;
|
||||
pages = size / EFI_PAGE_SIZE;
|
||||
|
||||
status = efi_bs_call(allocate_pages, EFI_ALLOCATE_ADDRESS,
|
||||
|
@ -476,7 +476,8 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle,
|
||||
efi_status_t status;
|
||||
char *cmdline_ptr;
|
||||
|
||||
memset(_bss, 0, _ebss - _bss);
|
||||
if (efi_is_native())
|
||||
memset(_bss, 0, _ebss - _bss);
|
||||
|
||||
efi_system_table = sys_table_arg;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user