• Arvind Sankar's avatar
    x86/build: Fix vmlinux size check on 64-bit · ea3186b9
    Arvind Sankar authored
    Commit
    
      b4e0409a ("x86: check vmlinux limits, 64-bit")
    
    added a check that the size of the 64-bit kernel is less than
    KERNEL_IMAGE_SIZE.
    
    The check uses (_end - _text), but this is not enough. The initial
    PMD used in startup_64() (level2_kernel_pgt) can only map upto
    KERNEL_IMAGE_SIZE from __START_KERNEL_map, not from _text, and the
    modules area (MODULES_VADDR) starts at KERNEL_IMAGE_SIZE.
    
    The correct check is what is currently done for 32-bit, since
    LOAD_OFFSET is defined appropriately for the two architectures. Just
    check (_end - LOAD_OFFSET) against KERNEL_IMAGE_SIZE unconditionally.
    
    Note that on 32-bit, the limit is not strict: KERNEL_IMAGE_SIZE is not
    really used by the main kernel. The higher the kernel is located, the
    less the space available for the vmalloc area. However, it is used by
    KASLR in the compressed stub to limit the maximum address of the kernel
    to a safe value.
    
    Clean up various comments to clarify that despite the name,
    KERNEL_IMAGE_SIZE is not a limit on the size of the kernel image, but a
    limit on the maximum virtual address that the image can occupy.
    Signed-off-by: default avatarArvind Sankar <nivedita@alum.mit.edu>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/20201029161903.2553528-1-nivedita@alum.mit.edu
    ea3186b9
pgtable_32.h 2.29 KB