• Thomas Gleixner's avatar
    x86/ldt: Prevent LDT inheritance on exec · a4828f81
    Thomas Gleixner authored
    The LDT is inherited across fork() or exec(), but that makes no sense
    at all because exec() is supposed to start the process clean.
    
    The reason why this happens is that init_new_context_ldt() is called from
    init_new_context() which obviously needs to be called for both fork() and
    exec().
    
    It would be surprising if anything relies on that behaviour, so it seems to
    be safe to remove that misfeature.
    
    Split the context initialization into two parts. Clear the LDT pointer and
    initialize the mutex from the general context init and move the LDT
    duplication to arch_dup_mmap() which is only called on fork().
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Andy Lutomirsky <luto@kernel.org>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Borislav Petkov <bpetkov@suse.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David Laight <David.Laight@aculab.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: Eduardo Valentin <eduval@amazon.com>
    Cc: Greg KH <gregkh@linuxfoundation.org>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: aliguori@amazon.com
    Cc: dan.j.williams@intel.com
    Cc: hughd@google.com
    Cc: keescook@google.com
    Cc: kirill.shutemov@linux.intel.com
    Cc: linux-mm@kvack.org
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    a4828f81
ldt_gdt.c 22.3 KB