mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 00:04:15 +08:00
keys: Fix request_key() cache
commit8379bb84be
upstream. When the key cached by request_key() and co. is cleaned up on exit(), the code looks in the wrong task_struct, and so clears the wrong cache. This leads to anomalies in key refcounting when doing, say, a kernel build on an afs volume, that then trigger kasan to report a use-after-free when the key is viewed in /proc/keys. Fix this by making exit_creds() look in the passed-in task_struct rather than in current (the task_struct cleanup code is deferred by RCU and potentially run in another task). Fixes:7743c48e54
("keys: Cache result of request_key*() temporarily in task_struct") Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6410050a09
commit
756f4d2ee8
@ -175,8 +175,8 @@ void exit_creds(struct task_struct *tsk)
|
||||
put_cred(cred);
|
||||
|
||||
#ifdef CONFIG_KEYS_REQUEST_CACHE
|
||||
key_put(current->cached_requested_key);
|
||||
current->cached_requested_key = NULL;
|
||||
key_put(tsk->cached_requested_key);
|
||||
tsk->cached_requested_key = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user