sched/headers: Prepare for new header dependencies before moving code to <linux/sched...
[platform/kernel/linux-exynos.git] / kernel / sys.c
1 /*
2  *  linux/kernel/sys.c
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  */
6
7 #include <linux/export.h>
8 #include <linux/mm.h>
9 #include <linux/utsname.h>
10 #include <linux/mman.h>
11 #include <linux/reboot.h>
12 #include <linux/prctl.h>
13 #include <linux/highuid.h>
14 #include <linux/fs.h>
15 #include <linux/kmod.h>
16 #include <linux/perf_event.h>
17 #include <linux/resource.h>
18 #include <linux/kernel.h>
19 #include <linux/workqueue.h>
20 #include <linux/capability.h>
21 #include <linux/device.h>
22 #include <linux/key.h>
23 #include <linux/times.h>
24 #include <linux/posix-timers.h>
25 #include <linux/security.h>
26 #include <linux/dcookies.h>
27 #include <linux/suspend.h>
28 #include <linux/tty.h>
29 #include <linux/signal.h>
30 #include <linux/cn_proc.h>
31 #include <linux/getcpu.h>
32 #include <linux/task_io_accounting_ops.h>
33 #include <linux/seccomp.h>
34 #include <linux/cpu.h>
35 #include <linux/personality.h>
36 #include <linux/ptrace.h>
37 #include <linux/fs_struct.h>
38 #include <linux/file.h>
39 #include <linux/mount.h>
40 #include <linux/gfp.h>
41 #include <linux/syscore_ops.h>
42 #include <linux/version.h>
43 #include <linux/ctype.h>
44
45 #include <linux/compat.h>
46 #include <linux/syscalls.h>
47 #include <linux/kprobes.h>
48 #include <linux/user_namespace.h>
49 #include <linux/binfmts.h>
50
51 #include <linux/sched.h>
52 #include <linux/sched/autogroup.h>
53 #include <linux/sched/loadavg.h>
54 #include <linux/sched/stat.h>
55 #include <linux/sched/mm.h>
56 #include <linux/sched/coredump.h>
57 #include <linux/sched/task.h>
58 #include <linux/rcupdate.h>
59 #include <linux/uidgid.h>
60 #include <linux/cred.h>
61
62 #include <linux/kmsg_dump.h>
63 /* Move somewhere else to avoid recompiling? */
64 #include <generated/utsrelease.h>
65
66 #include <linux/uaccess.h>
67 #include <asm/io.h>
68 #include <asm/unistd.h>
69
70 #ifndef SET_UNALIGN_CTL
71 # define SET_UNALIGN_CTL(a, b)  (-EINVAL)
72 #endif
73 #ifndef GET_UNALIGN_CTL
74 # define GET_UNALIGN_CTL(a, b)  (-EINVAL)
75 #endif
76 #ifndef SET_FPEMU_CTL
77 # define SET_FPEMU_CTL(a, b)    (-EINVAL)
78 #endif
79 #ifndef GET_FPEMU_CTL
80 # define GET_FPEMU_CTL(a, b)    (-EINVAL)
81 #endif
82 #ifndef SET_FPEXC_CTL
83 # define SET_FPEXC_CTL(a, b)    (-EINVAL)
84 #endif
85 #ifndef GET_FPEXC_CTL
86 # define GET_FPEXC_CTL(a, b)    (-EINVAL)
87 #endif
88 #ifndef GET_ENDIAN
89 # define GET_ENDIAN(a, b)       (-EINVAL)
90 #endif
91 #ifndef SET_ENDIAN
92 # define SET_ENDIAN(a, b)       (-EINVAL)
93 #endif
94 #ifndef GET_TSC_CTL
95 # define GET_TSC_CTL(a)         (-EINVAL)
96 #endif
97 #ifndef SET_TSC_CTL
98 # define SET_TSC_CTL(a)         (-EINVAL)
99 #endif
100 #ifndef MPX_ENABLE_MANAGEMENT
101 # define MPX_ENABLE_MANAGEMENT()        (-EINVAL)
102 #endif
103 #ifndef MPX_DISABLE_MANAGEMENT
104 # define MPX_DISABLE_MANAGEMENT()       (-EINVAL)
105 #endif
106 #ifndef GET_FP_MODE
107 # define GET_FP_MODE(a)         (-EINVAL)
108 #endif
109 #ifndef SET_FP_MODE
110 # define SET_FP_MODE(a,b)       (-EINVAL)
111 #endif
112
113 /*
114  * this is where the system-wide overflow UID and GID are defined, for
115  * architectures that now have 32-bit UID/GID but didn't in the past
116  */
117
118 int overflowuid = DEFAULT_OVERFLOWUID;
119 int overflowgid = DEFAULT_OVERFLOWGID;
120
121 EXPORT_SYMBOL(overflowuid);
122 EXPORT_SYMBOL(overflowgid);
123
124 /*
125  * the same as above, but for filesystems which can only store a 16-bit
126  * UID and GID. as such, this is needed on all architectures
127  */
128
129 int fs_overflowuid = DEFAULT_FS_OVERFLOWUID;
130 int fs_overflowgid = DEFAULT_FS_OVERFLOWUID;
131
132 EXPORT_SYMBOL(fs_overflowuid);
133 EXPORT_SYMBOL(fs_overflowgid);
134
135 /*
136  * Returns true if current's euid is same as p's uid or euid,
137  * or has CAP_SYS_NICE to p's user_ns.
138  *
139  * Called with rcu_read_lock, creds are safe
140  */
141 static bool set_one_prio_perm(struct task_struct *p)
142 {
143         const struct cred *cred = current_cred(), *pcred = __task_cred(p);
144
145         if (uid_eq(pcred->uid,  cred->euid) ||
146             uid_eq(pcred->euid, cred->euid))
147                 return true;
148         if (ns_capable(pcred->user_ns, CAP_SYS_NICE))
149                 return true;
150         return false;
151 }
152
153 /*
154  * set the priority of a task
155  * - the caller must hold the RCU read lock
156  */
157 static int set_one_prio(struct task_struct *p, int niceval, int error)
158 {
159         int no_nice;
160
161         if (!set_one_prio_perm(p)) {
162                 error = -EPERM;
163                 goto out;
164         }
165         if (niceval < task_nice(p) && !can_nice(p, niceval)) {
166                 error = -EACCES;
167                 goto out;
168         }
169         no_nice = security_task_setnice(p, niceval);
170         if (no_nice) {
171                 error = no_nice;
172                 goto out;
173         }
174         if (error == -ESRCH)
175                 error = 0;
176         set_user_nice(p, niceval);
177 out:
178         return error;
179 }
180
181 SYSCALL_DEFINE3(setpriority, int, which, int, who, int, niceval)
182 {
183         struct task_struct *g, *p;
184         struct user_struct *user;
185         const struct cred *cred = current_cred();
186         int error = -EINVAL;
187         struct pid *pgrp;
188         kuid_t uid;
189
190         if (which > PRIO_USER || which < PRIO_PROCESS)
191                 goto out;
192
193         /* normalize: avoid signed division (rounding problems) */
194         error = -ESRCH;
195         if (niceval < MIN_NICE)
196                 niceval = MIN_NICE;
197         if (niceval > MAX_NICE)
198                 niceval = MAX_NICE;
199
200         rcu_read_lock();
201         read_lock(&tasklist_lock);
202         switch (which) {
203         case PRIO_PROCESS:
204                 if (who)
205                         p = find_task_by_vpid(who);
206                 else
207                         p = current;
208                 if (p)
209                         error = set_one_prio(p, niceval, error);
210                 break;
211         case PRIO_PGRP:
212                 if (who)
213                         pgrp = find_vpid(who);
214                 else
215                         pgrp = task_pgrp(current);
216                 do_each_pid_thread(pgrp, PIDTYPE_PGID, p) {
217                         error = set_one_prio(p, niceval, error);
218                 } while_each_pid_thread(pgrp, PIDTYPE_PGID, p);
219                 break;
220         case PRIO_USER:
221                 uid = make_kuid(cred->user_ns, who);
222                 user = cred->user;
223                 if (!who)
224                         uid = cred->uid;
225                 else if (!uid_eq(uid, cred->uid)) {
226                         user = find_user(uid);
227                         if (!user)
228                                 goto out_unlock;        /* No processes for this user */
229                 }
230                 do_each_thread(g, p) {
231                         if (uid_eq(task_uid(p), uid) && task_pid_vnr(p))
232                                 error = set_one_prio(p, niceval, error);
233                 } while_each_thread(g, p);
234                 if (!uid_eq(uid, cred->uid))
235                         free_uid(user);         /* For find_user() */
236                 break;
237         }
238 out_unlock:
239         read_unlock(&tasklist_lock);
240         rcu_read_unlock();
241 out:
242         return error;
243 }
244
245 /*
246  * Ugh. To avoid negative return values, "getpriority()" will
247  * not return the normal nice-value, but a negated value that
248  * has been offset by 20 (ie it returns 40..1 instead of -20..19)
249  * to stay compatible.
250  */
251 SYSCALL_DEFINE2(getpriority, int, which, int, who)
252 {
253         struct task_struct *g, *p;
254         struct user_struct *user;
255         const struct cred *cred = current_cred();
256         long niceval, retval = -ESRCH;
257         struct pid *pgrp;
258         kuid_t uid;
259
260         if (which > PRIO_USER || which < PRIO_PROCESS)
261                 return -EINVAL;
262
263         rcu_read_lock();
264         read_lock(&tasklist_lock);
265         switch (which) {
266         case PRIO_PROCESS:
267                 if (who)
268                         p = find_task_by_vpid(who);
269                 else
270                         p = current;
271                 if (p) {
272                         niceval = nice_to_rlimit(task_nice(p));
273                         if (niceval > retval)
274                                 retval = niceval;
275                 }
276                 break;
277         case PRIO_PGRP:
278                 if (who)
279                         pgrp = find_vpid(who);
280                 else
281                         pgrp = task_pgrp(current);
282                 do_each_pid_thread(pgrp, PIDTYPE_PGID, p) {
283                         niceval = nice_to_rlimit(task_nice(p));
284                         if (niceval > retval)
285                                 retval = niceval;
286                 } while_each_pid_thread(pgrp, PIDTYPE_PGID, p);
287                 break;
288         case PRIO_USER:
289                 uid = make_kuid(cred->user_ns, who);
290                 user = cred->user;
291                 if (!who)
292                         uid = cred->uid;
293                 else if (!uid_eq(uid, cred->uid)) {
294                         user = find_user(uid);
295                         if (!user)
296                                 goto out_unlock;        /* No processes for this user */
297                 }
298                 do_each_thread(g, p) {
299                         if (uid_eq(task_uid(p), uid) && task_pid_vnr(p)) {
300                                 niceval = nice_to_rlimit(task_nice(p));
301                                 if (niceval > retval)
302                                         retval = niceval;
303                         }
304                 } while_each_thread(g, p);
305                 if (!uid_eq(uid, cred->uid))
306                         free_uid(user);         /* for find_user() */
307                 break;
308         }
309 out_unlock:
310         read_unlock(&tasklist_lock);
311         rcu_read_unlock();
312
313         return retval;
314 }
315
316 /*
317  * Unprivileged users may change the real gid to the effective gid
318  * or vice versa.  (BSD-style)
319  *
320  * If you set the real gid at all, or set the effective gid to a value not
321  * equal to the real gid, then the saved gid is set to the new effective gid.
322  *
323  * This makes it possible for a setgid program to completely drop its
324  * privileges, which is often a useful assertion to make when you are doing
325  * a security audit over a program.
326  *
327  * The general idea is that a program which uses just setregid() will be
328  * 100% compatible with BSD.  A program which uses just setgid() will be
329  * 100% compatible with POSIX with saved IDs.
330  *
331  * SMP: There are not races, the GIDs are checked only by filesystem
332  *      operations (as far as semantic preservation is concerned).
333  */
334 #ifdef CONFIG_MULTIUSER
335 SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)
336 {
337         struct user_namespace *ns = current_user_ns();
338         const struct cred *old;
339         struct cred *new;
340         int retval;
341         kgid_t krgid, kegid;
342
343         krgid = make_kgid(ns, rgid);
344         kegid = make_kgid(ns, egid);
345
346         if ((rgid != (gid_t) -1) && !gid_valid(krgid))
347                 return -EINVAL;
348         if ((egid != (gid_t) -1) && !gid_valid(kegid))
349                 return -EINVAL;
350
351         new = prepare_creds();
352         if (!new)
353                 return -ENOMEM;
354         old = current_cred();
355
356         retval = -EPERM;
357         if (rgid != (gid_t) -1) {
358                 if (gid_eq(old->gid, krgid) ||
359                     gid_eq(old->egid, krgid) ||
360                     ns_capable(old->user_ns, CAP_SETGID))
361                         new->gid = krgid;
362                 else
363                         goto error;
364         }
365         if (egid != (gid_t) -1) {
366                 if (gid_eq(old->gid, kegid) ||
367                     gid_eq(old->egid, kegid) ||
368                     gid_eq(old->sgid, kegid) ||
369                     ns_capable(old->user_ns, CAP_SETGID))
370                         new->egid = kegid;
371                 else
372                         goto error;
373         }
374
375         if (rgid != (gid_t) -1 ||
376             (egid != (gid_t) -1 && !gid_eq(kegid, old->gid)))
377                 new->sgid = new->egid;
378         new->fsgid = new->egid;
379
380         return commit_creds(new);
381
382 error:
383         abort_creds(new);
384         return retval;
385 }
386
387 /*
388  * setgid() is implemented like SysV w/ SAVED_IDS
389  *
390  * SMP: Same implicit races as above.
391  */
392 SYSCALL_DEFINE1(setgid, gid_t, gid)
393 {
394         struct user_namespace *ns = current_user_ns();
395         const struct cred *old;
396         struct cred *new;
397         int retval;
398         kgid_t kgid;
399
400         kgid = make_kgid(ns, gid);
401         if (!gid_valid(kgid))
402                 return -EINVAL;
403
404         new = prepare_creds();
405         if (!new)
406                 return -ENOMEM;
407         old = current_cred();
408
409         retval = -EPERM;
410         if (ns_capable(old->user_ns, CAP_SETGID))
411                 new->gid = new->egid = new->sgid = new->fsgid = kgid;
412         else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
413                 new->egid = new->fsgid = kgid;
414         else
415                 goto error;
416
417         return commit_creds(new);
418
419 error:
420         abort_creds(new);
421         return retval;
422 }
423
424 /*
425  * change the user struct in a credentials set to match the new UID
426  */
427 static int set_user(struct cred *new)
428 {
429         struct user_struct *new_user;
430
431         new_user = alloc_uid(new->uid);
432         if (!new_user)
433                 return -EAGAIN;
434
435         /*
436          * We don't fail in case of NPROC limit excess here because too many
437          * poorly written programs don't check set*uid() return code, assuming
438          * it never fails if called by root.  We may still enforce NPROC limit
439          * for programs doing set*uid()+execve() by harmlessly deferring the
440          * failure to the execve() stage.
441          */
442         if (atomic_read(&new_user->processes) >= rlimit(RLIMIT_NPROC) &&
443                         new_user != INIT_USER)
444                 current->flags |= PF_NPROC_EXCEEDED;
445         else
446                 current->flags &= ~PF_NPROC_EXCEEDED;
447
448         free_uid(new->user);
449         new->user = new_user;
450         return 0;
451 }
452
453 /*
454  * Unprivileged users may change the real uid to the effective uid
455  * or vice versa.  (BSD-style)
456  *
457  * If you set the real uid at all, or set the effective uid to a value not
458  * equal to the real uid, then the saved uid is set to the new effective uid.
459  *
460  * This makes it possible for a setuid program to completely drop its
461  * privileges, which is often a useful assertion to make when you are doing
462  * a security audit over a program.
463  *
464  * The general idea is that a program which uses just setreuid() will be
465  * 100% compatible with BSD.  A program which uses just setuid() will be
466  * 100% compatible with POSIX with saved IDs.
467  */
468 SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)
469 {
470         struct user_namespace *ns = current_user_ns();
471         const struct cred *old;
472         struct cred *new;
473         int retval;
474         kuid_t kruid, keuid;
475
476         kruid = make_kuid(ns, ruid);
477         keuid = make_kuid(ns, euid);
478
479         if ((ruid != (uid_t) -1) && !uid_valid(kruid))
480                 return -EINVAL;
481         if ((euid != (uid_t) -1) && !uid_valid(keuid))
482                 return -EINVAL;
483
484         new = prepare_creds();
485         if (!new)
486                 return -ENOMEM;
487         old = current_cred();
488
489         retval = -EPERM;
490         if (ruid != (uid_t) -1) {
491                 new->uid = kruid;
492                 if (!uid_eq(old->uid, kruid) &&
493                     !uid_eq(old->euid, kruid) &&
494                     !ns_capable(old->user_ns, CAP_SETUID))
495                         goto error;
496         }
497
498         if (euid != (uid_t) -1) {
499                 new->euid = keuid;
500                 if (!uid_eq(old->uid, keuid) &&
501                     !uid_eq(old->euid, keuid) &&
502                     !uid_eq(old->suid, keuid) &&
503                     !ns_capable(old->user_ns, CAP_SETUID))
504                         goto error;
505         }
506
507         if (!uid_eq(new->uid, old->uid)) {
508                 retval = set_user(new);
509                 if (retval < 0)
510                         goto error;
511         }
512         if (ruid != (uid_t) -1 ||
513             (euid != (uid_t) -1 && !uid_eq(keuid, old->uid)))
514                 new->suid = new->euid;
515         new->fsuid = new->euid;
516
517         retval = security_task_fix_setuid(new, old, LSM_SETID_RE);
518         if (retval < 0)
519                 goto error;
520
521         return commit_creds(new);
522
523 error:
524         abort_creds(new);
525         return retval;
526 }
527
528 /*
529  * setuid() is implemented like SysV with SAVED_IDS
530  *
531  * Note that SAVED_ID's is deficient in that a setuid root program
532  * like sendmail, for example, cannot set its uid to be a normal
533  * user and then switch back, because if you're root, setuid() sets
534  * the saved uid too.  If you don't like this, blame the bright people
535  * in the POSIX committee and/or USG.  Note that the BSD-style setreuid()
536  * will allow a root program to temporarily drop privileges and be able to
537  * regain them by swapping the real and effective uid.
538  */
539 SYSCALL_DEFINE1(setuid, uid_t, uid)
540 {
541         struct user_namespace *ns = current_user_ns();
542         const struct cred *old;
543         struct cred *new;
544         int retval;
545         kuid_t kuid;
546
547         kuid = make_kuid(ns, uid);
548         if (!uid_valid(kuid))
549                 return -EINVAL;
550
551         new = prepare_creds();
552         if (!new)
553                 return -ENOMEM;
554         old = current_cred();
555
556         retval = -EPERM;
557         if (ns_capable(old->user_ns, CAP_SETUID)) {
558                 new->suid = new->uid = kuid;
559                 if (!uid_eq(kuid, old->uid)) {
560                         retval = set_user(new);
561                         if (retval < 0)
562                                 goto error;
563                 }
564         } else if (!uid_eq(kuid, old->uid) && !uid_eq(kuid, new->suid)) {
565                 goto error;
566         }
567
568         new->fsuid = new->euid = kuid;
569
570         retval = security_task_fix_setuid(new, old, LSM_SETID_ID);
571         if (retval < 0)
572                 goto error;
573
574         return commit_creds(new);
575
576 error:
577         abort_creds(new);
578         return retval;
579 }
580
581
582 /*
583  * This function implements a generic ability to update ruid, euid,
584  * and suid.  This allows you to implement the 4.4 compatible seteuid().
585  */
586 SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
587 {
588         struct user_namespace *ns = current_user_ns();
589         const struct cred *old;
590         struct cred *new;
591         int retval;
592         kuid_t kruid, keuid, ksuid;
593
594         kruid = make_kuid(ns, ruid);
595         keuid = make_kuid(ns, euid);
596         ksuid = make_kuid(ns, suid);
597
598         if ((ruid != (uid_t) -1) && !uid_valid(kruid))
599                 return -EINVAL;
600
601         if ((euid != (uid_t) -1) && !uid_valid(keuid))
602                 return -EINVAL;
603
604         if ((suid != (uid_t) -1) && !uid_valid(ksuid))
605                 return -EINVAL;
606
607         new = prepare_creds();
608         if (!new)
609                 return -ENOMEM;
610
611         old = current_cred();
612
613         retval = -EPERM;
614         if (!ns_capable(old->user_ns, CAP_SETUID)) {
615                 if (ruid != (uid_t) -1        && !uid_eq(kruid, old->uid) &&
616                     !uid_eq(kruid, old->euid) && !uid_eq(kruid, old->suid))
617                         goto error;
618                 if (euid != (uid_t) -1        && !uid_eq(keuid, old->uid) &&
619                     !uid_eq(keuid, old->euid) && !uid_eq(keuid, old->suid))
620                         goto error;
621                 if (suid != (uid_t) -1        && !uid_eq(ksuid, old->uid) &&
622                     !uid_eq(ksuid, old->euid) && !uid_eq(ksuid, old->suid))
623                         goto error;
624         }
625
626         if (ruid != (uid_t) -1) {
627                 new->uid = kruid;
628                 if (!uid_eq(kruid, old->uid)) {
629                         retval = set_user(new);
630                         if (retval < 0)
631                                 goto error;
632                 }
633         }
634         if (euid != (uid_t) -1)
635                 new->euid = keuid;
636         if (suid != (uid_t) -1)
637                 new->suid = ksuid;
638         new->fsuid = new->euid;
639
640         retval = security_task_fix_setuid(new, old, LSM_SETID_RES);
641         if (retval < 0)
642                 goto error;
643
644         return commit_creds(new);
645
646 error:
647         abort_creds(new);
648         return retval;
649 }
650
651 SYSCALL_DEFINE3(getresuid, uid_t __user *, ruidp, uid_t __user *, euidp, uid_t __user *, suidp)
652 {
653         const struct cred *cred = current_cred();
654         int retval;
655         uid_t ruid, euid, suid;
656
657         ruid = from_kuid_munged(cred->user_ns, cred->uid);
658         euid = from_kuid_munged(cred->user_ns, cred->euid);
659         suid = from_kuid_munged(cred->user_ns, cred->suid);
660
661         retval = put_user(ruid, ruidp);
662         if (!retval) {
663                 retval = put_user(euid, euidp);
664                 if (!retval)
665                         return put_user(suid, suidp);
666         }
667         return retval;
668 }
669
670 /*
671  * Same as above, but for rgid, egid, sgid.
672  */
673 SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
674 {
675         struct user_namespace *ns = current_user_ns();
676         const struct cred *old;
677         struct cred *new;
678         int retval;
679         kgid_t krgid, kegid, ksgid;
680
681         krgid = make_kgid(ns, rgid);
682         kegid = make_kgid(ns, egid);
683         ksgid = make_kgid(ns, sgid);
684
685         if ((rgid != (gid_t) -1) && !gid_valid(krgid))
686                 return -EINVAL;
687         if ((egid != (gid_t) -1) && !gid_valid(kegid))
688                 return -EINVAL;
689         if ((sgid != (gid_t) -1) && !gid_valid(ksgid))
690                 return -EINVAL;
691
692         new = prepare_creds();
693         if (!new)
694                 return -ENOMEM;
695         old = current_cred();
696
697         retval = -EPERM;
698         if (!ns_capable(old->user_ns, CAP_SETGID)) {
699                 if (rgid != (gid_t) -1        && !gid_eq(krgid, old->gid) &&
700                     !gid_eq(krgid, old->egid) && !gid_eq(krgid, old->sgid))
701                         goto error;
702                 if (egid != (gid_t) -1        && !gid_eq(kegid, old->gid) &&
703                     !gid_eq(kegid, old->egid) && !gid_eq(kegid, old->sgid))
704                         goto error;
705                 if (sgid != (gid_t) -1        && !gid_eq(ksgid, old->gid) &&
706                     !gid_eq(ksgid, old->egid) && !gid_eq(ksgid, old->sgid))
707                         goto error;
708         }
709
710         if (rgid != (gid_t) -1)
711                 new->gid = krgid;
712         if (egid != (gid_t) -1)
713                 new->egid = kegid;
714         if (sgid != (gid_t) -1)
715                 new->sgid = ksgid;
716         new->fsgid = new->egid;
717
718         return commit_creds(new);
719
720 error:
721         abort_creds(new);
722         return retval;
723 }
724
725 SYSCALL_DEFINE3(getresgid, gid_t __user *, rgidp, gid_t __user *, egidp, gid_t __user *, sgidp)
726 {
727         const struct cred *cred = current_cred();
728         int retval;
729         gid_t rgid, egid, sgid;
730
731         rgid = from_kgid_munged(cred->user_ns, cred->gid);
732         egid = from_kgid_munged(cred->user_ns, cred->egid);
733         sgid = from_kgid_munged(cred->user_ns, cred->sgid);
734
735         retval = put_user(rgid, rgidp);
736         if (!retval) {
737                 retval = put_user(egid, egidp);
738                 if (!retval)
739                         retval = put_user(sgid, sgidp);
740         }
741
742         return retval;
743 }
744
745
746 /*
747  * "setfsuid()" sets the fsuid - the uid used for filesystem checks. This
748  * is used for "access()" and for the NFS daemon (letting nfsd stay at
749  * whatever uid it wants to). It normally shadows "euid", except when
750  * explicitly set by setfsuid() or for access..
751  */
752 SYSCALL_DEFINE1(setfsuid, uid_t, uid)
753 {
754         const struct cred *old;
755         struct cred *new;
756         uid_t old_fsuid;
757         kuid_t kuid;
758
759         old = current_cred();
760         old_fsuid = from_kuid_munged(old->user_ns, old->fsuid);
761
762         kuid = make_kuid(old->user_ns, uid);
763         if (!uid_valid(kuid))
764                 return old_fsuid;
765
766         new = prepare_creds();
767         if (!new)
768                 return old_fsuid;
769
770         if (uid_eq(kuid, old->uid)  || uid_eq(kuid, old->euid)  ||
771             uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) ||
772             ns_capable(old->user_ns, CAP_SETUID)) {
773                 if (!uid_eq(kuid, old->fsuid)) {
774                         new->fsuid = kuid;
775                         if (security_task_fix_setuid(new, old, LSM_SETID_FS) == 0)
776                                 goto change_okay;
777                 }
778         }
779
780         abort_creds(new);
781         return old_fsuid;
782
783 change_okay:
784         commit_creds(new);
785         return old_fsuid;
786 }
787
788 /*
789  * Samma pÃ¥ svenska..
790  */
791 SYSCALL_DEFINE1(setfsgid, gid_t, gid)
792 {
793         const struct cred *old;
794         struct cred *new;
795         gid_t old_fsgid;
796         kgid_t kgid;
797
798         old = current_cred();
799         old_fsgid = from_kgid_munged(old->user_ns, old->fsgid);
800
801         kgid = make_kgid(old->user_ns, gid);
802         if (!gid_valid(kgid))
803                 return old_fsgid;
804
805         new = prepare_creds();
806         if (!new)
807                 return old_fsgid;
808
809         if (gid_eq(kgid, old->gid)  || gid_eq(kgid, old->egid)  ||
810             gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) ||
811             ns_capable(old->user_ns, CAP_SETGID)) {
812                 if (!gid_eq(kgid, old->fsgid)) {
813                         new->fsgid = kgid;
814                         goto change_okay;
815                 }
816         }
817
818         abort_creds(new);
819         return old_fsgid;
820
821 change_okay:
822         commit_creds(new);
823         return old_fsgid;
824 }
825 #endif /* CONFIG_MULTIUSER */
826
827 /**
828  * sys_getpid - return the thread group id of the current process
829  *
830  * Note, despite the name, this returns the tgid not the pid.  The tgid and
831  * the pid are identical unless CLONE_THREAD was specified on clone() in
832  * which case the tgid is the same in all threads of the same group.
833  *
834  * This is SMP safe as current->tgid does not change.
835  */
836 SYSCALL_DEFINE0(getpid)
837 {
838         return task_tgid_vnr(current);
839 }
840
841 /* Thread ID - the internal kernel "pid" */
842 SYSCALL_DEFINE0(gettid)
843 {
844         return task_pid_vnr(current);
845 }
846
847 /*
848  * Accessing ->real_parent is not SMP-safe, it could
849  * change from under us. However, we can use a stale
850  * value of ->real_parent under rcu_read_lock(), see
851  * release_task()->call_rcu(delayed_put_task_struct).
852  */
853 SYSCALL_DEFINE0(getppid)
854 {
855         int pid;
856
857         rcu_read_lock();
858         pid = task_tgid_vnr(rcu_dereference(current->real_parent));
859         rcu_read_unlock();
860
861         return pid;
862 }
863
864 SYSCALL_DEFINE0(getuid)
865 {
866         /* Only we change this so SMP safe */
867         return from_kuid_munged(current_user_ns(), current_uid());
868 }
869
870 SYSCALL_DEFINE0(geteuid)
871 {
872         /* Only we change this so SMP safe */
873         return from_kuid_munged(current_user_ns(), current_euid());
874 }
875
876 SYSCALL_DEFINE0(getgid)
877 {
878         /* Only we change this so SMP safe */
879         return from_kgid_munged(current_user_ns(), current_gid());
880 }
881
882 SYSCALL_DEFINE0(getegid)
883 {
884         /* Only we change this so SMP safe */
885         return from_kgid_munged(current_user_ns(), current_egid());
886 }
887
888 void do_sys_times(struct tms *tms)
889 {
890         u64 tgutime, tgstime, cutime, cstime;
891
892         thread_group_cputime_adjusted(current, &tgutime, &tgstime);
893         cutime = current->signal->cutime;
894         cstime = current->signal->cstime;
895         tms->tms_utime = nsec_to_clock_t(tgutime);
896         tms->tms_stime = nsec_to_clock_t(tgstime);
897         tms->tms_cutime = nsec_to_clock_t(cutime);
898         tms->tms_cstime = nsec_to_clock_t(cstime);
899 }
900
901 SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
902 {
903         if (tbuf) {
904                 struct tms tmp;
905
906                 do_sys_times(&tmp);
907                 if (copy_to_user(tbuf, &tmp, sizeof(struct tms)))
908                         return -EFAULT;
909         }
910         force_successful_syscall_return();
911         return (long) jiffies_64_to_clock_t(get_jiffies_64());
912 }
913
914 /*
915  * This needs some heavy checking ...
916  * I just haven't the stomach for it. I also don't fully
917  * understand sessions/pgrp etc. Let somebody who does explain it.
918  *
919  * OK, I think I have the protection semantics right.... this is really
920  * only important on a multi-user system anyway, to make sure one user
921  * can't send a signal to a process owned by another.  -TYT, 12/12/91
922  *
923  * !PF_FORKNOEXEC check to conform completely to POSIX.
924  */
925 SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid)
926 {
927         struct task_struct *p;
928         struct task_struct *group_leader = current->group_leader;
929         struct pid *pgrp;
930         int err;
931
932         if (!pid)
933                 pid = task_pid_vnr(group_leader);
934         if (!pgid)
935                 pgid = pid;
936         if (pgid < 0)
937                 return -EINVAL;
938         rcu_read_lock();
939
940         /* From this point forward we keep holding onto the tasklist lock
941          * so that our parent does not change from under us. -DaveM
942          */
943         write_lock_irq(&tasklist_lock);
944
945         err = -ESRCH;
946         p = find_task_by_vpid(pid);
947         if (!p)
948                 goto out;
949
950         err = -EINVAL;
951         if (!thread_group_leader(p))
952                 goto out;
953
954         if (same_thread_group(p->real_parent, group_leader)) {
955                 err = -EPERM;
956                 if (task_session(p) != task_session(group_leader))
957                         goto out;
958                 err = -EACCES;
959                 if (!(p->flags & PF_FORKNOEXEC))
960                         goto out;
961         } else {
962                 err = -ESRCH;
963                 if (p != group_leader)
964                         goto out;
965         }
966
967         err = -EPERM;
968         if (p->signal->leader)
969                 goto out;
970
971         pgrp = task_pid(p);
972         if (pgid != pid) {
973                 struct task_struct *g;
974
975                 pgrp = find_vpid(pgid);
976                 g = pid_task(pgrp, PIDTYPE_PGID);
977                 if (!g || task_session(g) != task_session(group_leader))
978                         goto out;
979         }
980
981         err = security_task_setpgid(p, pgid);
982         if (err)
983                 goto out;
984
985         if (task_pgrp(p) != pgrp)
986                 change_pid(p, PIDTYPE_PGID, pgrp);
987
988         err = 0;
989 out:
990         /* All paths lead to here, thus we are safe. -DaveM */
991         write_unlock_irq(&tasklist_lock);
992         rcu_read_unlock();
993         return err;
994 }
995
996 SYSCALL_DEFINE1(getpgid, pid_t, pid)
997 {
998         struct task_struct *p;
999         struct pid *grp;
1000         int retval;
1001
1002         rcu_read_lock();
1003         if (!pid)
1004                 grp = task_pgrp(current);
1005         else {
1006                 retval = -ESRCH;
1007                 p = find_task_by_vpid(pid);
1008                 if (!p)
1009                         goto out;
1010                 grp = task_pgrp(p);
1011                 if (!grp)
1012                         goto out;
1013
1014                 retval = security_task_getpgid(p);
1015                 if (retval)
1016                         goto out;
1017         }
1018         retval = pid_vnr(grp);
1019 out:
1020         rcu_read_unlock();
1021         return retval;
1022 }
1023
1024 #ifdef __ARCH_WANT_SYS_GETPGRP
1025
1026 SYSCALL_DEFINE0(getpgrp)
1027 {
1028         return sys_getpgid(0);
1029 }
1030
1031 #endif
1032
1033 SYSCALL_DEFINE1(getsid, pid_t, pid)
1034 {
1035         struct task_struct *p;
1036         struct pid *sid;
1037         int retval;
1038
1039         rcu_read_lock();
1040         if (!pid)
1041                 sid = task_session(current);
1042         else {
1043                 retval = -ESRCH;
1044                 p = find_task_by_vpid(pid);
1045                 if (!p)
1046                         goto out;
1047                 sid = task_session(p);
1048                 if (!sid)
1049                         goto out;
1050
1051                 retval = security_task_getsid(p);
1052                 if (retval)
1053                         goto out;
1054         }
1055         retval = pid_vnr(sid);
1056 out:
1057         rcu_read_unlock();
1058         return retval;
1059 }
1060
1061 static void set_special_pids(struct pid *pid)
1062 {
1063         struct task_struct *curr = current->group_leader;
1064
1065         if (task_session(curr) != pid)
1066                 change_pid(curr, PIDTYPE_SID, pid);
1067
1068         if (task_pgrp(curr) != pid)
1069                 change_pid(curr, PIDTYPE_PGID, pid);
1070 }
1071
1072 SYSCALL_DEFINE0(setsid)
1073 {
1074         struct task_struct *group_leader = current->group_leader;
1075         struct pid *sid = task_pid(group_leader);
1076         pid_t session = pid_vnr(sid);
1077         int err = -EPERM;
1078
1079         write_lock_irq(&tasklist_lock);
1080         /* Fail if I am already a session leader */
1081         if (group_leader->signal->leader)
1082                 goto out;
1083
1084         /* Fail if a process group id already exists that equals the
1085          * proposed session id.
1086          */
1087         if (pid_task(sid, PIDTYPE_PGID))
1088                 goto out;
1089
1090         group_leader->signal->leader = 1;
1091         set_special_pids(sid);
1092
1093         proc_clear_tty(group_leader);
1094
1095         err = session;
1096 out:
1097         write_unlock_irq(&tasklist_lock);
1098         if (err > 0) {
1099                 proc_sid_connector(group_leader);
1100                 sched_autogroup_create_attach(group_leader);
1101         }
1102         return err;
1103 }
1104
1105 DECLARE_RWSEM(uts_sem);
1106
1107 #ifdef COMPAT_UTS_MACHINE
1108 #define override_architecture(name) \
1109         (personality(current->personality) == PER_LINUX32 && \
1110          copy_to_user(name->machine, COMPAT_UTS_MACHINE, \
1111                       sizeof(COMPAT_UTS_MACHINE)))
1112 #else
1113 #define override_architecture(name)     0
1114 #endif
1115
1116 /*
1117  * Work around broken programs that cannot handle "Linux 3.0".
1118  * Instead we map 3.x to 2.6.40+x, so e.g. 3.0 would be 2.6.40
1119  * And we map 4.x to 2.6.60+x, so 4.0 would be 2.6.60.
1120  */
1121 static int override_release(char __user *release, size_t len)
1122 {
1123         int ret = 0;
1124
1125         if (current->personality & UNAME26) {
1126                 const char *rest = UTS_RELEASE;
1127                 char buf[65] = { 0 };
1128                 int ndots = 0;
1129                 unsigned v;
1130                 size_t copy;
1131
1132                 while (*rest) {
1133                         if (*rest == '.' && ++ndots >= 3)
1134                                 break;
1135                         if (!isdigit(*rest) && *rest != '.')
1136                                 break;
1137                         rest++;
1138                 }
1139                 v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 60;
1140                 copy = clamp_t(size_t, len, 1, sizeof(buf));
1141                 copy = scnprintf(buf, copy, "2.6.%u%s", v, rest);
1142                 ret = copy_to_user(release, buf, copy + 1);
1143         }
1144         return ret;
1145 }
1146
1147 SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name)
1148 {
1149         int errno = 0;
1150
1151         down_read(&uts_sem);
1152         if (copy_to_user(name, utsname(), sizeof *name))
1153                 errno = -EFAULT;
1154         up_read(&uts_sem);
1155
1156         if (!errno && override_release(name->release, sizeof(name->release)))
1157                 errno = -EFAULT;
1158         if (!errno && override_architecture(name))
1159                 errno = -EFAULT;
1160         return errno;
1161 }
1162
1163 #ifdef __ARCH_WANT_SYS_OLD_UNAME
1164 /*
1165  * Old cruft
1166  */
1167 SYSCALL_DEFINE1(uname, struct old_utsname __user *, name)
1168 {
1169         int error = 0;
1170
1171         if (!name)
1172                 return -EFAULT;
1173
1174         down_read(&uts_sem);
1175         if (copy_to_user(name, utsname(), sizeof(*name)))
1176                 error = -EFAULT;
1177         up_read(&uts_sem);
1178
1179         if (!error && override_release(name->release, sizeof(name->release)))
1180                 error = -EFAULT;
1181         if (!error && override_architecture(name))
1182                 error = -EFAULT;
1183         return error;
1184 }
1185
1186 SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
1187 {
1188         int error;
1189
1190         if (!name)
1191                 return -EFAULT;
1192         if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname)))
1193                 return -EFAULT;
1194
1195         down_read(&uts_sem);
1196         error = __copy_to_user(&name->sysname, &utsname()->sysname,
1197                                __OLD_UTS_LEN);
1198         error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
1199         error |= __copy_to_user(&name->nodename, &utsname()->nodename,
1200                                 __OLD_UTS_LEN);
1201         error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
1202         error |= __copy_to_user(&name->release, &utsname()->release,
1203                                 __OLD_UTS_LEN);
1204         error |= __put_user(0, name->release + __OLD_UTS_LEN);
1205         error |= __copy_to_user(&name->version, &utsname()->version,
1206                                 __OLD_UTS_LEN);
1207         error |= __put_user(0, name->version + __OLD_UTS_LEN);
1208         error |= __copy_to_user(&name->machine, &utsname()->machine,
1209                                 __OLD_UTS_LEN);
1210         error |= __put_user(0, name->machine + __OLD_UTS_LEN);
1211         up_read(&uts_sem);
1212
1213         if (!error && override_architecture(name))
1214                 error = -EFAULT;
1215         if (!error && override_release(name->release, sizeof(name->release)))
1216                 error = -EFAULT;
1217         return error ? -EFAULT : 0;
1218 }
1219 #endif
1220
1221 SYSCALL_DEFINE2(sethostname, char __user *, name, int, len)
1222 {
1223         int errno;
1224         char tmp[__NEW_UTS_LEN];
1225
1226         if (!ns_capable(current->nsproxy->uts_ns->user_ns, CAP_SYS_ADMIN))
1227                 return -EPERM;
1228
1229         if (len < 0 || len > __NEW_UTS_LEN)
1230                 return -EINVAL;
1231         down_write(&uts_sem);
1232         errno = -EFAULT;
1233         if (!copy_from_user(tmp, name, len)) {
1234                 struct new_utsname *u = utsname();
1235
1236                 memcpy(u->nodename, tmp, len);
1237                 memset(u->nodename + len, 0, sizeof(u->nodename) - len);
1238                 errno = 0;
1239                 uts_proc_notify(UTS_PROC_HOSTNAME);
1240         }
1241         up_write(&uts_sem);
1242         return errno;
1243 }
1244
1245 #ifdef __ARCH_WANT_SYS_GETHOSTNAME
1246
1247 SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)
1248 {
1249         int i, errno;
1250         struct new_utsname *u;
1251
1252         if (len < 0)
1253                 return -EINVAL;
1254         down_read(&uts_sem);
1255         u = utsname();
1256         i = 1 + strlen(u->nodename);
1257         if (i > len)
1258                 i = len;
1259         errno = 0;
1260         if (copy_to_user(name, u->nodename, i))
1261                 errno = -EFAULT;
1262         up_read(&uts_sem);
1263         return errno;
1264 }
1265
1266 #endif
1267
1268 /*
1269  * Only setdomainname; getdomainname can be implemented by calling
1270  * uname()
1271  */
1272 SYSCALL_DEFINE2(setdomainname, char __user *, name, int, len)
1273 {
1274         int errno;
1275         char tmp[__NEW_UTS_LEN];
1276
1277         if (!ns_capable(current->nsproxy->uts_ns->user_ns, CAP_SYS_ADMIN))
1278                 return -EPERM;
1279         if (len < 0 || len > __NEW_UTS_LEN)
1280                 return -EINVAL;
1281
1282         down_write(&uts_sem);
1283         errno = -EFAULT;
1284         if (!copy_from_user(tmp, name, len)) {
1285                 struct new_utsname *u = utsname();
1286
1287                 memcpy(u->domainname, tmp, len);
1288                 memset(u->domainname + len, 0, sizeof(u->domainname) - len);
1289                 errno = 0;
1290                 uts_proc_notify(UTS_PROC_DOMAINNAME);
1291         }
1292         up_write(&uts_sem);
1293         return errno;
1294 }
1295
1296 SYSCALL_DEFINE2(getrlimit, unsigned int, resource, struct rlimit __user *, rlim)
1297 {
1298         struct rlimit value;
1299         int ret;
1300
1301         ret = do_prlimit(current, resource, NULL, &value);
1302         if (!ret)
1303                 ret = copy_to_user(rlim, &value, sizeof(*rlim)) ? -EFAULT : 0;
1304
1305         return ret;
1306 }
1307
1308 #ifdef __ARCH_WANT_SYS_OLD_GETRLIMIT
1309
1310 /*
1311  *      Back compatibility for getrlimit. Needed for some apps.
1312  */
1313 SYSCALL_DEFINE2(old_getrlimit, unsigned int, resource,
1314                 struct rlimit __user *, rlim)
1315 {
1316         struct rlimit x;
1317         if (resource >= RLIM_NLIMITS)
1318                 return -EINVAL;
1319
1320         task_lock(current->group_leader);
1321         x = current->signal->rlim[resource];
1322         task_unlock(current->group_leader);
1323         if (x.rlim_cur > 0x7FFFFFFF)
1324                 x.rlim_cur = 0x7FFFFFFF;
1325         if (x.rlim_max > 0x7FFFFFFF)
1326                 x.rlim_max = 0x7FFFFFFF;
1327         return copy_to_user(rlim, &x, sizeof(x)) ? -EFAULT : 0;
1328 }
1329
1330 #endif
1331
1332 static inline bool rlim64_is_infinity(__u64 rlim64)
1333 {
1334 #if BITS_PER_LONG < 64
1335         return rlim64 >= ULONG_MAX;
1336 #else
1337         return rlim64 == RLIM64_INFINITY;
1338 #endif
1339 }
1340
1341 static void rlim_to_rlim64(const struct rlimit *rlim, struct rlimit64 *rlim64)
1342 {
1343         if (rlim->rlim_cur == RLIM_INFINITY)
1344                 rlim64->rlim_cur = RLIM64_INFINITY;
1345         else
1346                 rlim64->rlim_cur = rlim->rlim_cur;
1347         if (rlim->rlim_max == RLIM_INFINITY)
1348                 rlim64->rlim_max = RLIM64_INFINITY;
1349         else
1350                 rlim64->rlim_max = rlim->rlim_max;
1351 }
1352
1353 static void rlim64_to_rlim(const struct rlimit64 *rlim64, struct rlimit *rlim)
1354 {
1355         if (rlim64_is_infinity(rlim64->rlim_cur))
1356                 rlim->rlim_cur = RLIM_INFINITY;
1357         else
1358                 rlim->rlim_cur = (unsigned long)rlim64->rlim_cur;
1359         if (rlim64_is_infinity(rlim64->rlim_max))
1360                 rlim->rlim_max = RLIM_INFINITY;
1361         else
1362                 rlim->rlim_max = (unsigned long)rlim64->rlim_max;
1363 }
1364
1365 /* make sure you are allowed to change @tsk limits before calling this */
1366 int do_prlimit(struct task_struct *tsk, unsigned int resource,
1367                 struct rlimit *new_rlim, struct rlimit *old_rlim)
1368 {
1369         struct rlimit *rlim;
1370         int retval = 0;
1371
1372         if (resource >= RLIM_NLIMITS)
1373                 return -EINVAL;
1374         if (new_rlim) {
1375                 if (new_rlim->rlim_cur > new_rlim->rlim_max)
1376                         return -EINVAL;
1377                 if (resource == RLIMIT_NOFILE &&
1378                                 new_rlim->rlim_max > sysctl_nr_open)
1379                         return -EPERM;
1380         }
1381
1382         /* protect tsk->signal and tsk->sighand from disappearing */
1383         read_lock(&tasklist_lock);
1384         if (!tsk->sighand) {
1385                 retval = -ESRCH;
1386                 goto out;
1387         }
1388
1389         rlim = tsk->signal->rlim + resource;
1390         task_lock(tsk->group_leader);
1391         if (new_rlim) {
1392                 /* Keep the capable check against init_user_ns until
1393                    cgroups can contain all limits */
1394                 if (new_rlim->rlim_max > rlim->rlim_max &&
1395                                 !capable(CAP_SYS_RESOURCE))
1396                         retval = -EPERM;
1397                 if (!retval)
1398                         retval = security_task_setrlimit(tsk->group_leader,
1399                                         resource, new_rlim);
1400                 if (resource == RLIMIT_CPU && new_rlim->rlim_cur == 0) {
1401                         /*
1402                          * The caller is asking for an immediate RLIMIT_CPU
1403                          * expiry.  But we use the zero value to mean "it was
1404                          * never set".  So let's cheat and make it one second
1405                          * instead
1406                          */
1407                         new_rlim->rlim_cur = 1;
1408                 }
1409         }
1410         if (!retval) {
1411                 if (old_rlim)
1412                         *old_rlim = *rlim;
1413                 if (new_rlim)
1414                         *rlim = *new_rlim;
1415         }
1416         task_unlock(tsk->group_leader);
1417
1418         /*
1419          * RLIMIT_CPU handling.   Note that the kernel fails to return an error
1420          * code if it rejected the user's attempt to set RLIMIT_CPU.  This is a
1421          * very long-standing error, and fixing it now risks breakage of
1422          * applications, so we live with it
1423          */
1424          if (!retval && new_rlim && resource == RLIMIT_CPU &&
1425              new_rlim->rlim_cur != RLIM_INFINITY &&
1426              IS_ENABLED(CONFIG_POSIX_TIMERS))
1427                 update_rlimit_cpu(tsk, new_rlim->rlim_cur);
1428 out:
1429         read_unlock(&tasklist_lock);
1430         return retval;
1431 }
1432
1433 /* rcu lock must be held */
1434 static int check_prlimit_permission(struct task_struct *task)
1435 {
1436         const struct cred *cred = current_cred(), *tcred;
1437
1438         if (current == task)
1439                 return 0;
1440
1441         tcred = __task_cred(task);
1442         if (uid_eq(cred->uid, tcred->euid) &&
1443             uid_eq(cred->uid, tcred->suid) &&
1444             uid_eq(cred->uid, tcred->uid)  &&
1445             gid_eq(cred->gid, tcred->egid) &&
1446             gid_eq(cred->gid, tcred->sgid) &&
1447             gid_eq(cred->gid, tcred->gid))
1448                 return 0;
1449         if (ns_capable(tcred->user_ns, CAP_SYS_RESOURCE))
1450                 return 0;
1451
1452         return -EPERM;
1453 }
1454
1455 SYSCALL_DEFINE4(prlimit64, pid_t, pid, unsigned int, resource,
1456                 const struct rlimit64 __user *, new_rlim,
1457                 struct rlimit64 __user *, old_rlim)
1458 {
1459         struct rlimit64 old64, new64;
1460         struct rlimit old, new;
1461         struct task_struct *tsk;
1462         int ret;
1463
1464         if (new_rlim) {
1465                 if (copy_from_user(&new64, new_rlim, sizeof(new64)))
1466                         return -EFAULT;
1467                 rlim64_to_rlim(&new64, &new);
1468         }
1469
1470         rcu_read_lock();
1471         tsk = pid ? find_task_by_vpid(pid) : current;
1472         if (!tsk) {
1473                 rcu_read_unlock();
1474                 return -ESRCH;
1475         }
1476         ret = check_prlimit_permission(tsk);
1477         if (ret) {
1478                 rcu_read_unlock();
1479                 return ret;
1480         }
1481         get_task_struct(tsk);
1482         rcu_read_unlock();
1483
1484         ret = do_prlimit(tsk, resource, new_rlim ? &new : NULL,
1485                         old_rlim ? &old : NULL);
1486
1487         if (!ret && old_rlim) {
1488                 rlim_to_rlim64(&old, &old64);
1489                 if (copy_to_user(old_rlim, &old64, sizeof(old64)))
1490                         ret = -EFAULT;
1491         }
1492
1493         put_task_struct(tsk);
1494         return ret;
1495 }
1496
1497 SYSCALL_DEFINE2(setrlimit, unsigned int, resource, struct rlimit __user *, rlim)
1498 {
1499         struct rlimit new_rlim;
1500
1501         if (copy_from_user(&new_rlim, rlim, sizeof(*rlim)))
1502                 return -EFAULT;
1503         return do_prlimit(current, resource, &new_rlim, NULL);
1504 }
1505
1506 /*
1507  * It would make sense to put struct rusage in the task_struct,
1508  * except that would make the task_struct be *really big*.  After
1509  * task_struct gets moved into malloc'ed memory, it would
1510  * make sense to do this.  It will make moving the rest of the information
1511  * a lot simpler!  (Which we're not doing right now because we're not
1512  * measuring them yet).
1513  *
1514  * When sampling multiple threads for RUSAGE_SELF, under SMP we might have
1515  * races with threads incrementing their own counters.  But since word
1516  * reads are atomic, we either get new values or old values and we don't
1517  * care which for the sums.  We always take the siglock to protect reading
1518  * the c* fields from p->signal from races with exit.c updating those
1519  * fields when reaping, so a sample either gets all the additions of a
1520  * given child after it's reaped, or none so this sample is before reaping.
1521  *
1522  * Locking:
1523  * We need to take the siglock for CHILDEREN, SELF and BOTH
1524  * for  the cases current multithreaded, non-current single threaded
1525  * non-current multithreaded.  Thread traversal is now safe with
1526  * the siglock held.
1527  * Strictly speaking, we donot need to take the siglock if we are current and
1528  * single threaded,  as no one else can take our signal_struct away, no one
1529  * else can  reap the  children to update signal->c* counters, and no one else
1530  * can race with the signal-> fields. If we do not take any lock, the
1531  * signal-> fields could be read out of order while another thread was just
1532  * exiting. So we should  place a read memory barrier when we avoid the lock.
1533  * On the writer side,  write memory barrier is implied in  __exit_signal
1534  * as __exit_signal releases  the siglock spinlock after updating the signal->
1535  * fields. But we don't do this yet to keep things simple.
1536  *
1537  */
1538
1539 static void accumulate_thread_rusage(struct task_struct *t, struct rusage *r)
1540 {
1541         r->ru_nvcsw += t->nvcsw;
1542         r->ru_nivcsw += t->nivcsw;
1543         r->ru_minflt += t->min_flt;
1544         r->ru_majflt += t->maj_flt;
1545         r->ru_inblock += task_io_get_inblock(t);
1546         r->ru_oublock += task_io_get_oublock(t);
1547 }
1548
1549 static void k_getrusage(struct task_struct *p, int who, struct rusage *r)
1550 {
1551         struct task_struct *t;
1552         unsigned long flags;
1553         u64 tgutime, tgstime, utime, stime;
1554         unsigned long maxrss = 0;
1555
1556         memset((char *)r, 0, sizeof (*r));
1557         utime = stime = 0;
1558
1559         if (who == RUSAGE_THREAD) {
1560                 task_cputime_adjusted(current, &utime, &stime);
1561                 accumulate_thread_rusage(p, r);
1562                 maxrss = p->signal->maxrss;
1563                 goto out;
1564         }
1565
1566         if (!lock_task_sighand(p, &flags))
1567                 return;
1568
1569         switch (who) {
1570         case RUSAGE_BOTH:
1571         case RUSAGE_CHILDREN:
1572                 utime = p->signal->cutime;
1573                 stime = p->signal->cstime;
1574                 r->ru_nvcsw = p->signal->cnvcsw;
1575                 r->ru_nivcsw = p->signal->cnivcsw;
1576                 r->ru_minflt = p->signal->cmin_flt;
1577                 r->ru_majflt = p->signal->cmaj_flt;
1578                 r->ru_inblock = p->signal->cinblock;
1579                 r->ru_oublock = p->signal->coublock;
1580                 maxrss = p->signal->cmaxrss;
1581
1582                 if (who == RUSAGE_CHILDREN)
1583                         break;
1584
1585         case RUSAGE_SELF:
1586                 thread_group_cputime_adjusted(p, &tgutime, &tgstime);
1587                 utime += tgutime;
1588                 stime += tgstime;
1589                 r->ru_nvcsw += p->signal->nvcsw;
1590                 r->ru_nivcsw += p->signal->nivcsw;
1591                 r->ru_minflt += p->signal->min_flt;
1592                 r->ru_majflt += p->signal->maj_flt;
1593                 r->ru_inblock += p->signal->inblock;
1594                 r->ru_oublock += p->signal->oublock;
1595                 if (maxrss < p->signal->maxrss)
1596                         maxrss = p->signal->maxrss;
1597                 t = p;
1598                 do {
1599                         accumulate_thread_rusage(t, r);
1600                 } while_each_thread(p, t);
1601                 break;
1602
1603         default:
1604                 BUG();
1605         }
1606         unlock_task_sighand(p, &flags);
1607
1608 out:
1609         r->ru_utime = ns_to_timeval(utime);
1610         r->ru_stime = ns_to_timeval(stime);
1611
1612         if (who != RUSAGE_CHILDREN) {
1613                 struct mm_struct *mm = get_task_mm(p);
1614
1615                 if (mm) {
1616                         setmax_mm_hiwater_rss(&maxrss, mm);
1617                         mmput(mm);
1618                 }
1619         }
1620         r->ru_maxrss = maxrss * (PAGE_SIZE / 1024); /* convert pages to KBs */
1621 }
1622
1623 int getrusage(struct task_struct *p, int who, struct rusage __user *ru)
1624 {
1625         struct rusage r;
1626
1627         k_getrusage(p, who, &r);
1628         return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
1629 }
1630
1631 SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru)
1632 {
1633         if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN &&
1634             who != RUSAGE_THREAD)
1635                 return -EINVAL;
1636         return getrusage(current, who, ru);
1637 }
1638
1639 #ifdef CONFIG_COMPAT
1640 COMPAT_SYSCALL_DEFINE2(getrusage, int, who, struct compat_rusage __user *, ru)
1641 {
1642         struct rusage r;
1643
1644         if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN &&
1645             who != RUSAGE_THREAD)
1646                 return -EINVAL;
1647
1648         k_getrusage(current, who, &r);
1649         return put_compat_rusage(&r, ru);
1650 }
1651 #endif
1652
1653 SYSCALL_DEFINE1(umask, int, mask)
1654 {
1655         mask = xchg(&current->fs->umask, mask & S_IRWXUGO);
1656         return mask;
1657 }
1658
1659 static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
1660 {
1661         struct fd exe;
1662         struct file *old_exe, *exe_file;
1663         struct inode *inode;
1664         int err;
1665
1666         exe = fdget(fd);
1667         if (!exe.file)
1668                 return -EBADF;
1669
1670         inode = file_inode(exe.file);
1671
1672         /*
1673          * Because the original mm->exe_file points to executable file, make
1674          * sure that this one is executable as well, to avoid breaking an
1675          * overall picture.
1676          */
1677         err = -EACCES;
1678         if (!S_ISREG(inode->i_mode) || path_noexec(&exe.file->f_path))
1679                 goto exit;
1680
1681         err = inode_permission(inode, MAY_EXEC);
1682         if (err)
1683                 goto exit;
1684
1685         /*
1686          * Forbid mm->exe_file change if old file still mapped.
1687          */
1688         exe_file = get_mm_exe_file(mm);
1689         err = -EBUSY;
1690         if (exe_file) {
1691                 struct vm_area_struct *vma;
1692
1693                 down_read(&mm->mmap_sem);
1694                 for (vma = mm->mmap; vma; vma = vma->vm_next) {
1695                         if (!vma->vm_file)
1696                                 continue;
1697                         if (path_equal(&vma->vm_file->f_path,
1698                                        &exe_file->f_path))
1699                                 goto exit_err;
1700                 }
1701
1702                 up_read(&mm->mmap_sem);
1703                 fput(exe_file);
1704         }
1705
1706         err = 0;
1707         /* set the new file, lockless */
1708         get_file(exe.file);
1709         old_exe = xchg(&mm->exe_file, exe.file);
1710         if (old_exe)
1711                 fput(old_exe);
1712 exit:
1713         fdput(exe);
1714         return err;
1715 exit_err:
1716         up_read(&mm->mmap_sem);
1717         fput(exe_file);
1718         goto exit;
1719 }
1720
1721 /*
1722  * WARNING: we don't require any capability here so be very careful
1723  * in what is allowed for modification from userspace.
1724  */
1725 static int validate_prctl_map(struct prctl_mm_map *prctl_map)
1726 {
1727         unsigned long mmap_max_addr = TASK_SIZE;
1728         struct mm_struct *mm = current->mm;
1729         int error = -EINVAL, i;
1730
1731         static const unsigned char offsets[] = {
1732                 offsetof(struct prctl_mm_map, start_code),
1733                 offsetof(struct prctl_mm_map, end_code),
1734                 offsetof(struct prctl_mm_map, start_data),
1735                 offsetof(struct prctl_mm_map, end_data),
1736                 offsetof(struct prctl_mm_map, start_brk),
1737                 offsetof(struct prctl_mm_map, brk),
1738                 offsetof(struct prctl_mm_map, start_stack),
1739                 offsetof(struct prctl_mm_map, arg_start),
1740                 offsetof(struct prctl_mm_map, arg_end),
1741                 offsetof(struct prctl_mm_map, env_start),
1742                 offsetof(struct prctl_mm_map, env_end),
1743         };
1744
1745         /*
1746          * Make sure the members are not somewhere outside
1747          * of allowed address space.
1748          */
1749         for (i = 0; i < ARRAY_SIZE(offsets); i++) {
1750                 u64 val = *(u64 *)((char *)prctl_map + offsets[i]);
1751
1752                 if ((unsigned long)val >= mmap_max_addr ||
1753                     (unsigned long)val < mmap_min_addr)
1754                         goto out;
1755         }
1756
1757         /*
1758          * Make sure the pairs are ordered.
1759          */
1760 #define __prctl_check_order(__m1, __op, __m2)                           \
1761         ((unsigned long)prctl_map->__m1 __op                            \
1762          (unsigned long)prctl_map->__m2) ? 0 : -EINVAL
1763         error  = __prctl_check_order(start_code, <, end_code);
1764         error |= __prctl_check_order(start_data, <, end_data);
1765         error |= __prctl_check_order(start_brk, <=, brk);
1766         error |= __prctl_check_order(arg_start, <=, arg_end);
1767         error |= __prctl_check_order(env_start, <=, env_end);
1768         if (error)
1769                 goto out;
1770 #undef __prctl_check_order
1771
1772         error = -EINVAL;
1773
1774         /*
1775          * @brk should be after @end_data in traditional maps.
1776          */
1777         if (prctl_map->start_brk <= prctl_map->end_data ||
1778             prctl_map->brk <= prctl_map->end_data)
1779                 goto out;
1780
1781         /*
1782          * Neither we should allow to override limits if they set.
1783          */
1784         if (check_data_rlimit(rlimit(RLIMIT_DATA), prctl_map->brk,
1785                               prctl_map->start_brk, prctl_map->end_data,
1786                               prctl_map->start_data))
1787                         goto out;
1788
1789         /*
1790          * Someone is trying to cheat the auxv vector.
1791          */
1792         if (prctl_map->auxv_size) {
1793                 if (!prctl_map->auxv || prctl_map->auxv_size > sizeof(mm->saved_auxv))
1794                         goto out;
1795         }
1796
1797         /*
1798          * Finally, make sure the caller has the rights to
1799          * change /proc/pid/exe link: only local root should
1800          * be allowed to.
1801          */
1802         if (prctl_map->exe_fd != (u32)-1) {
1803                 struct user_namespace *ns = current_user_ns();
1804                 const struct cred *cred = current_cred();
1805
1806                 if (!uid_eq(cred->uid, make_kuid(ns, 0)) ||
1807                     !gid_eq(cred->gid, make_kgid(ns, 0)))
1808                         goto out;
1809         }
1810
1811         error = 0;
1812 out:
1813         return error;
1814 }
1815
1816 #ifdef CONFIG_CHECKPOINT_RESTORE
1817 static int prctl_set_mm_map(int opt, const void __user *addr, unsigned long data_size)
1818 {
1819         struct prctl_mm_map prctl_map = { .exe_fd = (u32)-1, };
1820         unsigned long user_auxv[AT_VECTOR_SIZE];
1821         struct mm_struct *mm = current->mm;
1822         int error;
1823
1824         BUILD_BUG_ON(sizeof(user_auxv) != sizeof(mm->saved_auxv));
1825         BUILD_BUG_ON(sizeof(struct prctl_mm_map) > 256);
1826
1827         if (opt == PR_SET_MM_MAP_SIZE)
1828                 return put_user((unsigned int)sizeof(prctl_map),
1829                                 (unsigned int __user *)addr);
1830
1831         if (data_size != sizeof(prctl_map))
1832                 return -EINVAL;
1833
1834         if (copy_from_user(&prctl_map, addr, sizeof(prctl_map)))
1835                 return -EFAULT;
1836
1837         error = validate_prctl_map(&prctl_map);
1838         if (error)
1839                 return error;
1840
1841         if (prctl_map.auxv_size) {
1842                 memset(user_auxv, 0, sizeof(user_auxv));
1843                 if (copy_from_user(user_auxv,
1844                                    (const void __user *)prctl_map.auxv,
1845                                    prctl_map.auxv_size))
1846                         return -EFAULT;
1847
1848                 /* Last entry must be AT_NULL as specification requires */
1849                 user_auxv[AT_VECTOR_SIZE - 2] = AT_NULL;
1850                 user_auxv[AT_VECTOR_SIZE - 1] = AT_NULL;
1851         }
1852
1853         if (prctl_map.exe_fd != (u32)-1) {
1854                 error = prctl_set_mm_exe_file(mm, prctl_map.exe_fd);
1855                 if (error)
1856                         return error;
1857         }
1858
1859         down_write(&mm->mmap_sem);
1860
1861         /*
1862          * We don't validate if these members are pointing to
1863          * real present VMAs because application may have correspond
1864          * VMAs already unmapped and kernel uses these members for statistics
1865          * output in procfs mostly, except
1866          *
1867          *  - @start_brk/@brk which are used in do_brk but kernel lookups
1868          *    for VMAs when updating these memvers so anything wrong written
1869          *    here cause kernel to swear at userspace program but won't lead
1870          *    to any problem in kernel itself
1871          */
1872
1873         mm->start_code  = prctl_map.start_code;
1874         mm->end_code    = prctl_map.end_code;
1875         mm->start_data  = prctl_map.start_data;
1876         mm->end_data    = prctl_map.end_data;
1877         mm->start_brk   = prctl_map.start_brk;
1878         mm->brk         = prctl_map.brk;
1879         mm->start_stack = prctl_map.start_stack;
1880         mm->arg_start   = prctl_map.arg_start;
1881         mm->arg_end     = prctl_map.arg_end;
1882         mm->env_start   = prctl_map.env_start;
1883         mm->env_end     = prctl_map.env_end;
1884
1885         /*
1886          * Note this update of @saved_auxv is lockless thus
1887          * if someone reads this member in procfs while we're
1888          * updating -- it may get partly updated results. It's
1889          * known and acceptable trade off: we leave it as is to
1890          * not introduce additional locks here making the kernel
1891          * more complex.
1892          */
1893         if (prctl_map.auxv_size)
1894                 memcpy(mm->saved_auxv, user_auxv, sizeof(user_auxv));
1895
1896         up_write(&mm->mmap_sem);
1897         return 0;
1898 }
1899 #endif /* CONFIG_CHECKPOINT_RESTORE */
1900
1901 static int prctl_set_auxv(struct mm_struct *mm, unsigned long addr,
1902                           unsigned long len)
1903 {
1904         /*
1905          * This doesn't move the auxiliary vector itself since it's pinned to
1906          * mm_struct, but it permits filling the vector with new values.  It's
1907          * up to the caller to provide sane values here, otherwise userspace
1908          * tools which use this vector might be unhappy.
1909          */
1910         unsigned long user_auxv[AT_VECTOR_SIZE];
1911
1912         if (len > sizeof(user_auxv))
1913                 return -EINVAL;
1914
1915         if (copy_from_user(user_auxv, (const void __user *)addr, len))
1916                 return -EFAULT;
1917
1918         /* Make sure the last entry is always AT_NULL */
1919         user_auxv[AT_VECTOR_SIZE - 2] = 0;
1920         user_auxv[AT_VECTOR_SIZE - 1] = 0;
1921
1922         BUILD_BUG_ON(sizeof(user_auxv) != sizeof(mm->saved_auxv));
1923
1924         task_lock(current);
1925         memcpy(mm->saved_auxv, user_auxv, len);
1926         task_unlock(current);
1927
1928         return 0;
1929 }
1930
1931 static int prctl_set_mm(int opt, unsigned long addr,
1932                         unsigned long arg4, unsigned long arg5)
1933 {
1934         struct mm_struct *mm = current->mm;
1935         struct prctl_mm_map prctl_map;
1936         struct vm_area_struct *vma;
1937         int error;
1938
1939         if (arg5 || (arg4 && (opt != PR_SET_MM_AUXV &&
1940                               opt != PR_SET_MM_MAP &&
1941                               opt != PR_SET_MM_MAP_SIZE)))
1942                 return -EINVAL;
1943
1944 #ifdef CONFIG_CHECKPOINT_RESTORE
1945         if (opt == PR_SET_MM_MAP || opt == PR_SET_MM_MAP_SIZE)
1946                 return prctl_set_mm_map(opt, (const void __user *)addr, arg4);
1947 #endif
1948
1949         if (!capable(CAP_SYS_RESOURCE))
1950                 return -EPERM;
1951
1952         if (opt == PR_SET_MM_EXE_FILE)
1953                 return prctl_set_mm_exe_file(mm, (unsigned int)addr);
1954
1955         if (opt == PR_SET_MM_AUXV)
1956                 return prctl_set_auxv(mm, addr, arg4);
1957
1958         if (addr >= TASK_SIZE || addr < mmap_min_addr)
1959                 return -EINVAL;
1960
1961         error = -EINVAL;
1962
1963         down_write(&mm->mmap_sem);
1964         vma = find_vma(mm, addr);
1965
1966         prctl_map.start_code    = mm->start_code;
1967         prctl_map.end_code      = mm->end_code;
1968         prctl_map.start_data    = mm->start_data;
1969         prctl_map.end_data      = mm->end_data;
1970         prctl_map.start_brk     = mm->start_brk;
1971         prctl_map.brk           = mm->brk;
1972         prctl_map.start_stack   = mm->start_stack;
1973         prctl_map.arg_start     = mm->arg_start;
1974         prctl_map.arg_end       = mm->arg_end;
1975         prctl_map.env_start     = mm->env_start;
1976         prctl_map.env_end       = mm->env_end;
1977         prctl_map.auxv          = NULL;
1978         prctl_map.auxv_size     = 0;
1979         prctl_map.exe_fd        = -1;
1980
1981         switch (opt) {
1982         case PR_SET_MM_START_CODE:
1983                 prctl_map.start_code = addr;
1984                 break;
1985         case PR_SET_MM_END_CODE:
1986                 prctl_map.end_code = addr;
1987                 break;
1988         case PR_SET_MM_START_DATA:
1989                 prctl_map.start_data = addr;
1990                 break;
1991         case PR_SET_MM_END_DATA:
1992                 prctl_map.end_data = addr;
1993                 break;
1994         case PR_SET_MM_START_STACK:
1995                 prctl_map.start_stack = addr;
1996                 break;
1997         case PR_SET_MM_START_BRK:
1998                 prctl_map.start_brk = addr;
1999                 break;
2000         case PR_SET_MM_BRK:
2001                 prctl_map.brk = addr;
2002                 break;
2003         case PR_SET_MM_ARG_START:
2004                 prctl_map.arg_start = addr;
2005                 break;
2006         case PR_SET_MM_ARG_END:
2007                 prctl_map.arg_end = addr;
2008                 break;
2009         case PR_SET_MM_ENV_START:
2010                 prctl_map.env_start = addr;
2011                 break;
2012         case PR_SET_MM_ENV_END:
2013                 prctl_map.env_end = addr;
2014                 break;
2015         default:
2016                 goto out;
2017         }
2018
2019         error = validate_prctl_map(&prctl_map);
2020         if (error)
2021                 goto out;
2022
2023         switch (opt) {
2024         /*
2025          * If command line arguments and environment
2026          * are placed somewhere else on stack, we can
2027          * set them up here, ARG_START/END to setup
2028          * command line argumets and ENV_START/END
2029          * for environment.
2030          */
2031         case PR_SET_MM_START_STACK:
2032         case PR_SET_MM_ARG_START:
2033         case PR_SET_MM_ARG_END:
2034         case PR_SET_MM_ENV_START:
2035         case PR_SET_MM_ENV_END:
2036                 if (!vma) {
2037                         error = -EFAULT;
2038                         goto out;
2039                 }
2040         }
2041
2042         mm->start_code  = prctl_map.start_code;
2043         mm->end_code    = prctl_map.end_code;
2044         mm->start_data  = prctl_map.start_data;
2045         mm->end_data    = prctl_map.end_data;
2046         mm->start_brk   = prctl_map.start_brk;
2047         mm->brk         = prctl_map.brk;
2048         mm->start_stack = prctl_map.start_stack;
2049         mm->arg_start   = prctl_map.arg_start;
2050         mm->arg_end     = prctl_map.arg_end;
2051         mm->env_start   = prctl_map.env_start;
2052         mm->env_end     = prctl_map.env_end;
2053
2054         error = 0;
2055 out:
2056         up_write(&mm->mmap_sem);
2057         return error;
2058 }
2059
2060 #ifdef CONFIG_CHECKPOINT_RESTORE
2061 static int prctl_get_tid_address(struct task_struct *me, int __user **tid_addr)
2062 {
2063         return put_user(me->clear_child_tid, tid_addr);
2064 }
2065 #else
2066 static int prctl_get_tid_address(struct task_struct *me, int __user **tid_addr)
2067 {
2068         return -EINVAL;
2069 }
2070 #endif
2071
2072 static int propagate_has_child_subreaper(struct task_struct *p, void *data)
2073 {
2074         /*
2075          * If task has has_child_subreaper - all its decendants
2076          * already have these flag too and new decendants will
2077          * inherit it on fork, skip them.
2078          *
2079          * If we've found child_reaper - skip descendants in
2080          * it's subtree as they will never get out pidns.
2081          */
2082         if (p->signal->has_child_subreaper ||
2083             is_child_reaper(task_pid(p)))
2084                 return 0;
2085
2086         p->signal->has_child_subreaper = 1;
2087         return 1;
2088 }
2089
2090 SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
2091                 unsigned long, arg4, unsigned long, arg5)
2092 {
2093         struct task_struct *me = current;
2094         unsigned char comm[sizeof(me->comm)];
2095         long error;
2096
2097         error = security_task_prctl(option, arg2, arg3, arg4, arg5);
2098         if (error != -ENOSYS)
2099                 return error;
2100
2101         error = 0;
2102         switch (option) {
2103         case PR_SET_PDEATHSIG:
2104                 if (!valid_signal(arg2)) {
2105                         error = -EINVAL;
2106                         break;
2107                 }
2108                 me->pdeath_signal = arg2;
2109                 break;
2110         case PR_GET_PDEATHSIG:
2111                 error = put_user(me->pdeath_signal, (int __user *)arg2);
2112                 break;
2113         case PR_GET_DUMPABLE:
2114                 error = get_dumpable(me->mm);
2115                 break;
2116         case PR_SET_DUMPABLE:
2117                 if (arg2 != SUID_DUMP_DISABLE && arg2 != SUID_DUMP_USER) {
2118                         error = -EINVAL;
2119                         break;
2120                 }
2121                 set_dumpable(me->mm, arg2);
2122                 break;
2123
2124         case PR_SET_UNALIGN:
2125                 error = SET_UNALIGN_CTL(me, arg2);
2126                 break;
2127         case PR_GET_UNALIGN:
2128                 error = GET_UNALIGN_CTL(me, arg2);
2129                 break;
2130         case PR_SET_FPEMU:
2131                 error = SET_FPEMU_CTL(me, arg2);
2132                 break;
2133         case PR_GET_FPEMU:
2134                 error = GET_FPEMU_CTL(me, arg2);
2135                 break;
2136         case PR_SET_FPEXC:
2137                 error = SET_FPEXC_CTL(me, arg2);
2138                 break;
2139         case PR_GET_FPEXC:
2140                 error = GET_FPEXC_CTL(me, arg2);
2141                 break;
2142         case PR_GET_TIMING:
2143                 error = PR_TIMING_STATISTICAL;
2144                 break;
2145         case PR_SET_TIMING:
2146                 if (arg2 != PR_TIMING_STATISTICAL)
2147                         error = -EINVAL;
2148                 break;
2149         case PR_SET_NAME:
2150                 comm[sizeof(me->comm) - 1] = 0;
2151                 if (strncpy_from_user(comm, (char __user *)arg2,
2152                                       sizeof(me->comm) - 1) < 0)
2153                         return -EFAULT;
2154                 set_task_comm(me, comm);
2155                 proc_comm_connector(me);
2156                 break;
2157         case PR_GET_NAME:
2158                 get_task_comm(comm, me);
2159                 if (copy_to_user((char __user *)arg2, comm, sizeof(comm)))
2160                         return -EFAULT;
2161                 break;
2162         case PR_GET_ENDIAN:
2163                 error = GET_ENDIAN(me, arg2);
2164                 break;
2165         case PR_SET_ENDIAN:
2166                 error = SET_ENDIAN(me, arg2);
2167                 break;
2168         case PR_GET_SECCOMP:
2169                 error = prctl_get_seccomp();
2170                 break;
2171         case PR_SET_SECCOMP:
2172                 error = prctl_set_seccomp(arg2, (char __user *)arg3);
2173                 break;
2174         case PR_GET_TSC:
2175                 error = GET_TSC_CTL(arg2);
2176                 break;
2177         case PR_SET_TSC:
2178                 error = SET_TSC_CTL(arg2);
2179                 break;
2180         case PR_TASK_PERF_EVENTS_DISABLE:
2181                 error = perf_event_task_disable();
2182                 break;
2183         case PR_TASK_PERF_EVENTS_ENABLE:
2184                 error = perf_event_task_enable();
2185                 break;
2186         case PR_GET_TIMERSLACK:
2187                 if (current->timer_slack_ns > ULONG_MAX)
2188                         error = ULONG_MAX;
2189                 else
2190                         error = current->timer_slack_ns;
2191                 break;
2192         case PR_SET_TIMERSLACK:
2193                 if (arg2 <= 0)
2194                         current->timer_slack_ns =
2195                                         current->default_timer_slack_ns;
2196                 else
2197                         current->timer_slack_ns = arg2;
2198                 break;
2199         case PR_MCE_KILL:
2200                 if (arg4 | arg5)
2201                         return -EINVAL;
2202                 switch (arg2) {
2203                 case PR_MCE_KILL_CLEAR:
2204                         if (arg3 != 0)
2205                                 return -EINVAL;
2206                         current->flags &= ~PF_MCE_PROCESS;
2207                         break;
2208                 case PR_MCE_KILL_SET:
2209                         current->flags |= PF_MCE_PROCESS;
2210                         if (arg3 == PR_MCE_KILL_EARLY)
2211                                 current->flags |= PF_MCE_EARLY;
2212                         else if (arg3 == PR_MCE_KILL_LATE)
2213                                 current->flags &= ~PF_MCE_EARLY;
2214                         else if (arg3 == PR_MCE_KILL_DEFAULT)
2215                                 current->flags &=
2216                                                 ~(PF_MCE_EARLY|PF_MCE_PROCESS);
2217                         else
2218                                 return -EINVAL;
2219                         break;
2220                 default:
2221                         return -EINVAL;
2222                 }
2223                 break;
2224         case PR_MCE_KILL_GET:
2225                 if (arg2 | arg3 | arg4 | arg5)
2226                         return -EINVAL;
2227                 if (current->flags & PF_MCE_PROCESS)
2228                         error = (current->flags & PF_MCE_EARLY) ?
2229                                 PR_MCE_KILL_EARLY : PR_MCE_KILL_LATE;
2230                 else
2231                         error = PR_MCE_KILL_DEFAULT;
2232                 break;
2233         case PR_SET_MM:
2234                 error = prctl_set_mm(arg2, arg3, arg4, arg5);
2235                 break;
2236         case PR_GET_TID_ADDRESS:
2237                 error = prctl_get_tid_address(me, (int __user **)arg2);
2238                 break;
2239         case PR_SET_CHILD_SUBREAPER:
2240                 me->signal->is_child_subreaper = !!arg2;
2241                 if (!arg2)
2242                         break;
2243
2244                 walk_process_tree(me, propagate_has_child_subreaper, NULL);
2245                 break;
2246         case PR_GET_CHILD_SUBREAPER:
2247                 error = put_user(me->signal->is_child_subreaper,
2248                                  (int __user *)arg2);
2249                 break;
2250         case PR_SET_NO_NEW_PRIVS:
2251                 if (arg2 != 1 || arg3 || arg4 || arg5)
2252                         return -EINVAL;
2253
2254                 task_set_no_new_privs(current);
2255                 break;
2256         case PR_GET_NO_NEW_PRIVS:
2257                 if (arg2 || arg3 || arg4 || arg5)
2258                         return -EINVAL;
2259                 return task_no_new_privs(current) ? 1 : 0;
2260         case PR_GET_THP_DISABLE:
2261                 if (arg2 || arg3 || arg4 || arg5)
2262                         return -EINVAL;
2263                 error = !!(me->mm->def_flags & VM_NOHUGEPAGE);
2264                 break;
2265         case PR_SET_THP_DISABLE:
2266                 if (arg3 || arg4 || arg5)
2267                         return -EINVAL;
2268                 if (down_write_killable(&me->mm->mmap_sem))
2269                         return -EINTR;
2270                 if (arg2)
2271                         me->mm->def_flags |= VM_NOHUGEPAGE;
2272                 else
2273                         me->mm->def_flags &= ~VM_NOHUGEPAGE;
2274                 up_write(&me->mm->mmap_sem);
2275                 break;
2276         case PR_MPX_ENABLE_MANAGEMENT:
2277                 if (arg2 || arg3 || arg4 || arg5)
2278                         return -EINVAL;
2279                 error = MPX_ENABLE_MANAGEMENT();
2280                 break;
2281         case PR_MPX_DISABLE_MANAGEMENT:
2282                 if (arg2 || arg3 || arg4 || arg5)
2283                         return -EINVAL;
2284                 error = MPX_DISABLE_MANAGEMENT();
2285                 break;
2286         case PR_SET_FP_MODE:
2287                 error = SET_FP_MODE(me, arg2);
2288                 break;
2289         case PR_GET_FP_MODE:
2290                 error = GET_FP_MODE(me);
2291                 break;
2292         default:
2293                 error = -EINVAL;
2294                 break;
2295         }
2296         return error;
2297 }
2298
2299 SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep,
2300                 struct getcpu_cache __user *, unused)
2301 {
2302         int err = 0;
2303         int cpu = raw_smp_processor_id();
2304
2305         if (cpup)
2306                 err |= put_user(cpu, cpup);
2307         if (nodep)
2308                 err |= put_user(cpu_to_node(cpu), nodep);
2309         return err ? -EFAULT : 0;
2310 }
2311
2312 /**
2313  * do_sysinfo - fill in sysinfo struct
2314  * @info: pointer to buffer to fill
2315  */
2316 static int do_sysinfo(struct sysinfo *info)
2317 {
2318         unsigned long mem_total, sav_total;
2319         unsigned int mem_unit, bitcount;
2320         struct timespec tp;
2321
2322         memset(info, 0, sizeof(struct sysinfo));
2323
2324         get_monotonic_boottime(&tp);
2325         info->uptime = tp.tv_sec + (tp.tv_nsec ? 1 : 0);
2326
2327         get_avenrun(info->loads, 0, SI_LOAD_SHIFT - FSHIFT);
2328
2329         info->procs = nr_threads;
2330
2331         si_meminfo(info);
2332         si_swapinfo(info);
2333
2334         /*
2335          * If the sum of all the available memory (i.e. ram + swap)
2336          * is less than can be stored in a 32 bit unsigned long then
2337          * we can be binary compatible with 2.2.x kernels.  If not,
2338          * well, in that case 2.2.x was broken anyways...
2339          *
2340          *  -Erik Andersen <andersee@debian.org>
2341          */
2342
2343         mem_total = info->totalram + info->totalswap;
2344         if (mem_total < info->totalram || mem_total < info->totalswap)
2345                 goto out;
2346         bitcount = 0;
2347         mem_unit = info->mem_unit;
2348         while (mem_unit > 1) {
2349                 bitcount++;
2350                 mem_unit >>= 1;
2351                 sav_total = mem_total;
2352                 mem_total <<= 1;
2353                 if (mem_total < sav_total)
2354                         goto out;
2355         }
2356
2357         /*
2358          * If mem_total did not overflow, multiply all memory values by
2359          * info->mem_unit and set it to 1.  This leaves things compatible
2360          * with 2.2.x, and also retains compatibility with earlier 2.4.x
2361          * kernels...
2362          */
2363
2364         info->mem_unit = 1;
2365         info->totalram <<= bitcount;
2366         info->freeram <<= bitcount;
2367         info->sharedram <<= bitcount;
2368         info->bufferram <<= bitcount;
2369         info->totalswap <<= bitcount;
2370         info->freeswap <<= bitcount;
2371         info->totalhigh <<= bitcount;
2372         info->freehigh <<= bitcount;
2373
2374 out:
2375         return 0;
2376 }
2377
2378 SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)
2379 {
2380         struct sysinfo val;
2381
2382         do_sysinfo(&val);
2383
2384         if (copy_to_user(info, &val, sizeof(struct sysinfo)))
2385                 return -EFAULT;
2386
2387         return 0;
2388 }
2389
2390 #ifdef CONFIG_COMPAT
2391 struct compat_sysinfo {
2392         s32 uptime;
2393         u32 loads[3];
2394         u32 totalram;
2395         u32 freeram;
2396         u32 sharedram;
2397         u32 bufferram;
2398         u32 totalswap;
2399         u32 freeswap;
2400         u16 procs;
2401         u16 pad;
2402         u32 totalhigh;
2403         u32 freehigh;
2404         u32 mem_unit;
2405         char _f[20-2*sizeof(u32)-sizeof(int)];
2406 };
2407
2408 COMPAT_SYSCALL_DEFINE1(sysinfo, struct compat_sysinfo __user *, info)
2409 {
2410         struct sysinfo s;
2411
2412         do_sysinfo(&s);
2413
2414         /* Check to see if any memory value is too large for 32-bit and scale
2415          *  down if needed
2416          */
2417         if (upper_32_bits(s.totalram) || upper_32_bits(s.totalswap)) {
2418                 int bitcount = 0;
2419
2420                 while (s.mem_unit < PAGE_SIZE) {
2421                         s.mem_unit <<= 1;
2422                         bitcount++;
2423                 }
2424
2425                 s.totalram >>= bitcount;
2426                 s.freeram >>= bitcount;
2427                 s.sharedram >>= bitcount;
2428                 s.bufferram >>= bitcount;
2429                 s.totalswap >>= bitcount;
2430                 s.freeswap >>= bitcount;
2431                 s.totalhigh >>= bitcount;
2432                 s.freehigh >>= bitcount;
2433         }
2434
2435         if (!access_ok(VERIFY_WRITE, info, sizeof(struct compat_sysinfo)) ||
2436             __put_user(s.uptime, &info->uptime) ||
2437             __put_user(s.loads[0], &info->loads[0]) ||
2438             __put_user(s.loads[1], &info->loads[1]) ||
2439             __put_user(s.loads[2], &info->loads[2]) ||
2440             __put_user(s.totalram, &info->totalram) ||
2441             __put_user(s.freeram, &info->freeram) ||
2442             __put_user(s.sharedram, &info->sharedram) ||
2443             __put_user(s.bufferram, &info->bufferram) ||
2444             __put_user(s.totalswap, &info->totalswap) ||
2445             __put_user(s.freeswap, &info->freeswap) ||
2446             __put_user(s.procs, &info->procs) ||
2447             __put_user(s.totalhigh, &info->totalhigh) ||
2448             __put_user(s.freehigh, &info->freehigh) ||
2449             __put_user(s.mem_unit, &info->mem_unit))
2450                 return -EFAULT;
2451
2452         return 0;
2453 }
2454 #endif /* CONFIG_COMPAT */