diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-02-07 19:34:10 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-09-21 06:13:22 -0400 |
commit | 609fcd1b3a55f99667c61609895c83019b21baad (patch) | |
tree | f90cec33d1f1e0922c28d5528cd0f535dc235b92 /security | |
parent | 2db81452931eb51cc739d6e495cf1bd4860c3c99 (diff) |
userns: Convert tomoyo to use kuid and kgid where appropriate
Acked-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'security')
-rw-r--r-- | security/tomoyo/audit.c | 23 | ||||
-rw-r--r-- | security/tomoyo/common.c | 4 | ||||
-rw-r--r-- | security/tomoyo/common.h | 4 | ||||
-rw-r--r-- | security/tomoyo/condition.c | 20 |
4 files changed, 31 insertions, 20 deletions
diff --git a/security/tomoyo/audit.c b/security/tomoyo/audit.c index 7ef9fa3e37e0..c1b00375c9ad 100644 --- a/security/tomoyo/audit.c +++ b/security/tomoyo/audit.c | |||
@@ -168,9 +168,14 @@ static char *tomoyo_print_header(struct tomoyo_request_info *r) | |||
168 | stamp.day, stamp.hour, stamp.min, stamp.sec, r->profile, | 168 | stamp.day, stamp.hour, stamp.min, stamp.sec, r->profile, |
169 | tomoyo_mode[r->mode], tomoyo_yesno(r->granted), gpid, | 169 | tomoyo_mode[r->mode], tomoyo_yesno(r->granted), gpid, |
170 | tomoyo_sys_getpid(), tomoyo_sys_getppid(), | 170 | tomoyo_sys_getpid(), tomoyo_sys_getppid(), |
171 | current_uid(), current_gid(), current_euid(), | 171 | from_kuid(&init_user_ns, current_uid()), |
172 | current_egid(), current_suid(), current_sgid(), | 172 | from_kgid(&init_user_ns, current_gid()), |
173 | current_fsuid(), current_fsgid()); | 173 | from_kuid(&init_user_ns, current_euid()), |
174 | from_kgid(&init_user_ns, current_egid()), | ||
175 | from_kuid(&init_user_ns, current_suid()), | ||
176 | from_kgid(&init_user_ns, current_sgid()), | ||
177 | from_kuid(&init_user_ns, current_fsuid()), | ||
178 | from_kgid(&init_user_ns, current_fsgid())); | ||
174 | if (!obj) | 179 | if (!obj) |
175 | goto no_obj_info; | 180 | goto no_obj_info; |
176 | if (!obj->validate_done) { | 181 | if (!obj->validate_done) { |
@@ -191,15 +196,19 @@ static char *tomoyo_print_header(struct tomoyo_request_info *r) | |||
191 | tomoyo_buffer_len - 1 - pos, | 196 | tomoyo_buffer_len - 1 - pos, |
192 | " path%u.parent={ uid=%u gid=%u " | 197 | " path%u.parent={ uid=%u gid=%u " |
193 | "ino=%lu perm=0%o }", (i >> 1) + 1, | 198 | "ino=%lu perm=0%o }", (i >> 1) + 1, |
194 | stat->uid, stat->gid, (unsigned long) | 199 | from_kuid(&init_user_ns, stat->uid), |
195 | stat->ino, stat->mode & S_IALLUGO); | 200 | from_kgid(&init_user_ns, stat->gid), |
201 | (unsigned long)stat->ino, | ||
202 | stat->mode & S_IALLUGO); | ||
196 | continue; | 203 | continue; |
197 | } | 204 | } |
198 | pos += snprintf(buffer + pos, tomoyo_buffer_len - 1 - pos, | 205 | pos += snprintf(buffer + pos, tomoyo_buffer_len - 1 - pos, |
199 | " path%u={ uid=%u gid=%u ino=%lu major=%u" | 206 | " path%u={ uid=%u gid=%u ino=%lu major=%u" |
200 | " minor=%u perm=0%o type=%s", (i >> 1) + 1, | 207 | " minor=%u perm=0%o type=%s", (i >> 1) + 1, |
201 | stat->uid, stat->gid, (unsigned long) | 208 | from_kuid(&init_user_ns, stat->uid), |
202 | stat->ino, MAJOR(dev), MINOR(dev), | 209 | from_kgid(&init_user_ns, stat->gid), |
210 | (unsigned long)stat->ino, | ||
211 | MAJOR(dev), MINOR(dev), | ||
203 | mode & S_IALLUGO, tomoyo_filetype(mode)); | 212 | mode & S_IALLUGO, tomoyo_filetype(mode)); |
204 | if (S_ISCHR(mode) || S_ISBLK(mode)) { | 213 | if (S_ISCHR(mode) || S_ISBLK(mode)) { |
205 | dev = stat->rdev; | 214 | dev = stat->rdev; |
diff --git a/security/tomoyo/common.c b/security/tomoyo/common.c index 2e0f12c62938..f89a0333b813 100644 --- a/security/tomoyo/common.c +++ b/security/tomoyo/common.c | |||
@@ -925,7 +925,9 @@ static bool tomoyo_manager(void) | |||
925 | 925 | ||
926 | if (!tomoyo_policy_loaded) | 926 | if (!tomoyo_policy_loaded) |
927 | return true; | 927 | return true; |
928 | if (!tomoyo_manage_by_non_root && (task->cred->uid || task->cred->euid)) | 928 | if (!tomoyo_manage_by_non_root && |
929 | (!uid_eq(task->cred->uid, GLOBAL_ROOT_UID) || | ||
930 | !uid_eq(task->cred->euid, GLOBAL_ROOT_UID))) | ||
929 | return false; | 931 | return false; |
930 | exe = tomoyo_get_exe(); | 932 | exe = tomoyo_get_exe(); |
931 | if (!exe) | 933 | if (!exe) |
diff --git a/security/tomoyo/common.h b/security/tomoyo/common.h index 75e4dc1c02a0..af010b62d544 100644 --- a/security/tomoyo/common.h +++ b/security/tomoyo/common.h | |||
@@ -561,8 +561,8 @@ struct tomoyo_address_group { | |||
561 | 561 | ||
562 | /* Subset of "struct stat". Used by conditional ACL and audit logs. */ | 562 | /* Subset of "struct stat". Used by conditional ACL and audit logs. */ |
563 | struct tomoyo_mini_stat { | 563 | struct tomoyo_mini_stat { |
564 | uid_t uid; | 564 | kuid_t uid; |
565 | gid_t gid; | 565 | kgid_t gid; |
566 | ino_t ino; | 566 | ino_t ino; |
567 | umode_t mode; | 567 | umode_t mode; |
568 | dev_t dev; | 568 | dev_t dev; |
diff --git a/security/tomoyo/condition.c b/security/tomoyo/condition.c index 986330b8c73e..63681e8be628 100644 --- a/security/tomoyo/condition.c +++ b/security/tomoyo/condition.c | |||
@@ -813,28 +813,28 @@ bool tomoyo_condition(struct tomoyo_request_info *r, | |||
813 | unsigned long value = 0; | 813 | unsigned long value = 0; |
814 | switch (index) { | 814 | switch (index) { |
815 | case TOMOYO_TASK_UID: | 815 | case TOMOYO_TASK_UID: |
816 | value = current_uid(); | 816 | value = from_kuid(&init_user_ns, current_uid()); |
817 | break; | 817 | break; |
818 | case TOMOYO_TASK_EUID: | 818 | case TOMOYO_TASK_EUID: |
819 | value = current_euid(); | 819 | value = from_kuid(&init_user_ns, current_euid()); |
820 | break; | 820 | break; |
821 | case TOMOYO_TASK_SUID: | 821 | case TOMOYO_TASK_SUID: |
822 | value = current_suid(); | 822 | value = from_kuid(&init_user_ns, current_suid()); |
823 | break; | 823 | break; |
824 | case TOMOYO_TASK_FSUID: | 824 | case TOMOYO_TASK_FSUID: |
825 | value = current_fsuid(); | 825 | value = from_kuid(&init_user_ns, current_fsuid()); |
826 | break; | 826 | break; |
827 | case TOMOYO_TASK_GID: | 827 | case TOMOYO_TASK_GID: |
828 | value = current_gid(); | 828 | value = from_kgid(&init_user_ns, current_gid()); |
829 | break; | 829 | break; |
830 | case TOMOYO_TASK_EGID: | 830 | case TOMOYO_TASK_EGID: |
831 | value = current_egid(); | 831 | value = from_kgid(&init_user_ns, current_egid()); |
832 | break; | 832 | break; |
833 | case TOMOYO_TASK_SGID: | 833 | case TOMOYO_TASK_SGID: |
834 | value = current_sgid(); | 834 | value = from_kgid(&init_user_ns, current_sgid()); |
835 | break; | 835 | break; |
836 | case TOMOYO_TASK_FSGID: | 836 | case TOMOYO_TASK_FSGID: |
837 | value = current_fsgid(); | 837 | value = from_kgid(&init_user_ns, current_fsgid()); |
838 | break; | 838 | break; |
839 | case TOMOYO_TASK_PID: | 839 | case TOMOYO_TASK_PID: |
840 | value = tomoyo_sys_getpid(); | 840 | value = tomoyo_sys_getpid(); |
@@ -970,13 +970,13 @@ bool tomoyo_condition(struct tomoyo_request_info *r, | |||
970 | case TOMOYO_PATH2_UID: | 970 | case TOMOYO_PATH2_UID: |
971 | case TOMOYO_PATH1_PARENT_UID: | 971 | case TOMOYO_PATH1_PARENT_UID: |
972 | case TOMOYO_PATH2_PARENT_UID: | 972 | case TOMOYO_PATH2_PARENT_UID: |
973 | value = stat->uid; | 973 | value = from_kuid(&init_user_ns, stat->uid); |
974 | break; | 974 | break; |
975 | case TOMOYO_PATH1_GID: | 975 | case TOMOYO_PATH1_GID: |
976 | case TOMOYO_PATH2_GID: | 976 | case TOMOYO_PATH2_GID: |
977 | case TOMOYO_PATH1_PARENT_GID: | 977 | case TOMOYO_PATH1_PARENT_GID: |
978 | case TOMOYO_PATH2_PARENT_GID: | 978 | case TOMOYO_PATH2_PARENT_GID: |
979 | value = stat->gid; | 979 | value = from_kgid(&init_user_ns, stat->gid); |
980 | break; | 980 | break; |
981 | case TOMOYO_PATH1_INO: | 981 | case TOMOYO_PATH1_INO: |
982 | case TOMOYO_PATH2_INO: | 982 | case TOMOYO_PATH2_INO: |