Lines Matching full:new
237 * @new: The proposed new credentials; alterations should be made here
239 * @effective: A pointer to the proposed new effective capabilities set
240 * @inheritable: A pointer to the proposed new inheritable capabilities set
241 * @permitted: A pointer to the proposed new permitted capabilities set
244 * process's capability sets. The changes are made to the proposed new
247 int cap_capset(struct cred *new, in cap_capset() argument
263 /* no new pI capabilities outside bounding set */ in cap_capset()
266 /* verify restrictions on target's new Permitted set */ in cap_capset()
274 new->cap_effective = *effective; in cap_capset()
275 new->cap_inheritable = *inheritable; in cap_capset()
276 new->cap_permitted = *permitted; in cap_capset()
282 new->cap_ambient = cap_intersect(new->cap_ambient, in cap_capset()
285 if (WARN_ON(!cap_ambient_invariant_ok(new))) in cap_capset()
480 * If all is ok, we return the new size, on error return < 0.
531 * Calculate the new process capability sets from the capability sets attached
539 struct cred *new = bprm->cred; in bprm_caps_from_vfs_caps() local
557 new->cap_permitted.cap[i] = in bprm_caps_from_vfs_caps()
558 (new->cap_bset.cap[i] & permitted) | in bprm_caps_from_vfs_caps()
559 (new->cap_inheritable.cap[i] & inheritable); in bprm_caps_from_vfs_caps()
561 if (permitted & ~new->cap_permitted.cap[i]) in bprm_caps_from_vfs_caps()
724 struct cred *new = bprm->cred; in handle_privileged_root() local
733 if (has_fcap && __is_suid(root_uid, new)) { in handle_privileged_root()
742 if (__is_eff(root_uid, new) || __is_real(root_uid, new)) { in handle_privileged_root()
744 new->cap_permitted = cap_combine(old->cap_bset, in handle_privileged_root()
750 if (__is_eff(root_uid, new)) in handle_privileged_root()
761 static inline bool __is_setuid(struct cred *new, const struct cred *old) in __is_setuid() argument
762 { return !uid_eq(new->euid, old->uid); } in __is_setuid()
764 static inline bool __is_setgid(struct cred *new, const struct cred *old) in __is_setgid() argument
765 { return !gid_eq(new->egid, old->gid); } in __is_setgid()
784 static inline bool nonroot_raised_pE(struct cred *new, const struct cred *old, in nonroot_raised_pE() argument
789 if ((__cap_grew(effective, ambient, new) && in nonroot_raised_pE()
790 !(__cap_full(effective, new) && in nonroot_raised_pE()
791 (__is_eff(root, new) || __is_real(root, new)) && in nonroot_raised_pE()
794 __is_suid(root, new) && in nonroot_raised_pE()
795 !__cap_full(effective, new)) || in nonroot_raised_pE()
796 (!__is_setuid(new, old) && in nonroot_raised_pE()
798 __cap_gained(permitted, new, old)) || in nonroot_raised_pE()
799 __cap_gained(ambient, new, old)))) in nonroot_raised_pE()
810 * Set up the proposed credentials for a new execution context being
817 struct cred *new = bprm->cred; in cap_bprm_set_creds() local
822 new->cap_ambient = old->cap_ambient; in cap_bprm_set_creds()
830 root_uid = make_kuid(new->user_ns, 0); in cap_bprm_set_creds()
835 if (__cap_gained(permitted, new, old)) in cap_bprm_set_creds()
841 * In addition, if NO_NEW_PRIVS, then ensure we get no new privs. in cap_bprm_set_creds()
843 is_setid = __is_setuid(new, old) || __is_setgid(new, old); in cap_bprm_set_creds()
845 if ((is_setid || __cap_gained(permitted, new, old)) && in cap_bprm_set_creds()
847 !ptracer_capable(current, new->user_ns))) { in cap_bprm_set_creds()
849 if (!ns_capable(new->user_ns, CAP_SETUID) || in cap_bprm_set_creds()
851 new->euid = new->uid; in cap_bprm_set_creds()
852 new->egid = new->gid; in cap_bprm_set_creds()
854 new->cap_permitted = cap_intersect(new->cap_permitted, in cap_bprm_set_creds()
858 new->suid = new->fsuid = new->euid; in cap_bprm_set_creds()
859 new->sgid = new->fsgid = new->egid; in cap_bprm_set_creds()
863 cap_clear(new->cap_ambient); in cap_bprm_set_creds()
869 new->cap_permitted = cap_combine(new->cap_permitted, new->cap_ambient); in cap_bprm_set_creds()
876 new->cap_effective = new->cap_permitted; in cap_bprm_set_creds()
878 new->cap_effective = new->cap_ambient; in cap_bprm_set_creds()
880 if (WARN_ON(!cap_ambient_invariant_ok(new))) in cap_bprm_set_creds()
883 if (nonroot_raised_pE(new, old, root_uid, has_fcap)) { in cap_bprm_set_creds()
884 ret = audit_log_bprm_fcaps(bprm, new, old); in cap_bprm_set_creds()
889 new->securebits &= ~issecure_mask(SECURE_KEEP_CAPS); in cap_bprm_set_creds()
891 if (WARN_ON(!cap_ambient_invariant_ok(new))) in cap_bprm_set_creds()
897 (!__is_real(root_uid, new) && in cap_bprm_set_creds()
899 __cap_grew(permitted, ambient, new)))) in cap_bprm_set_creds()
995 * cevans - New behaviour, Oct '99
1005 static inline void cap_emulate_setxuid(struct cred *new, const struct cred *old) in cap_emulate_setxuid() argument
1012 (!uid_eq(new->uid, root_uid) && in cap_emulate_setxuid()
1013 !uid_eq(new->euid, root_uid) && in cap_emulate_setxuid()
1014 !uid_eq(new->suid, root_uid))) { in cap_emulate_setxuid()
1016 cap_clear(new->cap_permitted); in cap_emulate_setxuid()
1017 cap_clear(new->cap_effective); in cap_emulate_setxuid()
1025 cap_clear(new->cap_ambient); in cap_emulate_setxuid()
1027 if (uid_eq(old->euid, root_uid) && !uid_eq(new->euid, root_uid)) in cap_emulate_setxuid()
1028 cap_clear(new->cap_effective); in cap_emulate_setxuid()
1029 if (!uid_eq(old->euid, root_uid) && uid_eq(new->euid, root_uid)) in cap_emulate_setxuid()
1030 new->cap_effective = new->cap_permitted; in cap_emulate_setxuid()
1035 * @new: The proposed credentials
1042 int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags) in cap_task_fix_setuid() argument
1051 cap_emulate_setxuid(new, old); in cap_task_fix_setuid()
1063 if (uid_eq(old->fsuid, root_uid) && !uid_eq(new->fsuid, root_uid)) in cap_task_fix_setuid()
1064 new->cap_effective = in cap_task_fix_setuid()
1065 cap_drop_fs_set(new->cap_effective); in cap_task_fix_setuid()
1067 if (!uid_eq(old->fsuid, root_uid) && uid_eq(new->fsuid, root_uid)) in cap_task_fix_setuid()
1068 new->cap_effective = in cap_task_fix_setuid()
1069 cap_raise_fs_set(new->cap_effective, in cap_task_fix_setuid()
1070 new->cap_permitted); in cap_task_fix_setuid()
1149 struct cred *new; in cap_prctl_drop() local
1156 new = prepare_creds(); in cap_prctl_drop()
1157 if (!new) in cap_prctl_drop()
1159 cap_lower(new->cap_bset, cap); in cap_prctl_drop()
1160 return commit_creds(new); in cap_prctl_drop()
1179 struct cred *new; in cap_task_prctl() local
1229 new = prepare_creds(); in cap_task_prctl()
1230 if (!new) in cap_task_prctl()
1232 new->securebits = arg2; in cap_task_prctl()
1233 return commit_creds(new); in cap_task_prctl()
1247 new = prepare_creds(); in cap_task_prctl()
1248 if (!new) in cap_task_prctl()
1251 new->securebits |= issecure_mask(SECURE_KEEP_CAPS); in cap_task_prctl()
1253 new->securebits &= ~issecure_mask(SECURE_KEEP_CAPS); in cap_task_prctl()
1254 return commit_creds(new); in cap_task_prctl()
1261 new = prepare_creds(); in cap_task_prctl()
1262 if (!new) in cap_task_prctl()
1264 cap_clear(new->cap_ambient); in cap_task_prctl()
1265 return commit_creds(new); in cap_task_prctl()
1284 new = prepare_creds(); in cap_task_prctl()
1285 if (!new) in cap_task_prctl()
1288 cap_raise(new->cap_ambient, arg3); in cap_task_prctl()
1290 cap_lower(new->cap_ambient, arg3); in cap_task_prctl()
1291 return commit_creds(new); in cap_task_prctl()
1301 * cap_vm_enough_memory - Determine whether a new virtual mapping is permitted
1302 * @mm: The VM space in which the new mapping is to be made
1305 * Determine whether the allocation of a new virtual mapping by the current