• Oleg Nesterov's avatar
    coredump: set_dumpable: fix the theoretical race with itself · abacd2fe
    Oleg Nesterov authored
    set_dumpable() updates MMF_DUMPABLE_MASK in a non-trivial way to ensure
    that get_dumpable() can't observe the intermediate state, but this all
    can't help if multiple threads call set_dumpable() at the same time.
    
    And in theory commit_creds()->set_dumpable(SUID_DUMP_ROOT) racing with
    sys_prctl()->set_dumpable(SUID_DUMP_DISABLE) can result in SUID_DUMP_USER.
    
    Change this code to update both bits atomically via cmpxchg().
    
    Note: this assumes that it is safe to mix bitops and cmpxchg.  IOW, if,
    say, an architecture implements cmpxchg() using the locking (like
    arch/parisc/lib/bitops.c does), then it should use the same locks for
    set_bit/etc.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Acked-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Alex Kelly <alex.page.kelly@gmail.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Josh Triplett <josh@joshtriplett.org>
    Cc: Petr Matousek <pmatouse@redhat.com>
    Cc: Vasily Kulikov <segoon@openwall.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    abacd2fe
exec.c 38.5 KB