Messages in this thread | | | Date | Mon, 26 Aug 2019 09:15:39 +0200 | From | Borislav Petkov <> | Subject | Re: [tip:x86/urgent] x86/boot/compressed/64: Fix boot on machines with broken E820 table |
| |
On Sun, Aug 25, 2019 at 10:33:15PM -0500, Gustavo A. R. Silva wrote: > Hi all, > > On 8/19/19 9:16 AM, tip-bot for Kirill A. Shutemov wrote: > [..] > > > > diff --git a/arch/x86/boot/compressed/pgtable_64.c b/arch/x86/boot/compressed/pgtable_64.c > > index 5f2d03067ae5..2faddeb0398a 100644 > > --- a/arch/x86/boot/compressed/pgtable_64.c > > +++ b/arch/x86/boot/compressed/pgtable_64.c > > @@ -72,6 +72,8 @@ static unsigned long find_trampoline_placement(void) > > > > /* Find the first usable memory region under bios_start. */ > > for (i = boot_params->e820_entries - 1; i >= 0; i--) { > > + unsigned long new; > > + > > entry = &boot_params->e820_table[i]; > > > > /* Skip all entries above bios_start. */ > > @@ -84,15 +86,20 @@ static unsigned long find_trampoline_placement(void) > > > > /* Adjust bios_start to the end of the entry if needed. */ > > if (bios_start > entry->addr + entry->size) > > Notice that if this condition happens to be false, we end up with an > uninitialized variable *new*.
Yap, good catch.
> What would be the right value to assign to *new* at declaration under > this condition?
Looking at the changed flow of the loop, how we use new instead of bios_start and how we assign new back to bios_start, I think we should do:
unsigned long new = bios_start;
at the beginning...
-- Regards/Gruss, Boris.
Good mailing practices for 400: avoid top-posting and trim the reply.
| |