• D
    x86/asm: Deobfuscate segment.h · 84f53788
    Denys Vlasenko 提交于
    This file just defines a number of constants, and a few macros
    and inline functions. It is particularly badly written.
    
    For example, it is not trivial to see how descriptors are
    numbered (you'd expect that should be easy, right?).
    
    This change deobfuscates it via the following changes:
    
    Group all GDT_ENTRY_foo together (move intervening stuff away).
    
    Number them explicitly: use a number, not PREV_DEFINE+1, +2, +3:
    I want to immediately see that GDT_ENTRY_PNPBIOS_CS32 is 18.
    Seeing (GDT_ENTRY_KERNEL_BASE+6) instead is not useful.
    
    The above change allows to remove GDT_ENTRY_KERNEL_BASE
    and GDT_ENTRY_PNPBIOS_BASE, which weren't used anywhere else.
    
    After a group of GDT_ENTRY_foo, define all selector values.
    
    Remove or improve some comments. In particular:
    Comment deleted as stating the obvious:
        /*
         * The GDT has 32 entries
         */
        #define GDT_ENTRIES 32
    
    "The segment offset needs to contain a RPL. Grr. -AK"
        changed to
    "Selectors need to also have a correct RPL (+3 thingy)"
    
    "GDT layout to get 64bit syscall right (sysret hardcodes gdt
    offsets)" expanded into a description *how exactly* sysret
    hardcodes them.
    
    Patch was tested to compile and not change vmlinux.o
    on 32-bit and 64-bit builds (verified with objdump).
    Signed-off-by: NDenys Vlasenko <dvlasenk@redhat.com>
    Cc: Alexei Starovoitov <ast@plumgrid.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Will Drewry <wad@chromium.org>
    Signed-off-by: NIngo Molnar <mingo@kernel.org>
    84f53788
segment.h 7.3 KB