Lines Matching +full:smp +full:- +full:capable
1 // SPDX-License-Identifier: GPL-2.0
25 #include <linux/posix-timers.h>
78 # define SET_UNALIGN_CTL(a, b) (-EINVAL)
81 # define GET_UNALIGN_CTL(a, b) (-EINVAL)
84 # define SET_FPEMU_CTL(a, b) (-EINVAL)
87 # define GET_FPEMU_CTL(a, b) (-EINVAL)
90 # define SET_FPEXC_CTL(a, b) (-EINVAL)
93 # define GET_FPEXC_CTL(a, b) (-EINVAL)
96 # define GET_ENDIAN(a, b) (-EINVAL)
99 # define SET_ENDIAN(a, b) (-EINVAL)
102 # define GET_TSC_CTL(a) (-EINVAL)
105 # define SET_TSC_CTL(a) (-EINVAL)
108 # define GET_FP_MODE(a) (-EINVAL)
111 # define SET_FP_MODE(a,b) (-EINVAL)
114 # define SVE_SET_VL(a) (-EINVAL)
117 # define SVE_GET_VL() (-EINVAL)
120 # define PAC_RESET_KEYS(a, b) (-EINVAL)
123 # define PAC_SET_ENABLED_KEYS(a, b, c) (-EINVAL)
126 # define PAC_GET_ENABLED_KEYS(a) (-EINVAL)
129 # define SET_TAGGED_ADDR_CTRL(a) (-EINVAL)
132 # define GET_TAGGED_ADDR_CTRL() (-EINVAL)
136 * this is where the system-wide overflow UID and GID are defined, for
137 * architectures that now have 32-bit UID/GID but didn't in the past
147 * the same as above, but for filesystems which can only store a 16-bit
167 if (uid_eq(pcred->uid, cred->euid) || in set_one_prio_perm()
168 uid_eq(pcred->euid, cred->euid)) in set_one_prio_perm()
170 if (ns_capable(pcred->user_ns, CAP_SYS_NICE)) in set_one_prio_perm()
177 * - the caller must hold the RCU read lock
184 error = -EPERM; in set_one_prio()
188 error = -EACCES; in set_one_prio()
196 if (error == -ESRCH) in set_one_prio()
208 int error = -EINVAL; in SYSCALL_DEFINE3()
216 error = -ESRCH; in SYSCALL_DEFINE3()
243 uid = make_kuid(cred->user_ns, who); in SYSCALL_DEFINE3()
244 user = cred->user; in SYSCALL_DEFINE3()
246 uid = cred->uid; in SYSCALL_DEFINE3()
247 else if (!uid_eq(uid, cred->uid)) { in SYSCALL_DEFINE3()
256 if (!uid_eq(uid, cred->uid)) in SYSCALL_DEFINE3()
269 * not return the normal nice-value, but a negated value that
270 * has been offset by 20 (ie it returns 40..1 instead of -20..19)
278 long niceval, retval = -ESRCH; in SYSCALL_DEFINE2()
283 return -EINVAL; in SYSCALL_DEFINE2()
311 uid = make_kuid(cred->user_ns, who); in SYSCALL_DEFINE2()
312 user = cred->user; in SYSCALL_DEFINE2()
314 uid = cred->uid; in SYSCALL_DEFINE2()
315 else if (!uid_eq(uid, cred->uid)) { in SYSCALL_DEFINE2()
327 if (!uid_eq(uid, cred->uid)) in SYSCALL_DEFINE2()
340 * or vice versa. (BSD-style)
353 * SMP: There are not races, the GIDs are checked only by filesystem
368 if ((rgid != (gid_t) -1) && !gid_valid(krgid)) in __sys_setregid()
369 return -EINVAL; in __sys_setregid()
370 if ((egid != (gid_t) -1) && !gid_valid(kegid)) in __sys_setregid()
371 return -EINVAL; in __sys_setregid()
375 return -ENOMEM; in __sys_setregid()
378 retval = -EPERM; in __sys_setregid()
379 if (rgid != (gid_t) -1) { in __sys_setregid()
380 if (gid_eq(old->gid, krgid) || in __sys_setregid()
381 gid_eq(old->egid, krgid) || in __sys_setregid()
382 ns_capable_setid(old->user_ns, CAP_SETGID)) in __sys_setregid()
383 new->gid = krgid; in __sys_setregid()
387 if (egid != (gid_t) -1) { in __sys_setregid()
388 if (gid_eq(old->gid, kegid) || in __sys_setregid()
389 gid_eq(old->egid, kegid) || in __sys_setregid()
390 gid_eq(old->sgid, kegid) || in __sys_setregid()
391 ns_capable_setid(old->user_ns, CAP_SETGID)) in __sys_setregid()
392 new->egid = kegid; in __sys_setregid()
397 if (rgid != (gid_t) -1 || in __sys_setregid()
398 (egid != (gid_t) -1 && !gid_eq(kegid, old->gid))) in __sys_setregid()
399 new->sgid = new->egid; in __sys_setregid()
400 new->fsgid = new->egid; in __sys_setregid()
421 * SMP: Same implicit races as above.
433 return -EINVAL; in __sys_setgid()
437 return -ENOMEM; in __sys_setgid()
440 retval = -EPERM; in __sys_setgid()
441 if (ns_capable_setid(old->user_ns, CAP_SETGID)) in __sys_setgid()
442 new->gid = new->egid = new->sgid = new->fsgid = kgid; in __sys_setgid()
443 else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid)) in __sys_setgid()
444 new->egid = new->fsgid = kgid; in __sys_setgid()
471 new_user = alloc_uid(new->uid); in set_user()
473 return -EAGAIN; in set_user()
482 if (is_ucounts_overlimit(new->ucounts, UCOUNT_RLIMIT_NPROC, rlimit(RLIMIT_NPROC)) && in set_user()
484 !capable(CAP_SYS_RESOURCE) && !capable(CAP_SYS_ADMIN)) in set_user()
485 current->flags |= PF_NPROC_EXCEEDED; in set_user()
487 current->flags &= ~PF_NPROC_EXCEEDED; in set_user()
489 free_uid(new->user); in set_user()
490 new->user = new_user; in set_user()
496 * or vice versa. (BSD-style)
520 if ((ruid != (uid_t) -1) && !uid_valid(kruid)) in __sys_setreuid()
521 return -EINVAL; in __sys_setreuid()
522 if ((euid != (uid_t) -1) && !uid_valid(keuid)) in __sys_setreuid()
523 return -EINVAL; in __sys_setreuid()
527 return -ENOMEM; in __sys_setreuid()
530 retval = -EPERM; in __sys_setreuid()
531 if (ruid != (uid_t) -1) { in __sys_setreuid()
532 new->uid = kruid; in __sys_setreuid()
533 if (!uid_eq(old->uid, kruid) && in __sys_setreuid()
534 !uid_eq(old->euid, kruid) && in __sys_setreuid()
535 !ns_capable_setid(old->user_ns, CAP_SETUID)) in __sys_setreuid()
539 if (euid != (uid_t) -1) { in __sys_setreuid()
540 new->euid = keuid; in __sys_setreuid()
541 if (!uid_eq(old->uid, keuid) && in __sys_setreuid()
542 !uid_eq(old->euid, keuid) && in __sys_setreuid()
543 !uid_eq(old->suid, keuid) && in __sys_setreuid()
544 !ns_capable_setid(old->user_ns, CAP_SETUID)) in __sys_setreuid()
548 if (!uid_eq(new->uid, old->uid)) { in __sys_setreuid()
553 if (ruid != (uid_t) -1 || in __sys_setreuid()
554 (euid != (uid_t) -1 && !uid_eq(keuid, old->uid))) in __sys_setreuid()
555 new->suid = new->euid; in __sys_setreuid()
556 new->fsuid = new->euid; in __sys_setreuid()
585 * in the POSIX committee and/or USG. Note that the BSD-style setreuid()
599 return -EINVAL; in __sys_setuid()
603 return -ENOMEM; in __sys_setuid()
606 retval = -EPERM; in __sys_setuid()
607 if (ns_capable_setid(old->user_ns, CAP_SETUID)) { in __sys_setuid()
608 new->suid = new->uid = kuid; in __sys_setuid()
609 if (!uid_eq(kuid, old->uid)) { in __sys_setuid()
614 } else if (!uid_eq(kuid, old->uid) && !uid_eq(kuid, new->suid)) { in __sys_setuid()
618 new->fsuid = new->euid = kuid; in __sys_setuid()
657 if ((ruid != (uid_t) -1) && !uid_valid(kruid)) in __sys_setresuid()
658 return -EINVAL; in __sys_setresuid()
660 if ((euid != (uid_t) -1) && !uid_valid(keuid)) in __sys_setresuid()
661 return -EINVAL; in __sys_setresuid()
663 if ((suid != (uid_t) -1) && !uid_valid(ksuid)) in __sys_setresuid()
664 return -EINVAL; in __sys_setresuid()
668 return -ENOMEM; in __sys_setresuid()
672 retval = -EPERM; in __sys_setresuid()
673 if (!ns_capable_setid(old->user_ns, CAP_SETUID)) { in __sys_setresuid()
674 if (ruid != (uid_t) -1 && !uid_eq(kruid, old->uid) && in __sys_setresuid()
675 !uid_eq(kruid, old->euid) && !uid_eq(kruid, old->suid)) in __sys_setresuid()
677 if (euid != (uid_t) -1 && !uid_eq(keuid, old->uid) && in __sys_setresuid()
678 !uid_eq(keuid, old->euid) && !uid_eq(keuid, old->suid)) in __sys_setresuid()
680 if (suid != (uid_t) -1 && !uid_eq(ksuid, old->uid) && in __sys_setresuid()
681 !uid_eq(ksuid, old->euid) && !uid_eq(ksuid, old->suid)) in __sys_setresuid()
685 if (ruid != (uid_t) -1) { in __sys_setresuid()
686 new->uid = kruid; in __sys_setresuid()
687 if (!uid_eq(kruid, old->uid)) { in __sys_setresuid()
693 if (euid != (uid_t) -1) in __sys_setresuid()
694 new->euid = keuid; in __sys_setresuid()
695 if (suid != (uid_t) -1) in __sys_setresuid()
696 new->suid = ksuid; in __sys_setresuid()
697 new->fsuid = new->euid; in __sys_setresuid()
725 ruid = from_kuid_munged(cred->user_ns, cred->uid); in SYSCALL_DEFINE3()
726 euid = from_kuid_munged(cred->user_ns, cred->euid); in SYSCALL_DEFINE3()
727 suid = from_kuid_munged(cred->user_ns, cred->suid); in SYSCALL_DEFINE3()
753 if ((rgid != (gid_t) -1) && !gid_valid(krgid)) in __sys_setresgid()
754 return -EINVAL; in __sys_setresgid()
755 if ((egid != (gid_t) -1) && !gid_valid(kegid)) in __sys_setresgid()
756 return -EINVAL; in __sys_setresgid()
757 if ((sgid != (gid_t) -1) && !gid_valid(ksgid)) in __sys_setresgid()
758 return -EINVAL; in __sys_setresgid()
762 return -ENOMEM; in __sys_setresgid()
765 retval = -EPERM; in __sys_setresgid()
766 if (!ns_capable_setid(old->user_ns, CAP_SETGID)) { in __sys_setresgid()
767 if (rgid != (gid_t) -1 && !gid_eq(krgid, old->gid) && in __sys_setresgid()
768 !gid_eq(krgid, old->egid) && !gid_eq(krgid, old->sgid)) in __sys_setresgid()
770 if (egid != (gid_t) -1 && !gid_eq(kegid, old->gid) && in __sys_setresgid()
771 !gid_eq(kegid, old->egid) && !gid_eq(kegid, old->sgid)) in __sys_setresgid()
773 if (sgid != (gid_t) -1 && !gid_eq(ksgid, old->gid) && in __sys_setresgid()
774 !gid_eq(ksgid, old->egid) && !gid_eq(ksgid, old->sgid)) in __sys_setresgid()
778 if (rgid != (gid_t) -1) in __sys_setresgid()
779 new->gid = krgid; in __sys_setresgid()
780 if (egid != (gid_t) -1) in __sys_setresgid()
781 new->egid = kegid; in __sys_setresgid()
782 if (sgid != (gid_t) -1) in __sys_setresgid()
783 new->sgid = ksgid; in __sys_setresgid()
784 new->fsgid = new->egid; in __sys_setresgid()
808 rgid = from_kgid_munged(cred->user_ns, cred->gid); in SYSCALL_DEFINE3()
809 egid = from_kgid_munged(cred->user_ns, cred->egid); in SYSCALL_DEFINE3()
810 sgid = from_kgid_munged(cred->user_ns, cred->sgid); in SYSCALL_DEFINE3()
824 * "setfsuid()" sets the fsuid - the uid used for filesystem checks. This
837 old_fsuid = from_kuid_munged(old->user_ns, old->fsuid); in __sys_setfsuid()
839 kuid = make_kuid(old->user_ns, uid); in __sys_setfsuid()
847 if (uid_eq(kuid, old->uid) || uid_eq(kuid, old->euid) || in __sys_setfsuid()
848 uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) || in __sys_setfsuid()
849 ns_capable_setid(old->user_ns, CAP_SETUID)) { in __sys_setfsuid()
850 if (!uid_eq(kuid, old->fsuid)) { in __sys_setfsuid()
851 new->fsuid = kuid; in __sys_setfsuid()
881 old_fsgid = from_kgid_munged(old->user_ns, old->fsgid); in __sys_setfsgid()
883 kgid = make_kgid(old->user_ns, gid); in __sys_setfsgid()
891 if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->egid) || in __sys_setfsgid()
892 gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) || in __sys_setfsgid()
893 ns_capable_setid(old->user_ns, CAP_SETGID)) { in __sys_setfsgid()
894 if (!gid_eq(kgid, old->fsgid)) { in __sys_setfsgid()
895 new->fsgid = kgid; in __sys_setfsgid()
916 * sys_getpid - return the thread group id of the current process
922 * This is SMP safe as current->tgid does not change.
929 /* Thread ID - the internal kernel "pid" */
936 * Accessing ->real_parent is not SMP-safe, it could
938 * value of ->real_parent under rcu_read_lock(), see
939 * release_task()->call_rcu(delayed_put_task_struct).
946 pid = task_tgid_vnr(rcu_dereference(current->real_parent)); in SYSCALL_DEFINE0()
954 /* Only we change this so SMP safe */ in SYSCALL_DEFINE0()
960 /* Only we change this so SMP safe */ in SYSCALL_DEFINE0()
966 /* Only we change this so SMP safe */ in SYSCALL_DEFINE0()
972 /* Only we change this so SMP safe */ in SYSCALL_DEFINE0()
981 cutime = current->signal->cutime; in do_sys_times()
982 cstime = current->signal->cstime; in do_sys_times()
983 tms->tms_utime = nsec_to_clock_t(tgutime); in do_sys_times()
984 tms->tms_stime = nsec_to_clock_t(tgstime); in do_sys_times()
985 tms->tms_cutime = nsec_to_clock_t(cutime); in do_sys_times()
986 tms->tms_cstime = nsec_to_clock_t(cstime); in do_sys_times()
996 return -EFAULT; in SYSCALL_DEFINE1()
1021 return -EFAULT; in COMPAT_SYSCALL_DEFINE1()
1034 * only important on a multi-user system anyway, to make sure one user
1035 * can't send a signal to a process owned by another. -TYT, 12/12/91
1042 struct task_struct *group_leader = current->group_leader; in SYSCALL_DEFINE2()
1051 return -EINVAL; in SYSCALL_DEFINE2()
1055 * so that our parent does not change from under us. -DaveM in SYSCALL_DEFINE2()
1059 err = -ESRCH; in SYSCALL_DEFINE2()
1064 err = -EINVAL; in SYSCALL_DEFINE2()
1068 if (same_thread_group(p->real_parent, group_leader)) { in SYSCALL_DEFINE2()
1069 err = -EPERM; in SYSCALL_DEFINE2()
1072 err = -EACCES; in SYSCALL_DEFINE2()
1073 if (!(p->flags & PF_FORKNOEXEC)) in SYSCALL_DEFINE2()
1076 err = -ESRCH; in SYSCALL_DEFINE2()
1081 err = -EPERM; in SYSCALL_DEFINE2()
1082 if (p->signal->leader) in SYSCALL_DEFINE2()
1104 /* All paths lead to here, thus we are safe. -DaveM */ in SYSCALL_DEFINE2()
1120 retval = -ESRCH; in do_getpgid()
1162 retval = -ESRCH; in SYSCALL_DEFINE1()
1182 struct task_struct *curr = current->group_leader; in set_special_pids()
1193 struct task_struct *group_leader = current->group_leader; in ksys_setsid()
1196 int err = -EPERM; in ksys_setsid()
1200 if (group_leader->signal->leader) in ksys_setsid()
1209 group_leader->signal->leader = 1; in ksys_setsid()
1233 (personality(current->personality) == PER_LINUX32 && \
1234 copy_to_user(name->machine, COMPAT_UTS_MACHINE, \
1250 if (current->personality & UNAME26) { in override_release()
1280 return -EFAULT; in SYSCALL_DEFINE1()
1282 if (override_release(name->release, sizeof(name->release))) in SYSCALL_DEFINE1()
1283 return -EFAULT; in SYSCALL_DEFINE1()
1285 return -EFAULT; in SYSCALL_DEFINE1()
1298 return -EFAULT; in SYSCALL_DEFINE1()
1304 return -EFAULT; in SYSCALL_DEFINE1()
1306 if (override_release(name->release, sizeof(name->release))) in SYSCALL_DEFINE1()
1307 return -EFAULT; in SYSCALL_DEFINE1()
1309 return -EFAULT; in SYSCALL_DEFINE1()
1318 return -EFAULT; in SYSCALL_DEFINE1()
1323 memcpy(&tmp.sysname, &utsname()->sysname, __OLD_UTS_LEN); in SYSCALL_DEFINE1()
1324 memcpy(&tmp.nodename, &utsname()->nodename, __OLD_UTS_LEN); in SYSCALL_DEFINE1()
1325 memcpy(&tmp.release, &utsname()->release, __OLD_UTS_LEN); in SYSCALL_DEFINE1()
1326 memcpy(&tmp.version, &utsname()->version, __OLD_UTS_LEN); in SYSCALL_DEFINE1()
1327 memcpy(&tmp.machine, &utsname()->machine, __OLD_UTS_LEN); in SYSCALL_DEFINE1()
1330 return -EFAULT; in SYSCALL_DEFINE1()
1333 return -EFAULT; in SYSCALL_DEFINE1()
1334 if (override_release(name->release, sizeof(name->release))) in SYSCALL_DEFINE1()
1335 return -EFAULT; in SYSCALL_DEFINE1()
1345 if (!ns_capable(current->nsproxy->uts_ns->user_ns, CAP_SYS_ADMIN)) in SYSCALL_DEFINE2()
1346 return -EPERM; in SYSCALL_DEFINE2()
1349 return -EINVAL; in SYSCALL_DEFINE2()
1350 errno = -EFAULT; in SYSCALL_DEFINE2()
1356 memcpy(u->nodename, tmp, len); in SYSCALL_DEFINE2()
1357 memset(u->nodename + len, 0, sizeof(u->nodename) - len); in SYSCALL_DEFINE2()
1374 return -EINVAL; in SYSCALL_DEFINE2()
1377 i = 1 + strlen(u->nodename); in SYSCALL_DEFINE2()
1380 memcpy(tmp, u->nodename, i); in SYSCALL_DEFINE2()
1383 return -EFAULT; in SYSCALL_DEFINE2()
1398 if (!ns_capable(current->nsproxy->uts_ns->user_ns, CAP_SYS_ADMIN)) in SYSCALL_DEFINE2()
1399 return -EPERM; in SYSCALL_DEFINE2()
1401 return -EINVAL; in SYSCALL_DEFINE2()
1403 errno = -EFAULT; in SYSCALL_DEFINE2()
1409 memcpy(u->domainname, tmp, len); in SYSCALL_DEFINE2()
1410 memset(u->domainname + len, 0, sizeof(u->domainname) - len); in SYSCALL_DEFINE2()
1425 ret = copy_to_user(rlim, &value, sizeof(*rlim)) ? -EFAULT : 0; in SYSCALL_DEFINE2()
1439 return -EFAULT; in COMPAT_SYSCALL_DEFINE2()
1471 return -EFAULT; in COMPAT_SYSCALL_DEFINE2()
1488 return -EINVAL; in SYSCALL_DEFINE2()
1491 task_lock(current->group_leader); in SYSCALL_DEFINE2()
1492 x = current->signal->rlim[resource]; in SYSCALL_DEFINE2()
1493 task_unlock(current->group_leader); in SYSCALL_DEFINE2()
1498 return copy_to_user(rlim, &x, sizeof(x)) ? -EFAULT : 0; in SYSCALL_DEFINE2()
1508 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
1511 task_lock(current->group_leader); in COMPAT_SYSCALL_DEFINE2()
1512 r = current->signal->rlim[resource]; in COMPAT_SYSCALL_DEFINE2()
1513 task_unlock(current->group_leader); in COMPAT_SYSCALL_DEFINE2()
1519 if (put_user(r.rlim_cur, &rlim->rlim_cur) || in COMPAT_SYSCALL_DEFINE2()
1520 put_user(r.rlim_max, &rlim->rlim_max)) in COMPAT_SYSCALL_DEFINE2()
1521 return -EFAULT; in COMPAT_SYSCALL_DEFINE2()
1539 if (rlim->rlim_cur == RLIM_INFINITY) in rlim_to_rlim64()
1540 rlim64->rlim_cur = RLIM64_INFINITY; in rlim_to_rlim64()
1542 rlim64->rlim_cur = rlim->rlim_cur; in rlim_to_rlim64()
1543 if (rlim->rlim_max == RLIM_INFINITY) in rlim_to_rlim64()
1544 rlim64->rlim_max = RLIM64_INFINITY; in rlim_to_rlim64()
1546 rlim64->rlim_max = rlim->rlim_max; in rlim_to_rlim64()
1551 if (rlim64_is_infinity(rlim64->rlim_cur)) in rlim64_to_rlim()
1552 rlim->rlim_cur = RLIM_INFINITY; in rlim64_to_rlim()
1554 rlim->rlim_cur = (unsigned long)rlim64->rlim_cur; in rlim64_to_rlim()
1555 if (rlim64_is_infinity(rlim64->rlim_max)) in rlim64_to_rlim()
1556 rlim->rlim_max = RLIM_INFINITY; in rlim64_to_rlim()
1558 rlim->rlim_max = (unsigned long)rlim64->rlim_max; in rlim64_to_rlim()
1569 return -EINVAL; in do_prlimit()
1571 if (new_rlim->rlim_cur > new_rlim->rlim_max) in do_prlimit()
1572 return -EINVAL; in do_prlimit()
1574 new_rlim->rlim_max > sysctl_nr_open) in do_prlimit()
1575 return -EPERM; in do_prlimit()
1578 /* protect tsk->signal and tsk->sighand from disappearing */ in do_prlimit()
1580 if (!tsk->sighand) { in do_prlimit()
1581 retval = -ESRCH; in do_prlimit()
1585 rlim = tsk->signal->rlim + resource; in do_prlimit()
1586 task_lock(tsk->group_leader); in do_prlimit()
1588 /* Keep the capable check against init_user_ns until in do_prlimit()
1590 if (new_rlim->rlim_max > rlim->rlim_max && in do_prlimit()
1591 !capable(CAP_SYS_RESOURCE)) in do_prlimit()
1592 retval = -EPERM; in do_prlimit()
1602 task_unlock(tsk->group_leader); in do_prlimit()
1610 new_rlim->rlim_cur != RLIM_INFINITY && in do_prlimit()
1612 update_rlimit_cpu(tsk, new_rlim->rlim_cur); in do_prlimit()
1629 id_match = (uid_eq(cred->uid, tcred->euid) && in check_prlimit_permission()
1630 uid_eq(cred->uid, tcred->suid) && in check_prlimit_permission()
1631 uid_eq(cred->uid, tcred->uid) && in check_prlimit_permission()
1632 gid_eq(cred->gid, tcred->egid) && in check_prlimit_permission()
1633 gid_eq(cred->gid, tcred->sgid) && in check_prlimit_permission()
1634 gid_eq(cred->gid, tcred->gid)); in check_prlimit_permission()
1635 if (!id_match && !ns_capable(tcred->user_ns, CAP_SYS_RESOURCE)) in check_prlimit_permission()
1636 return -EPERM; in check_prlimit_permission()
1656 return -EFAULT; in SYSCALL_DEFINE4()
1665 return -ESRCH; in SYSCALL_DEFINE4()
1681 ret = -EFAULT; in SYSCALL_DEFINE4()
1693 return -EFAULT; in SYSCALL_DEFINE2()
1705 * When sampling multiple threads for RUSAGE_SELF, under SMP we might have
1709 * the c* fields from p->signal from races with exit.c updating those
1715 * for the cases current multithreaded, non-current single threaded
1716 * non-current multithreaded. Thread traversal is now safe with
1720 * else can reap the children to update signal->c* counters, and no one else
1721 * can race with the signal-> fields. If we do not take any lock, the
1722 * signal-> fields could be read out of order while another thread was just
1725 * as __exit_signal releases the siglock spinlock after updating the signal->
1732 r->ru_nvcsw += t->nvcsw; in accumulate_thread_rusage()
1733 r->ru_nivcsw += t->nivcsw; in accumulate_thread_rusage()
1734 r->ru_minflt += t->min_flt; in accumulate_thread_rusage()
1735 r->ru_majflt += t->maj_flt; in accumulate_thread_rusage()
1736 r->ru_inblock += task_io_get_inblock(t); in accumulate_thread_rusage()
1737 r->ru_oublock += task_io_get_oublock(t); in accumulate_thread_rusage()
1753 maxrss = p->signal->maxrss; in getrusage()
1763 utime = p->signal->cutime; in getrusage()
1764 stime = p->signal->cstime; in getrusage()
1765 r->ru_nvcsw = p->signal->cnvcsw; in getrusage()
1766 r->ru_nivcsw = p->signal->cnivcsw; in getrusage()
1767 r->ru_minflt = p->signal->cmin_flt; in getrusage()
1768 r->ru_majflt = p->signal->cmaj_flt; in getrusage()
1769 r->ru_inblock = p->signal->cinblock; in getrusage()
1770 r->ru_oublock = p->signal->coublock; in getrusage()
1771 maxrss = p->signal->cmaxrss; in getrusage()
1781 r->ru_nvcsw += p->signal->nvcsw; in getrusage()
1782 r->ru_nivcsw += p->signal->nivcsw; in getrusage()
1783 r->ru_minflt += p->signal->min_flt; in getrusage()
1784 r->ru_majflt += p->signal->maj_flt; in getrusage()
1785 r->ru_inblock += p->signal->inblock; in getrusage()
1786 r->ru_oublock += p->signal->oublock; in getrusage()
1787 if (maxrss < p->signal->maxrss) in getrusage()
1788 maxrss = p->signal->maxrss; in getrusage()
1801 r->ru_utime = ns_to_kernel_old_timeval(utime); in getrusage()
1802 r->ru_stime = ns_to_kernel_old_timeval(stime); in getrusage()
1812 r->ru_maxrss = maxrss * (PAGE_SIZE / 1024); /* convert pages to KBs */ in getrusage()
1821 return -EINVAL; in SYSCALL_DEFINE2()
1824 return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0; in SYSCALL_DEFINE2()
1834 return -EINVAL; in COMPAT_SYSCALL_DEFINE2()
1843 mask = xchg(¤t->fs->umask, mask & S_IRWXUGO); in SYSCALL_DEFINE1()
1855 return -EBADF; in prctl_set_mm_exe_file()
1860 * Because the original mm->exe_file points to executable file, make in prctl_set_mm_exe_file()
1864 err = -EACCES; in prctl_set_mm_exe_file()
1865 if (!S_ISREG(inode->i_mode) || path_noexec(&exe.file->f_path)) in prctl_set_mm_exe_file()
1887 int error = -EINVAL, i; in validate_prctl_map_addr()
1919 ((unsigned long)prctl_map->__m1 __op \ in validate_prctl_map_addr()
1920 (unsigned long)prctl_map->__m2) ? 0 : -EINVAL in validate_prctl_map_addr()
1930 error = -EINVAL; in validate_prctl_map_addr()
1935 if (check_data_rlimit(rlimit(RLIMIT_DATA), prctl_map->brk, in validate_prctl_map_addr()
1936 prctl_map->start_brk, prctl_map->end_data, in validate_prctl_map_addr()
1937 prctl_map->start_data)) in validate_prctl_map_addr()
1948 struct prctl_mm_map prctl_map = { .exe_fd = (u32)-1, }; in prctl_set_mm_map()
1950 struct mm_struct *mm = current->mm; in prctl_set_mm_map()
1953 BUILD_BUG_ON(sizeof(user_auxv) != sizeof(mm->saved_auxv)); in prctl_set_mm_map()
1961 return -EINVAL; in prctl_set_mm_map()
1964 return -EFAULT; in prctl_set_mm_map()
1975 prctl_map.auxv_size > sizeof(mm->saved_auxv)) in prctl_set_mm_map()
1976 return -EINVAL; in prctl_set_mm_map()
1982 return -EFAULT; in prctl_set_mm_map()
1985 user_auxv[AT_VECTOR_SIZE - 2] = AT_NULL; in prctl_set_mm_map()
1986 user_auxv[AT_VECTOR_SIZE - 1] = AT_NULL; in prctl_set_mm_map()
1989 if (prctl_map.exe_fd != (u32)-1) { in prctl_set_mm_map()
1991 * Check if the current user is checkpoint/restore capable. in prctl_set_mm_map()
1999 return -EPERM; in prctl_set_mm_map()
2018 * - @start_brk/@brk which are used in do_brk_flags but kernel lookups in prctl_set_mm_map()
2024 spin_lock(&mm->arg_lock); in prctl_set_mm_map()
2025 mm->start_code = prctl_map.start_code; in prctl_set_mm_map()
2026 mm->end_code = prctl_map.end_code; in prctl_set_mm_map()
2027 mm->start_data = prctl_map.start_data; in prctl_set_mm_map()
2028 mm->end_data = prctl_map.end_data; in prctl_set_mm_map()
2029 mm->start_brk = prctl_map.start_brk; in prctl_set_mm_map()
2030 mm->brk = prctl_map.brk; in prctl_set_mm_map()
2031 mm->start_stack = prctl_map.start_stack; in prctl_set_mm_map()
2032 mm->arg_start = prctl_map.arg_start; in prctl_set_mm_map()
2033 mm->arg_end = prctl_map.arg_end; in prctl_set_mm_map()
2034 mm->env_start = prctl_map.env_start; in prctl_set_mm_map()
2035 mm->env_end = prctl_map.env_end; in prctl_set_mm_map()
2036 spin_unlock(&mm->arg_lock); in prctl_set_mm_map()
2041 * updating -- it may get partly updated results. It's in prctl_set_mm_map()
2047 memcpy(mm->saved_auxv, user_auxv, sizeof(user_auxv)); in prctl_set_mm_map()
2066 return -EINVAL; in prctl_set_auxv()
2069 return -EFAULT; in prctl_set_auxv()
2072 user_auxv[AT_VECTOR_SIZE - 2] = 0; in prctl_set_auxv()
2073 user_auxv[AT_VECTOR_SIZE - 1] = 0; in prctl_set_auxv()
2075 BUILD_BUG_ON(sizeof(user_auxv) != sizeof(mm->saved_auxv)); in prctl_set_auxv()
2078 memcpy(mm->saved_auxv, user_auxv, len); in prctl_set_auxv()
2087 struct mm_struct *mm = current->mm; in prctl_set_mm()
2091 .exe_fd = -1, in prctl_set_mm()
2099 return -EINVAL; in prctl_set_mm()
2106 if (!capable(CAP_SYS_RESOURCE)) in prctl_set_mm()
2107 return -EPERM; in prctl_set_mm()
2116 return -EINVAL; in prctl_set_mm()
2118 error = -EINVAL; in prctl_set_mm()
2128 spin_lock(&mm->arg_lock); in prctl_set_mm()
2129 prctl_map.start_code = mm->start_code; in prctl_set_mm()
2130 prctl_map.end_code = mm->end_code; in prctl_set_mm()
2131 prctl_map.start_data = mm->start_data; in prctl_set_mm()
2132 prctl_map.end_data = mm->end_data; in prctl_set_mm()
2133 prctl_map.start_brk = mm->start_brk; in prctl_set_mm()
2134 prctl_map.brk = mm->brk; in prctl_set_mm()
2135 prctl_map.start_stack = mm->start_stack; in prctl_set_mm()
2136 prctl_map.arg_start = mm->arg_start; in prctl_set_mm()
2137 prctl_map.arg_end = mm->arg_end; in prctl_set_mm()
2138 prctl_map.env_start = mm->env_start; in prctl_set_mm()
2139 prctl_map.env_end = mm->env_end; in prctl_set_mm()
2197 error = -EFAULT; in prctl_set_mm()
2202 mm->start_code = prctl_map.start_code; in prctl_set_mm()
2203 mm->end_code = prctl_map.end_code; in prctl_set_mm()
2204 mm->start_data = prctl_map.start_data; in prctl_set_mm()
2205 mm->end_data = prctl_map.end_data; in prctl_set_mm()
2206 mm->start_brk = prctl_map.start_brk; in prctl_set_mm()
2207 mm->brk = prctl_map.brk; in prctl_set_mm()
2208 mm->start_stack = prctl_map.start_stack; in prctl_set_mm()
2209 mm->arg_start = prctl_map.arg_start; in prctl_set_mm()
2210 mm->arg_end = prctl_map.arg_end; in prctl_set_mm()
2211 mm->env_start = prctl_map.env_start; in prctl_set_mm()
2212 mm->env_end = prctl_map.env_end; in prctl_set_mm()
2216 spin_unlock(&mm->arg_lock); in prctl_set_mm()
2224 return put_user(me->clear_child_tid, tid_addr); in prctl_get_tid_address()
2229 return -EINVAL; in prctl_get_tid_address()
2236 * If task has has_child_subreaper - all its descendants in propagate_has_child_subreaper()
2240 * If we've found child_reaper - skip descendants in in propagate_has_child_subreaper()
2243 if (p->signal->has_child_subreaper || in propagate_has_child_subreaper()
2247 p->signal->has_child_subreaper = 1; in propagate_has_child_subreaper()
2253 return -EINVAL; in arch_prctl_spec_ctrl_get()
2259 return -EINVAL; in arch_prctl_spec_ctrl_set()
2268 unsigned char comm[sizeof(me->comm)]; in SYSCALL_DEFINE5()
2272 if (error != -ENOSYS) in SYSCALL_DEFINE5()
2279 error = -EINVAL; in SYSCALL_DEFINE5()
2282 me->pdeath_signal = arg2; in SYSCALL_DEFINE5()
2285 error = put_user(me->pdeath_signal, (int __user *)arg2); in SYSCALL_DEFINE5()
2288 error = get_dumpable(me->mm); in SYSCALL_DEFINE5()
2292 error = -EINVAL; in SYSCALL_DEFINE5()
2295 set_dumpable(me->mm, arg2); in SYSCALL_DEFINE5()
2321 error = -EINVAL; in SYSCALL_DEFINE5()
2324 comm[sizeof(me->comm) - 1] = 0; in SYSCALL_DEFINE5()
2326 sizeof(me->comm) - 1) < 0) in SYSCALL_DEFINE5()
2327 return -EFAULT; in SYSCALL_DEFINE5()
2334 return -EFAULT; in SYSCALL_DEFINE5()
2361 if (current->timer_slack_ns > ULONG_MAX) in SYSCALL_DEFINE5()
2364 error = current->timer_slack_ns; in SYSCALL_DEFINE5()
2368 current->timer_slack_ns = in SYSCALL_DEFINE5()
2369 current->default_timer_slack_ns; in SYSCALL_DEFINE5()
2371 current->timer_slack_ns = arg2; in SYSCALL_DEFINE5()
2375 return -EINVAL; in SYSCALL_DEFINE5()
2379 return -EINVAL; in SYSCALL_DEFINE5()
2380 current->flags &= ~PF_MCE_PROCESS; in SYSCALL_DEFINE5()
2383 current->flags |= PF_MCE_PROCESS; in SYSCALL_DEFINE5()
2385 current->flags |= PF_MCE_EARLY; in SYSCALL_DEFINE5()
2387 current->flags &= ~PF_MCE_EARLY; in SYSCALL_DEFINE5()
2389 current->flags &= in SYSCALL_DEFINE5()
2392 return -EINVAL; in SYSCALL_DEFINE5()
2395 return -EINVAL; in SYSCALL_DEFINE5()
2400 return -EINVAL; in SYSCALL_DEFINE5()
2401 if (current->flags & PF_MCE_PROCESS) in SYSCALL_DEFINE5()
2402 error = (current->flags & PF_MCE_EARLY) ? in SYSCALL_DEFINE5()
2414 me->signal->is_child_subreaper = !!arg2; in SYSCALL_DEFINE5()
2421 error = put_user(me->signal->is_child_subreaper, in SYSCALL_DEFINE5()
2426 return -EINVAL; in SYSCALL_DEFINE5()
2432 return -EINVAL; in SYSCALL_DEFINE5()
2436 return -EINVAL; in SYSCALL_DEFINE5()
2437 error = !!test_bit(MMF_DISABLE_THP, &me->mm->flags); in SYSCALL_DEFINE5()
2441 return -EINVAL; in SYSCALL_DEFINE5()
2442 if (mmap_write_lock_killable(me->mm)) in SYSCALL_DEFINE5()
2443 return -EINTR; in SYSCALL_DEFINE5()
2445 set_bit(MMF_DISABLE_THP, &me->mm->flags); in SYSCALL_DEFINE5()
2447 clear_bit(MMF_DISABLE_THP, &me->mm->flags); in SYSCALL_DEFINE5()
2448 mmap_write_unlock(me->mm); in SYSCALL_DEFINE5()
2453 return -EINVAL; in SYSCALL_DEFINE5()
2468 return -EINVAL; in SYSCALL_DEFINE5()
2473 return -EINVAL; in SYSCALL_DEFINE5()
2478 return -EINVAL; in SYSCALL_DEFINE5()
2483 return -EINVAL; in SYSCALL_DEFINE5()
2488 return -EINVAL; in SYSCALL_DEFINE5()
2493 return -EINVAL; in SYSCALL_DEFINE5()
2498 return -EINVAL; in SYSCALL_DEFINE5()
2502 if (!capable(CAP_SYS_RESOURCE)) in SYSCALL_DEFINE5()
2503 return -EPERM; in SYSCALL_DEFINE5()
2506 return -EINVAL; in SYSCALL_DEFINE5()
2509 current->flags |= PR_IO_FLUSHER; in SYSCALL_DEFINE5()
2511 current->flags &= ~PR_IO_FLUSHER; in SYSCALL_DEFINE5()
2513 return -EINVAL; in SYSCALL_DEFINE5()
2516 if (!capable(CAP_SYS_RESOURCE)) in SYSCALL_DEFINE5()
2517 return -EPERM; in SYSCALL_DEFINE5()
2520 return -EINVAL; in SYSCALL_DEFINE5()
2522 error = (current->flags & PR_IO_FLUSHER) == PR_IO_FLUSHER; in SYSCALL_DEFINE5()
2534 error = -EINVAL; in SYSCALL_DEFINE5()
2550 return err ? -EFAULT : 0; in SYSCALL_DEFINE3()
2554 * do_sysinfo - fill in sysinfo struct
2567 info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0); in do_sysinfo()
2569 get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT); in do_sysinfo()
2571 info->procs = nr_threads; in do_sysinfo()
2582 * -Erik Andersen <andersee@debian.org> in do_sysinfo()
2585 mem_total = info->totalram + info->totalswap; in do_sysinfo()
2586 if (mem_total < info->totalram || mem_total < info->totalswap) in do_sysinfo()
2589 mem_unit = info->mem_unit; in do_sysinfo()
2601 * info->mem_unit and set it to 1. This leaves things compatible in do_sysinfo()
2606 info->mem_unit = 1; in do_sysinfo()
2607 info->totalram <<= bitcount; in do_sysinfo()
2608 info->freeram <<= bitcount; in do_sysinfo()
2609 info->sharedram <<= bitcount; in do_sysinfo()
2610 info->bufferram <<= bitcount; in do_sysinfo()
2611 info->totalswap <<= bitcount; in do_sysinfo()
2612 info->freeswap <<= bitcount; in do_sysinfo()
2613 info->totalhigh <<= bitcount; in do_sysinfo()
2614 info->freehigh <<= bitcount; in do_sysinfo()
2627 return -EFAULT; in SYSCALL_DEFINE1()
2647 char _f[20-2*sizeof(u32)-sizeof(int)];
2657 /* Check to see if any memory value is too large for 32-bit and scale in COMPAT_SYSCALL_DEFINE1()
2694 return -EFAULT; in COMPAT_SYSCALL_DEFINE1()