diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-07-26 08:05:21 -0400 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-11-20 07:17:44 -0500 |
commit | 4c44aaafa8108f584831850ab48a975e971db2de (patch) | |
tree | c86f225e8256d28271acf3ea8926e70358f3e5c1 /include/linux/cred.h | |
parent | bcf58e725ddc45d31addbc6627d4f0edccc824c1 (diff) |
userns: Kill task_user_ns
The task_user_ns function hides the fact that it is getting the user
namespace from struct cred on the task. struct cred may go away as
soon as the rcu lock is released. This leads to a race where we
can dereference a stale user namespace pointer.
To make it obvious a struct cred is involved kill task_user_ns.
To kill the race modify the users of task_user_ns to only
reference the user namespace while the rcu lock is held.
Cc: Kees Cook <keescook@chromium.org>
Cc: James Morris <james.l.morris@oracle.com>
Acked-by: Kees Cook <keescook@chromium.org>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'include/linux/cred.h')
-rw-r--r-- | include/linux/cred.h | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/include/linux/cred.h b/include/linux/cred.h index ebbed2ce6637..856d2622d832 100644 --- a/include/linux/cred.h +++ b/include/linux/cred.h | |||
@@ -357,10 +357,8 @@ static inline void put_cred(const struct cred *_cred) | |||
357 | extern struct user_namespace init_user_ns; | 357 | extern struct user_namespace init_user_ns; |
358 | #ifdef CONFIG_USER_NS | 358 | #ifdef CONFIG_USER_NS |
359 | #define current_user_ns() (current_cred_xxx(user_ns)) | 359 | #define current_user_ns() (current_cred_xxx(user_ns)) |
360 | #define task_user_ns(task) (task_cred_xxx((task), user_ns)) | ||
361 | #else | 360 | #else |
362 | #define current_user_ns() (&init_user_ns) | 361 | #define current_user_ns() (&init_user_ns) |
363 | #define task_user_ns(task) (&init_user_ns) | ||
364 | #endif | 362 | #endif |
365 | 363 | ||
366 | 364 | ||