forked from Minki/linux
x86: EFI: fix use of unitialized variable and the cache logic
Andi Kleen pointed out that the cache attribute logic is reverse in efi_enter_virtual_mode(). This problem alone is harmless as we do not (yet) do cache attribute conflict resolution. (This bug was not present in the original EFI submission - I introduced it while fixing up rejects.) While reviewing this code I noticed a second, worse problem: the use of uninitialized md->virt_addr. Fix both problems. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
5d3c8b21e2
commit
e85f20518b
@ -428,9 +428,6 @@ void __init efi_enter_virtual_mode(void)
|
|||||||
else
|
else
|
||||||
va = efi_ioremap(md->phys_addr, size);
|
va = efi_ioremap(md->phys_addr, size);
|
||||||
|
|
||||||
if (md->attribute & EFI_MEMORY_WB)
|
|
||||||
set_memory_uc(md->virt_addr, size);
|
|
||||||
|
|
||||||
md->virt_addr = (u64) (unsigned long) va;
|
md->virt_addr = (u64) (unsigned long) va;
|
||||||
|
|
||||||
if (!va) {
|
if (!va) {
|
||||||
@ -439,6 +436,9 @@ void __init efi_enter_virtual_mode(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(md->attribute & EFI_MEMORY_WB))
|
||||||
|
set_memory_uc(md->virt_addr, size);
|
||||||
|
|
||||||
systab = (u64) (unsigned long) efi_phys.systab;
|
systab = (u64) (unsigned long) efi_phys.systab;
|
||||||
if (md->phys_addr <= systab && systab < end) {
|
if (md->phys_addr <= systab && systab < end) {
|
||||||
systab += md->virt_addr - md->phys_addr;
|
systab += md->virt_addr - md->phys_addr;
|
||||||
|
Loading…
Reference in New Issue
Block a user