• Peter Zijlstra's avatar
    x86/ldt: Rework locking · c2b3496b
    Peter Zijlstra authored
    The LDT is duplicated on fork() and on exec(), which is wrong as exec()
    should start from a clean state, i.e. without LDT. To fix this the LDT
    duplication code will be moved into arch_dup_mmap() which is only called
    for fork().
    
    This introduces a locking problem. arch_dup_mmap() holds mmap_sem of the
    parent process, but the LDT duplication code needs to acquire
    mm->context.lock to access the LDT data safely, which is the reverse lock
    order of write_ldt() where mmap_sem nests into context.lock.
    
    Solve this by introducing a new rw semaphore which serializes the
    read/write_ldt() syscall operations and use context.lock to protect the
    actual installment of the LDT descriptor.
    
    So context.lock stabilizes mm->context.ldt and can nest inside of the new
    semaphore or mmap_sem.
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    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: Peter Zijlstra <peterz@infradead.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>
    c2b3496b
mmu.h 1.57 KB