x86/boot: GDT limit value should be size - 1
authorArvind Sankar <nivedita@alum.mit.edu>
Sun, 2 Feb 2020 17:13:52 +0000 (12:13 -0500)
committerArd Biesheuvel <ardb@kernel.org>
Sat, 22 Feb 2020 22:37:37 +0000 (23:37 +0100)
The limit value for the GDTR should be such that adding it to the base
address gives the address of the last byte of the GDT, i.e. it should be
one less than the size, not the size.

Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Link: https://lore.kernel.org/r/20200202171353.3736319-7-nivedita@alum.mit.edu
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/x86/boot/compressed/head_64.S

index 69cc6c68741e710d27f497b4c08fcd195cc2d415..c36e6156b6a31c1dd151ff2caf9ed284e87ac4d0 100644 (file)
@@ -624,12 +624,12 @@ SYM_FUNC_END(.Lno_longmode)
 
        .data
 SYM_DATA_START_LOCAL(gdt64)
-       .word   gdt_end - gdt
+       .word   gdt_end - gdt - 1
        .quad   0
 SYM_DATA_END(gdt64)
        .balign 8
 SYM_DATA_START_LOCAL(gdt)
-       .word   gdt_end - gdt
+       .word   gdt_end - gdt - 1
        .long   gdt
        .word   0
        .quad   0x00cf9a000000ffff      /* __KERNEL32_CS */