* Kees Cook <keesc...@chromium.org> wrote: > >> + Since the kernel is built using 2GB addressing, > > > > Does that try to refer to the 1G kernel and 1G fixmap pagetable > > mappings? I.e., level2_kernel_pgt and level2_fixmap_pgt in > > arch/x86/kernel/head_64.S? > > The "2GB addressing" part is in reference to: > > -mcmodel=kernel > Generate code for the kernel code model. The kernel runs in the > negative 2 GB of the address space. This model has to be used for > Linux kernel code.
On x86-64 this is a special GCC compiler small memory model, it is called the 'kernel code model', which is rather generic and no 'real name' ever stuck. Due to RIP-relative addressing and the sign-extension of 48 bit virtual addresses, this allows nearly as compact kernel code and (static) kernel data definitions as a 32-bit kernel would allow. The (positive) 0-4GB virtual memory range has similar advantages, but is of course frequently used by user-space code. Negative addresses are reserved for the kernel only. Thanks, Ingo