diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/proc/base.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c index 1485e38daaa3..03c8d747be48 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -1151,10 +1151,16 @@ static ssize_t proc_loginuid_write(struct file * file, const char __user * buf, | |||
1151 | goto out_free_page; | 1151 | goto out_free_page; |
1152 | 1152 | ||
1153 | } | 1153 | } |
1154 | kloginuid = make_kuid(file->f_cred->user_ns, loginuid); | 1154 | |
1155 | if (!uid_valid(kloginuid)) { | 1155 | /* is userspace tring to explicitly UNSET the loginuid? */ |
1156 | length = -EINVAL; | 1156 | if (loginuid == AUDIT_UID_UNSET) { |
1157 | goto out_free_page; | 1157 | kloginuid = INVALID_UID; |
1158 | } else { | ||
1159 | kloginuid = make_kuid(file->f_cred->user_ns, loginuid); | ||
1160 | if (!uid_valid(kloginuid)) { | ||
1161 | length = -EINVAL; | ||
1162 | goto out_free_page; | ||
1163 | } | ||
1158 | } | 1164 | } |
1159 | 1165 | ||
1160 | length = audit_set_loginuid(kloginuid); | 1166 | length = audit_set_loginuid(kloginuid); |