x86/boot/compressed/64: Fix missing initialization in find_trampoline_placement() [Linux 4.19.72]

This Linux kernel change "x86/boot/compressed/64: Fix missing initialization in find_trampoline_placement()" is included in the Linux 4.19.72 release. This change is authored by Kirill A. Shutemov <kirill.shutemov [at] linux.intel.com> on Mon Aug 26 16:26:01 2019 +0300. The commit for this change in Linux stable tree is 5049632 (patch) which is from upstream commit c96e848. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream c96e848.

x86/boot/compressed/64: Fix missing initialization in find_trampoline_placement()

[ Upstream commit c96e8483cb2da6695c8b8d0896fe7ae272a07b54 ]

Gustavo noticed that 'new' can be left uninitialized if 'bios_start'
happens to be less or equal to 'entry->addr + entry->size'.

Initialize the variable at the begin of the iteration to the current value
of 'bios_start'.

Fixes: 0a46fff2f910 ("x86/boot/compressed/64: Fix boot on machines with broken E820 table")
Reported-by: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20190826133326.7cxb4vbmiawffv2r@box
Signed-off-by: Sasha Levin <sashal@kernel.org>

There are 2 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 arch/x86/boot/compressed/pgtable_64.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/boot/compressed/pgtable_64.c b/arch/x86/boot/compressed/pgtable_64.c
index f0537a1..76e1edf 100644
--- a/arch/x86/boot/compressed/pgtable_64.c
+++ b/arch/x86/boot/compressed/pgtable_64.c
@@ -73,7 +73,7 @@ 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;
+       unsigned long new = bios_start;

        entry = &boot_params->e820_table[i];

Leave a Reply

Your email address will not be published. Required fields are marked *