mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 10:01:39 -05:00
efi/libstub: gop: Fix EDID support in mixed-mode
The efi_edid_discovered_protocol and efi_edid_active_protocol have mixed
mode fields. So all their attributes should be accessed through
the efi_table_attr() helper.
Doing so fixes the upper 32 bits of the 64 bit gop_edid pointer getting
set to random values (followed by a crash at boot) when booting a x86_64
kernel on a machine with 32 bit UEFI like the Asus T100TA.
Fixes: 17029cdd8f ("efi/libstub: gop: Add support for reading EDID")
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
This commit is contained in:
committed by
Ard Biesheuvel
parent
8f0b4cce44
commit
5688e977ed
@@ -513,15 +513,15 @@ efi_status_t efi_setup_graphics(struct screen_info *si, struct edid_info *edid)
|
||||
status = efi_bs_call(handle_protocol, handle, &EFI_EDID_ACTIVE_PROTOCOL_GUID,
|
||||
(void **)&active_edid);
|
||||
if (status == EFI_SUCCESS) {
|
||||
gop_size_of_edid = active_edid->size_of_edid;
|
||||
gop_edid = active_edid->edid;
|
||||
gop_size_of_edid = efi_table_attr(active_edid, size_of_edid);
|
||||
gop_edid = efi_table_attr(active_edid, edid);
|
||||
} else {
|
||||
status = efi_bs_call(handle_protocol, handle,
|
||||
&EFI_EDID_DISCOVERED_PROTOCOL_GUID,
|
||||
(void **)&discovered_edid);
|
||||
if (status == EFI_SUCCESS) {
|
||||
gop_size_of_edid = discovered_edid->size_of_edid;
|
||||
gop_edid = discovered_edid->edid;
|
||||
gop_size_of_edid = efi_table_attr(discovered_edid, size_of_edid);
|
||||
gop_edid = efi_table_attr(discovered_edid, edid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user