keys: safe concurrent user->{session,uid}_keyring access
authorJann Horn <jannh@google.com>
Wed, 27 Mar 2019 15:55:08 +0000 (16:55 +0100)
committerJames Morris <james.morris@microsoft.com>
Wed, 10 Apr 2019 17:29:50 +0000 (10:29 -0700)
commit0b9dc6c9f01c4a726558b82a3b6082a89d264eb5
tree1acfa81de568fa53ee14fac6219a140cd6560778
parent5c7e372caa35d303e414caeb64ee2243fd3cac3d
keys: safe concurrent user->{session,uid}_keyring access

The current code can perform concurrent updates and reads on
user->session_keyring and user->uid_keyring. Add a comment to
struct user_struct to document the nontrivial locking semantics, and use
READ_ONCE() for unlocked readers and smp_store_release() for writers to
prevent memory ordering issues.

Fixes: 69664cf16af4 ("keys: don't generate user and user session keyrings unless they're accessed")
Signed-off-by: Jann Horn <jannh@google.com>
Signed-off-by: James Morris <james.morris@microsoft.com>
include/linux/sched/user.h
security/keys/process_keys.c
security/keys/request_key.c