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