1 /* 2 * linux/kernel/sys.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7 #include <linux/module.h> 8 #include <linux/mm.h> 9 #include <linux/utsname.h> 10 #include <linux/mman.h> 11 #include <linux/notifier.h> 12 #include <linux/reboot.h> 13 #include <linux/prctl.h> 14 #include <linux/highuid.h> 15 #include <linux/fs.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/ptrace.h> 37 #include <linux/fs_struct.h> 38 39 #include <linux/compat.h> 40 #include <linux/syscalls.h> 41 #include <linux/kprobes.h> 42 #include <linux/user_namespace.h> 43 44 #include <asm/uaccess.h> 45 #include <asm/io.h> 46 #include <asm/unistd.h> 47 48 #ifndef SET_UNALIGN_CTL 49 # define SET_UNALIGN_CTL(a,b) (-EINVAL) 50 #endif 51 #ifndef GET_UNALIGN_CTL 52 # define GET_UNALIGN_CTL(a,b) (-EINVAL) 53 #endif 54 #ifndef SET_FPEMU_CTL 55 # define SET_FPEMU_CTL(a,b) (-EINVAL) 56 #endif 57 #ifndef GET_FPEMU_CTL 58 # define GET_FPEMU_CTL(a,b) (-EINVAL) 59 #endif 60 #ifndef SET_FPEXC_CTL 61 # define SET_FPEXC_CTL(a,b) (-EINVAL) 62 #endif 63 #ifndef GET_FPEXC_CTL 64 # define GET_FPEXC_CTL(a,b) (-EINVAL) 65 #endif 66 #ifndef GET_ENDIAN 67 # define GET_ENDIAN(a,b) (-EINVAL) 68 #endif 69 #ifndef SET_ENDIAN 70 # define SET_ENDIAN(a,b) (-EINVAL) 71 #endif 72 #ifndef GET_TSC_CTL 73 # define GET_TSC_CTL(a) (-EINVAL) 74 #endif 75 #ifndef SET_TSC_CTL 76 # define SET_TSC_CTL(a) (-EINVAL) 77 #endif 78 79 /* 80 * this is where the system-wide overflow UID and GID are defined, for 81 * architectures that now have 32-bit UID/GID but didn't in the past 82 */ 83 84 int overflowuid = DEFAULT_OVERFLOWUID; 85 int overflowgid = DEFAULT_OVERFLOWGID; 86 87 #ifdef CONFIG_UID16 88 EXPORT_SYMBOL(overflowuid); 89 EXPORT_SYMBOL(overflowgid); 90 #endif 91 92 /* 93 * the same as above, but for filesystems which can only store a 16-bit 94 * UID and GID. as such, this is needed on all architectures 95 */ 96 97 int fs_overflowuid = DEFAULT_FS_OVERFLOWUID; 98 int fs_overflowgid = DEFAULT_FS_OVERFLOWUID; 99 100 EXPORT_SYMBOL(fs_overflowuid); 101 EXPORT_SYMBOL(fs_overflowgid); 102 103 /* 104 * this indicates whether you can reboot with ctrl-alt-del: the default is yes 105 */ 106 107 int C_A_D = 1; 108 struct pid *cad_pid; 109 EXPORT_SYMBOL(cad_pid); 110 111 /* 112 * If set, this is used for preparing the system to power off. 113 */ 114 115 void (*pm_power_off_prepare)(void); 116 117 /* 118 * set the priority of a task 119 * - the caller must hold the RCU read lock 120 */ 121 static int set_one_prio(struct task_struct *p, int niceval, int error) 122 { 123 const struct cred *cred = current_cred(), *pcred = __task_cred(p); 124 int no_nice; 125 126 if (pcred->uid != cred->euid && 127 pcred->euid != cred->euid && !capable(CAP_SYS_NICE)) { 128 error = -EPERM; 129 goto out; 130 } 131 if (niceval < task_nice(p) && !can_nice(p, niceval)) { 132 error = -EACCES; 133 goto out; 134 } 135 no_nice = security_task_setnice(p, niceval); 136 if (no_nice) { 137 error = no_nice; 138 goto out; 139 } 140 if (error == -ESRCH) 141 error = 0; 142 set_user_nice(p, niceval); 143 out: 144 return error; 145 } 146 147 SYSCALL_DEFINE3(setpriority, int, which, int, who, int, niceval) 148 { 149 struct task_struct *g, *p; 150 struct user_struct *user; 151 const struct cred *cred = current_cred(); 152 int error = -EINVAL; 153 struct pid *pgrp; 154 155 if (which > PRIO_USER || which < PRIO_PROCESS) 156 goto out; 157 158 /* normalize: avoid signed division (rounding problems) */ 159 error = -ESRCH; 160 if (niceval < -20) 161 niceval = -20; 162 if (niceval > 19) 163 niceval = 19; 164 165 read_lock(&tasklist_lock); 166 switch (which) { 167 case PRIO_PROCESS: 168 if (who) 169 p = find_task_by_vpid(who); 170 else 171 p = current; 172 if (p) 173 error = set_one_prio(p, niceval, error); 174 break; 175 case PRIO_PGRP: 176 if (who) 177 pgrp = find_vpid(who); 178 else 179 pgrp = task_pgrp(current); 180 do_each_pid_thread(pgrp, PIDTYPE_PGID, p) { 181 error = set_one_prio(p, niceval, error); 182 } while_each_pid_thread(pgrp, PIDTYPE_PGID, p); 183 break; 184 case PRIO_USER: 185 user = (struct user_struct *) cred->user; 186 if (!who) 187 who = cred->uid; 188 else if ((who != cred->uid) && 189 !(user = find_user(who))) 190 goto out_unlock; /* No processes for this user */ 191 192 do_each_thread(g, p) 193 if (__task_cred(p)->uid == who) 194 error = set_one_prio(p, niceval, error); 195 while_each_thread(g, p); 196 if (who != cred->uid) 197 free_uid(user); /* For find_user() */ 198 break; 199 } 200 out_unlock: 201 read_unlock(&tasklist_lock); 202 out: 203 return error; 204 } 205 206 /* 207 * Ugh. To avoid negative return values, "getpriority()" will 208 * not return the normal nice-value, but a negated value that 209 * has been offset by 20 (ie it returns 40..1 instead of -20..19) 210 * to stay compatible. 211 */ 212 SYSCALL_DEFINE2(getpriority, int, which, int, who) 213 { 214 struct task_struct *g, *p; 215 struct user_struct *user; 216 const struct cred *cred = current_cred(); 217 long niceval, retval = -ESRCH; 218 struct pid *pgrp; 219 220 if (which > PRIO_USER || which < PRIO_PROCESS) 221 return -EINVAL; 222 223 read_lock(&tasklist_lock); 224 switch (which) { 225 case PRIO_PROCESS: 226 if (who) 227 p = find_task_by_vpid(who); 228 else 229 p = current; 230 if (p) { 231 niceval = 20 - task_nice(p); 232 if (niceval > retval) 233 retval = niceval; 234 } 235 break; 236 case PRIO_PGRP: 237 if (who) 238 pgrp = find_vpid(who); 239 else 240 pgrp = task_pgrp(current); 241 do_each_pid_thread(pgrp, PIDTYPE_PGID, p) { 242 niceval = 20 - task_nice(p); 243 if (niceval > retval) 244 retval = niceval; 245 } while_each_pid_thread(pgrp, PIDTYPE_PGID, p); 246 break; 247 case PRIO_USER: 248 user = (struct user_struct *) cred->user; 249 if (!who) 250 who = cred->uid; 251 else if ((who != cred->uid) && 252 !(user = find_user(who))) 253 goto out_unlock; /* No processes for this user */ 254 255 do_each_thread(g, p) 256 if (__task_cred(p)->uid == who) { 257 niceval = 20 - task_nice(p); 258 if (niceval > retval) 259 retval = niceval; 260 } 261 while_each_thread(g, p); 262 if (who != cred->uid) 263 free_uid(user); /* for find_user() */ 264 break; 265 } 266 out_unlock: 267 read_unlock(&tasklist_lock); 268 269 return retval; 270 } 271 272 /** 273 * emergency_restart - reboot the system 274 * 275 * Without shutting down any hardware or taking any locks 276 * reboot the system. This is called when we know we are in 277 * trouble so this is our best effort to reboot. This is 278 * safe to call in interrupt context. 279 */ 280 void emergency_restart(void) 281 { 282 machine_emergency_restart(); 283 } 284 EXPORT_SYMBOL_GPL(emergency_restart); 285 286 void kernel_restart_prepare(char *cmd) 287 { 288 blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd); 289 system_state = SYSTEM_RESTART; 290 device_shutdown(); 291 sysdev_shutdown(); 292 } 293 294 /** 295 * kernel_restart - reboot the system 296 * @cmd: pointer to buffer containing command to execute for restart 297 * or %NULL 298 * 299 * Shutdown everything and perform a clean reboot. 300 * This is not safe to call in interrupt context. 301 */ 302 void kernel_restart(char *cmd) 303 { 304 kernel_restart_prepare(cmd); 305 if (!cmd) 306 printk(KERN_EMERG "Restarting system.\n"); 307 else 308 printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd); 309 machine_restart(cmd); 310 } 311 EXPORT_SYMBOL_GPL(kernel_restart); 312 313 static void kernel_shutdown_prepare(enum system_states state) 314 { 315 blocking_notifier_call_chain(&reboot_notifier_list, 316 (state == SYSTEM_HALT)?SYS_HALT:SYS_POWER_OFF, NULL); 317 system_state = state; 318 device_shutdown(); 319 } 320 /** 321 * kernel_halt - halt the system 322 * 323 * Shutdown everything and perform a clean system halt. 324 */ 325 void kernel_halt(void) 326 { 327 kernel_shutdown_prepare(SYSTEM_HALT); 328 sysdev_shutdown(); 329 printk(KERN_EMERG "System halted.\n"); 330 machine_halt(); 331 } 332 333 EXPORT_SYMBOL_GPL(kernel_halt); 334 335 /** 336 * kernel_power_off - power_off the system 337 * 338 * Shutdown everything and perform a clean system power_off. 339 */ 340 void kernel_power_off(void) 341 { 342 kernel_shutdown_prepare(SYSTEM_POWER_OFF); 343 if (pm_power_off_prepare) 344 pm_power_off_prepare(); 345 disable_nonboot_cpus(); 346 sysdev_shutdown(); 347 printk(KERN_EMERG "Power down.\n"); 348 machine_power_off(); 349 } 350 EXPORT_SYMBOL_GPL(kernel_power_off); 351 352 static DEFINE_MUTEX(reboot_mutex); 353 354 /* 355 * Reboot system call: for obvious reasons only root may call it, 356 * and even root needs to set up some magic numbers in the registers 357 * so that some mistake won't make this reboot the whole machine. 358 * You can also set the meaning of the ctrl-alt-del-key here. 359 * 360 * reboot doesn't sync: do that yourself before calling this. 361 */ 362 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, 363 void __user *, arg) 364 { 365 char buffer[256]; 366 int ret = 0; 367 368 /* We only trust the superuser with rebooting the system. */ 369 if (!capable(CAP_SYS_BOOT)) 370 return -EPERM; 371 372 /* For safety, we require "magic" arguments. */ 373 if (magic1 != LINUX_REBOOT_MAGIC1 || 374 (magic2 != LINUX_REBOOT_MAGIC2 && 375 magic2 != LINUX_REBOOT_MAGIC2A && 376 magic2 != LINUX_REBOOT_MAGIC2B && 377 magic2 != LINUX_REBOOT_MAGIC2C)) 378 return -EINVAL; 379 380 /* Instead of trying to make the power_off code look like 381 * halt when pm_power_off is not set do it the easy way. 382 */ 383 if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off) 384 cmd = LINUX_REBOOT_CMD_HALT; 385 386 mutex_lock(&reboot_mutex); 387 switch (cmd) { 388 case LINUX_REBOOT_CMD_RESTART: 389 kernel_restart(NULL); 390 break; 391 392 case LINUX_REBOOT_CMD_CAD_ON: 393 C_A_D = 1; 394 break; 395 396 case LINUX_REBOOT_CMD_CAD_OFF: 397 C_A_D = 0; 398 break; 399 400 case LINUX_REBOOT_CMD_HALT: 401 kernel_halt(); 402 do_exit(0); 403 panic("cannot halt"); 404 405 case LINUX_REBOOT_CMD_POWER_OFF: 406 kernel_power_off(); 407 do_exit(0); 408 break; 409 410 case LINUX_REBOOT_CMD_RESTART2: 411 if (strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1) < 0) { 412 ret = -EFAULT; 413 break; 414 } 415 buffer[sizeof(buffer) - 1] = '\0'; 416 417 kernel_restart(buffer); 418 break; 419 420 #ifdef CONFIG_KEXEC 421 case LINUX_REBOOT_CMD_KEXEC: 422 ret = kernel_kexec(); 423 break; 424 #endif 425 426 #ifdef CONFIG_HIBERNATION 427 case LINUX_REBOOT_CMD_SW_SUSPEND: 428 ret = hibernate(); 429 break; 430 #endif 431 432 default: 433 ret = -EINVAL; 434 break; 435 } 436 mutex_unlock(&reboot_mutex); 437 return ret; 438 } 439 440 static void deferred_cad(struct work_struct *dummy) 441 { 442 kernel_restart(NULL); 443 } 444 445 /* 446 * This function gets called by ctrl-alt-del - ie the keyboard interrupt. 447 * As it's called within an interrupt, it may NOT sync: the only choice 448 * is whether to reboot at once, or just ignore the ctrl-alt-del. 449 */ 450 void ctrl_alt_del(void) 451 { 452 static DECLARE_WORK(cad_work, deferred_cad); 453 454 if (C_A_D) 455 schedule_work(&cad_work); 456 else 457 kill_cad_pid(SIGINT, 1); 458 } 459 460 /* 461 * Unprivileged users may change the real gid to the effective gid 462 * or vice versa. (BSD-style) 463 * 464 * If you set the real gid at all, or set the effective gid to a value not 465 * equal to the real gid, then the saved gid is set to the new effective gid. 466 * 467 * This makes it possible for a setgid program to completely drop its 468 * privileges, which is often a useful assertion to make when you are doing 469 * a security audit over a program. 470 * 471 * The general idea is that a program which uses just setregid() will be 472 * 100% compatible with BSD. A program which uses just setgid() will be 473 * 100% compatible with POSIX with saved IDs. 474 * 475 * SMP: There are not races, the GIDs are checked only by filesystem 476 * operations (as far as semantic preservation is concerned). 477 */ 478 SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid) 479 { 480 const struct cred *old; 481 struct cred *new; 482 int retval; 483 484 new = prepare_creds(); 485 if (!new) 486 return -ENOMEM; 487 old = current_cred(); 488 489 retval = security_task_setgid(rgid, egid, (gid_t)-1, LSM_SETID_RE); 490 if (retval) 491 goto error; 492 493 retval = -EPERM; 494 if (rgid != (gid_t) -1) { 495 if (old->gid == rgid || 496 old->egid == rgid || 497 capable(CAP_SETGID)) 498 new->gid = rgid; 499 else 500 goto error; 501 } 502 if (egid != (gid_t) -1) { 503 if (old->gid == egid || 504 old->egid == egid || 505 old->sgid == egid || 506 capable(CAP_SETGID)) 507 new->egid = egid; 508 else 509 goto error; 510 } 511 512 if (rgid != (gid_t) -1 || 513 (egid != (gid_t) -1 && egid != old->gid)) 514 new->sgid = new->egid; 515 new->fsgid = new->egid; 516 517 return commit_creds(new); 518 519 error: 520 abort_creds(new); 521 return retval; 522 } 523 524 /* 525 * setgid() is implemented like SysV w/ SAVED_IDS 526 * 527 * SMP: Same implicit races as above. 528 */ 529 SYSCALL_DEFINE1(setgid, gid_t, gid) 530 { 531 const struct cred *old; 532 struct cred *new; 533 int retval; 534 535 new = prepare_creds(); 536 if (!new) 537 return -ENOMEM; 538 old = current_cred(); 539 540 retval = security_task_setgid(gid, (gid_t)-1, (gid_t)-1, LSM_SETID_ID); 541 if (retval) 542 goto error; 543 544 retval = -EPERM; 545 if (capable(CAP_SETGID)) 546 new->gid = new->egid = new->sgid = new->fsgid = gid; 547 else if (gid == old->gid || gid == old->sgid) 548 new->egid = new->fsgid = gid; 549 else 550 goto error; 551 552 return commit_creds(new); 553 554 error: 555 abort_creds(new); 556 return retval; 557 } 558 559 /* 560 * change the user struct in a credentials set to match the new UID 561 */ 562 static int set_user(struct cred *new) 563 { 564 struct user_struct *new_user; 565 566 new_user = alloc_uid(current_user_ns(), new->uid); 567 if (!new_user) 568 return -EAGAIN; 569 570 if (!task_can_switch_user(new_user, current)) { 571 free_uid(new_user); 572 return -EINVAL; 573 } 574 575 if (atomic_read(&new_user->processes) >= 576 current->signal->rlim[RLIMIT_NPROC].rlim_cur && 577 new_user != INIT_USER) { 578 free_uid(new_user); 579 return -EAGAIN; 580 } 581 582 free_uid(new->user); 583 new->user = new_user; 584 return 0; 585 } 586 587 /* 588 * Unprivileged users may change the real uid to the effective uid 589 * or vice versa. (BSD-style) 590 * 591 * If you set the real uid at all, or set the effective uid to a value not 592 * equal to the real uid, then the saved uid is set to the new effective uid. 593 * 594 * This makes it possible for a setuid program to completely drop its 595 * privileges, which is often a useful assertion to make when you are doing 596 * a security audit over a program. 597 * 598 * The general idea is that a program which uses just setreuid() will be 599 * 100% compatible with BSD. A program which uses just setuid() will be 600 * 100% compatible with POSIX with saved IDs. 601 */ 602 SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid) 603 { 604 const struct cred *old; 605 struct cred *new; 606 int retval; 607 608 new = prepare_creds(); 609 if (!new) 610 return -ENOMEM; 611 old = current_cred(); 612 613 retval = security_task_setuid(ruid, euid, (uid_t)-1, LSM_SETID_RE); 614 if (retval) 615 goto error; 616 617 retval = -EPERM; 618 if (ruid != (uid_t) -1) { 619 new->uid = ruid; 620 if (old->uid != ruid && 621 old->euid != ruid && 622 !capable(CAP_SETUID)) 623 goto error; 624 } 625 626 if (euid != (uid_t) -1) { 627 new->euid = euid; 628 if (old->uid != euid && 629 old->euid != euid && 630 old->suid != euid && 631 !capable(CAP_SETUID)) 632 goto error; 633 } 634 635 if (new->uid != old->uid) { 636 retval = set_user(new); 637 if (retval < 0) 638 goto error; 639 } 640 if (ruid != (uid_t) -1 || 641 (euid != (uid_t) -1 && euid != old->uid)) 642 new->suid = new->euid; 643 new->fsuid = new->euid; 644 645 retval = security_task_fix_setuid(new, old, LSM_SETID_RE); 646 if (retval < 0) 647 goto error; 648 649 return commit_creds(new); 650 651 error: 652 abort_creds(new); 653 return retval; 654 } 655 656 /* 657 * setuid() is implemented like SysV with SAVED_IDS 658 * 659 * Note that SAVED_ID's is deficient in that a setuid root program 660 * like sendmail, for example, cannot set its uid to be a normal 661 * user and then switch back, because if you're root, setuid() sets 662 * the saved uid too. If you don't like this, blame the bright people 663 * in the POSIX committee and/or USG. Note that the BSD-style setreuid() 664 * will allow a root program to temporarily drop privileges and be able to 665 * regain them by swapping the real and effective uid. 666 */ 667 SYSCALL_DEFINE1(setuid, uid_t, uid) 668 { 669 const struct cred *old; 670 struct cred *new; 671 int retval; 672 673 new = prepare_creds(); 674 if (!new) 675 return -ENOMEM; 676 old = current_cred(); 677 678 retval = security_task_setuid(uid, (uid_t)-1, (uid_t)-1, LSM_SETID_ID); 679 if (retval) 680 goto error; 681 682 retval = -EPERM; 683 if (capable(CAP_SETUID)) { 684 new->suid = new->uid = uid; 685 if (uid != old->uid) { 686 retval = set_user(new); 687 if (retval < 0) 688 goto error; 689 } 690 } else if (uid != old->uid && uid != new->suid) { 691 goto error; 692 } 693 694 new->fsuid = new->euid = uid; 695 696 retval = security_task_fix_setuid(new, old, LSM_SETID_ID); 697 if (retval < 0) 698 goto error; 699 700 return commit_creds(new); 701 702 error: 703 abort_creds(new); 704 return retval; 705 } 706 707 708 /* 709 * This function implements a generic ability to update ruid, euid, 710 * and suid. This allows you to implement the 4.4 compatible seteuid(). 711 */ 712 SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid) 713 { 714 const struct cred *old; 715 struct cred *new; 716 int retval; 717 718 new = prepare_creds(); 719 if (!new) 720 return -ENOMEM; 721 722 retval = security_task_setuid(ruid, euid, suid, LSM_SETID_RES); 723 if (retval) 724 goto error; 725 old = current_cred(); 726 727 retval = -EPERM; 728 if (!capable(CAP_SETUID)) { 729 if (ruid != (uid_t) -1 && ruid != old->uid && 730 ruid != old->euid && ruid != old->suid) 731 goto error; 732 if (euid != (uid_t) -1 && euid != old->uid && 733 euid != old->euid && euid != old->suid) 734 goto error; 735 if (suid != (uid_t) -1 && suid != old->uid && 736 suid != old->euid && suid != old->suid) 737 goto error; 738 } 739 740 if (ruid != (uid_t) -1) { 741 new->uid = ruid; 742 if (ruid != old->uid) { 743 retval = set_user(new); 744 if (retval < 0) 745 goto error; 746 } 747 } 748 if (euid != (uid_t) -1) 749 new->euid = euid; 750 if (suid != (uid_t) -1) 751 new->suid = suid; 752 new->fsuid = new->euid; 753 754 retval = security_task_fix_setuid(new, old, LSM_SETID_RES); 755 if (retval < 0) 756 goto error; 757 758 return commit_creds(new); 759 760 error: 761 abort_creds(new); 762 return retval; 763 } 764 765 SYSCALL_DEFINE3(getresuid, uid_t __user *, ruid, uid_t __user *, euid, uid_t __user *, suid) 766 { 767 const struct cred *cred = current_cred(); 768 int retval; 769 770 if (!(retval = put_user(cred->uid, ruid)) && 771 !(retval = put_user(cred->euid, euid))) 772 retval = put_user(cred->suid, suid); 773 774 return retval; 775 } 776 777 /* 778 * Same as above, but for rgid, egid, sgid. 779 */ 780 SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid) 781 { 782 const struct cred *old; 783 struct cred *new; 784 int retval; 785 786 new = prepare_creds(); 787 if (!new) 788 return -ENOMEM; 789 old = current_cred(); 790 791 retval = security_task_setgid(rgid, egid, sgid, LSM_SETID_RES); 792 if (retval) 793 goto error; 794 795 retval = -EPERM; 796 if (!capable(CAP_SETGID)) { 797 if (rgid != (gid_t) -1 && rgid != old->gid && 798 rgid != old->egid && rgid != old->sgid) 799 goto error; 800 if (egid != (gid_t) -1 && egid != old->gid && 801 egid != old->egid && egid != old->sgid) 802 goto error; 803 if (sgid != (gid_t) -1 && sgid != old->gid && 804 sgid != old->egid && sgid != old->sgid) 805 goto error; 806 } 807 808 if (rgid != (gid_t) -1) 809 new->gid = rgid; 810 if (egid != (gid_t) -1) 811 new->egid = egid; 812 if (sgid != (gid_t) -1) 813 new->sgid = sgid; 814 new->fsgid = new->egid; 815 816 return commit_creds(new); 817 818 error: 819 abort_creds(new); 820 return retval; 821 } 822 823 SYSCALL_DEFINE3(getresgid, gid_t __user *, rgid, gid_t __user *, egid, gid_t __user *, sgid) 824 { 825 const struct cred *cred = current_cred(); 826 int retval; 827 828 if (!(retval = put_user(cred->gid, rgid)) && 829 !(retval = put_user(cred->egid, egid))) 830 retval = put_user(cred->sgid, sgid); 831 832 return retval; 833 } 834 835 836 /* 837 * "setfsuid()" sets the fsuid - the uid used for filesystem checks. This 838 * is used for "access()" and for the NFS daemon (letting nfsd stay at 839 * whatever uid it wants to). It normally shadows "euid", except when 840 * explicitly set by setfsuid() or for access.. 841 */ 842 SYSCALL_DEFINE1(setfsuid, uid_t, uid) 843 { 844 const struct cred *old; 845 struct cred *new; 846 uid_t old_fsuid; 847 848 new = prepare_creds(); 849 if (!new) 850 return current_fsuid(); 851 old = current_cred(); 852 old_fsuid = old->fsuid; 853 854 if (security_task_setuid(uid, (uid_t)-1, (uid_t)-1, LSM_SETID_FS) < 0) 855 goto error; 856 857 if (uid == old->uid || uid == old->euid || 858 uid == old->suid || uid == old->fsuid || 859 capable(CAP_SETUID)) { 860 if (uid != old_fsuid) { 861 new->fsuid = uid; 862 if (security_task_fix_setuid(new, old, LSM_SETID_FS) == 0) 863 goto change_okay; 864 } 865 } 866 867 error: 868 abort_creds(new); 869 return old_fsuid; 870 871 change_okay: 872 commit_creds(new); 873 return old_fsuid; 874 } 875 876 /* 877 * Samma på svenska.. 878 */ 879 SYSCALL_DEFINE1(setfsgid, gid_t, gid) 880 { 881 const struct cred *old; 882 struct cred *new; 883 gid_t old_fsgid; 884 885 new = prepare_creds(); 886 if (!new) 887 return current_fsgid(); 888 old = current_cred(); 889 old_fsgid = old->fsgid; 890 891 if (security_task_setgid(gid, (gid_t)-1, (gid_t)-1, LSM_SETID_FS)) 892 goto error; 893 894 if (gid == old->gid || gid == old->egid || 895 gid == old->sgid || gid == old->fsgid || 896 capable(CAP_SETGID)) { 897 if (gid != old_fsgid) { 898 new->fsgid = gid; 899 goto change_okay; 900 } 901 } 902 903 error: 904 abort_creds(new); 905 return old_fsgid; 906 907 change_okay: 908 commit_creds(new); 909 return old_fsgid; 910 } 911 912 void do_sys_times(struct tms *tms) 913 { 914 cputime_t tgutime, tgstime, cutime, cstime; 915 916 spin_lock_irq(¤t->sighand->siglock); 917 thread_group_times(current, &tgutime, &tgstime); 918 cutime = current->signal->cutime; 919 cstime = current->signal->cstime; 920 spin_unlock_irq(¤t->sighand->siglock); 921 tms->tms_utime = cputime_to_clock_t(tgutime); 922 tms->tms_stime = cputime_to_clock_t(tgstime); 923 tms->tms_cutime = cputime_to_clock_t(cutime); 924 tms->tms_cstime = cputime_to_clock_t(cstime); 925 } 926 927 SYSCALL_DEFINE1(times, struct tms __user *, tbuf) 928 { 929 if (tbuf) { 930 struct tms tmp; 931 932 do_sys_times(&tmp); 933 if (copy_to_user(tbuf, &tmp, sizeof(struct tms))) 934 return -EFAULT; 935 } 936 force_successful_syscall_return(); 937 return (long) jiffies_64_to_clock_t(get_jiffies_64()); 938 } 939 940 /* 941 * This needs some heavy checking ... 942 * I just haven't the stomach for it. I also don't fully 943 * understand sessions/pgrp etc. Let somebody who does explain it. 944 * 945 * OK, I think I have the protection semantics right.... this is really 946 * only important on a multi-user system anyway, to make sure one user 947 * can't send a signal to a process owned by another. -TYT, 12/12/91 948 * 949 * Auch. Had to add the 'did_exec' flag to conform completely to POSIX. 950 * LBT 04.03.94 951 */ 952 SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) 953 { 954 struct task_struct *p; 955 struct task_struct *group_leader = current->group_leader; 956 struct pid *pgrp; 957 int err; 958 959 if (!pid) 960 pid = task_pid_vnr(group_leader); 961 if (!pgid) 962 pgid = pid; 963 if (pgid < 0) 964 return -EINVAL; 965 966 /* From this point forward we keep holding onto the tasklist lock 967 * so that our parent does not change from under us. -DaveM 968 */ 969 write_lock_irq(&tasklist_lock); 970 971 err = -ESRCH; 972 p = find_task_by_vpid(pid); 973 if (!p) 974 goto out; 975 976 err = -EINVAL; 977 if (!thread_group_leader(p)) 978 goto out; 979 980 if (same_thread_group(p->real_parent, group_leader)) { 981 err = -EPERM; 982 if (task_session(p) != task_session(group_leader)) 983 goto out; 984 err = -EACCES; 985 if (p->did_exec) 986 goto out; 987 } else { 988 err = -ESRCH; 989 if (p != group_leader) 990 goto out; 991 } 992 993 err = -EPERM; 994 if (p->signal->leader) 995 goto out; 996 997 pgrp = task_pid(p); 998 if (pgid != pid) { 999 struct task_struct *g; 1000 1001 pgrp = find_vpid(pgid); 1002 g = pid_task(pgrp, PIDTYPE_PGID); 1003 if (!g || task_session(g) != task_session(group_leader)) 1004 goto out; 1005 } 1006 1007 err = security_task_setpgid(p, pgid); 1008 if (err) 1009 goto out; 1010 1011 if (task_pgrp(p) != pgrp) 1012 change_pid(p, PIDTYPE_PGID, pgrp); 1013 1014 err = 0; 1015 out: 1016 /* All paths lead to here, thus we are safe. -DaveM */ 1017 write_unlock_irq(&tasklist_lock); 1018 return err; 1019 } 1020 1021 SYSCALL_DEFINE1(getpgid, pid_t, pid) 1022 { 1023 struct task_struct *p; 1024 struct pid *grp; 1025 int retval; 1026 1027 rcu_read_lock(); 1028 if (!pid) 1029 grp = task_pgrp(current); 1030 else { 1031 retval = -ESRCH; 1032 p = find_task_by_vpid(pid); 1033 if (!p) 1034 goto out; 1035 grp = task_pgrp(p); 1036 if (!grp) 1037 goto out; 1038 1039 retval = security_task_getpgid(p); 1040 if (retval) 1041 goto out; 1042 } 1043 retval = pid_vnr(grp); 1044 out: 1045 rcu_read_unlock(); 1046 return retval; 1047 } 1048 1049 #ifdef __ARCH_WANT_SYS_GETPGRP 1050 1051 SYSCALL_DEFINE0(getpgrp) 1052 { 1053 return sys_getpgid(0); 1054 } 1055 1056 #endif 1057 1058 SYSCALL_DEFINE1(getsid, pid_t, pid) 1059 { 1060 struct task_struct *p; 1061 struct pid *sid; 1062 int retval; 1063 1064 rcu_read_lock(); 1065 if (!pid) 1066 sid = task_session(current); 1067 else { 1068 retval = -ESRCH; 1069 p = find_task_by_vpid(pid); 1070 if (!p) 1071 goto out; 1072 sid = task_session(p); 1073 if (!sid) 1074 goto out; 1075 1076 retval = security_task_getsid(p); 1077 if (retval) 1078 goto out; 1079 } 1080 retval = pid_vnr(sid); 1081 out: 1082 rcu_read_unlock(); 1083 return retval; 1084 } 1085 1086 SYSCALL_DEFINE0(setsid) 1087 { 1088 struct task_struct *group_leader = current->group_leader; 1089 struct pid *sid = task_pid(group_leader); 1090 pid_t session = pid_vnr(sid); 1091 int err = -EPERM; 1092 1093 write_lock_irq(&tasklist_lock); 1094 /* Fail if I am already a session leader */ 1095 if (group_leader->signal->leader) 1096 goto out; 1097 1098 /* Fail if a process group id already exists that equals the 1099 * proposed session id. 1100 */ 1101 if (pid_task(sid, PIDTYPE_PGID)) 1102 goto out; 1103 1104 group_leader->signal->leader = 1; 1105 __set_special_pids(sid); 1106 1107 proc_clear_tty(group_leader); 1108 1109 err = session; 1110 out: 1111 write_unlock_irq(&tasklist_lock); 1112 if (err > 0) 1113 proc_sid_connector(group_leader); 1114 return err; 1115 } 1116 1117 DECLARE_RWSEM(uts_sem); 1118 1119 SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name) 1120 { 1121 int errno = 0; 1122 1123 down_read(&uts_sem); 1124 if (copy_to_user(name, utsname(), sizeof *name)) 1125 errno = -EFAULT; 1126 up_read(&uts_sem); 1127 return errno; 1128 } 1129 1130 SYSCALL_DEFINE2(sethostname, char __user *, name, int, len) 1131 { 1132 int errno; 1133 char tmp[__NEW_UTS_LEN]; 1134 1135 if (!capable(CAP_SYS_ADMIN)) 1136 return -EPERM; 1137 if (len < 0 || len > __NEW_UTS_LEN) 1138 return -EINVAL; 1139 down_write(&uts_sem); 1140 errno = -EFAULT; 1141 if (!copy_from_user(tmp, name, len)) { 1142 struct new_utsname *u = utsname(); 1143 1144 memcpy(u->nodename, tmp, len); 1145 memset(u->nodename + len, 0, sizeof(u->nodename) - len); 1146 errno = 0; 1147 } 1148 up_write(&uts_sem); 1149 return errno; 1150 } 1151 1152 #ifdef __ARCH_WANT_SYS_GETHOSTNAME 1153 1154 SYSCALL_DEFINE2(gethostname, char __user *, name, int, len) 1155 { 1156 int i, errno; 1157 struct new_utsname *u; 1158 1159 if (len < 0) 1160 return -EINVAL; 1161 down_read(&uts_sem); 1162 u = utsname(); 1163 i = 1 + strlen(u->nodename); 1164 if (i > len) 1165 i = len; 1166 errno = 0; 1167 if (copy_to_user(name, u->nodename, i)) 1168 errno = -EFAULT; 1169 up_read(&uts_sem); 1170 return errno; 1171 } 1172 1173 #endif 1174 1175 /* 1176 * Only setdomainname; getdomainname can be implemented by calling 1177 * uname() 1178 */ 1179 SYSCALL_DEFINE2(setdomainname, char __user *, name, int, len) 1180 { 1181 int errno; 1182 char tmp[__NEW_UTS_LEN]; 1183 1184 if (!capable(CAP_SYS_ADMIN)) 1185 return -EPERM; 1186 if (len < 0 || len > __NEW_UTS_LEN) 1187 return -EINVAL; 1188 1189 down_write(&uts_sem); 1190 errno = -EFAULT; 1191 if (!copy_from_user(tmp, name, len)) { 1192 struct new_utsname *u = utsname(); 1193 1194 memcpy(u->domainname, tmp, len); 1195 memset(u->domainname + len, 0, sizeof(u->domainname) - len); 1196 errno = 0; 1197 } 1198 up_write(&uts_sem); 1199 return errno; 1200 } 1201 1202 SYSCALL_DEFINE2(getrlimit, unsigned int, resource, struct rlimit __user *, rlim) 1203 { 1204 if (resource >= RLIM_NLIMITS) 1205 return -EINVAL; 1206 else { 1207 struct rlimit value; 1208 task_lock(current->group_leader); 1209 value = current->signal->rlim[resource]; 1210 task_unlock(current->group_leader); 1211 return copy_to_user(rlim, &value, sizeof(*rlim)) ? -EFAULT : 0; 1212 } 1213 } 1214 1215 #ifdef __ARCH_WANT_SYS_OLD_GETRLIMIT 1216 1217 /* 1218 * Back compatibility for getrlimit. Needed for some apps. 1219 */ 1220 1221 SYSCALL_DEFINE2(old_getrlimit, unsigned int, resource, 1222 struct rlimit __user *, rlim) 1223 { 1224 struct rlimit x; 1225 if (resource >= RLIM_NLIMITS) 1226 return -EINVAL; 1227 1228 task_lock(current->group_leader); 1229 x = current->signal->rlim[resource]; 1230 task_unlock(current->group_leader); 1231 if (x.rlim_cur > 0x7FFFFFFF) 1232 x.rlim_cur = 0x7FFFFFFF; 1233 if (x.rlim_max > 0x7FFFFFFF) 1234 x.rlim_max = 0x7FFFFFFF; 1235 return copy_to_user(rlim, &x, sizeof(x))?-EFAULT:0; 1236 } 1237 1238 #endif 1239 1240 SYSCALL_DEFINE2(setrlimit, unsigned int, resource, struct rlimit __user *, rlim) 1241 { 1242 struct rlimit new_rlim, *old_rlim; 1243 int retval; 1244 1245 if (resource >= RLIM_NLIMITS) 1246 return -EINVAL; 1247 if (copy_from_user(&new_rlim, rlim, sizeof(*rlim))) 1248 return -EFAULT; 1249 if (new_rlim.rlim_cur > new_rlim.rlim_max) 1250 return -EINVAL; 1251 old_rlim = current->signal->rlim + resource; 1252 if ((new_rlim.rlim_max > old_rlim->rlim_max) && 1253 !capable(CAP_SYS_RESOURCE)) 1254 return -EPERM; 1255 if (resource == RLIMIT_NOFILE && new_rlim.rlim_max > sysctl_nr_open) 1256 return -EPERM; 1257 1258 retval = security_task_setrlimit(resource, &new_rlim); 1259 if (retval) 1260 return retval; 1261 1262 if (resource == RLIMIT_CPU && new_rlim.rlim_cur == 0) { 1263 /* 1264 * The caller is asking for an immediate RLIMIT_CPU 1265 * expiry. But we use the zero value to mean "it was 1266 * never set". So let's cheat and make it one second 1267 * instead 1268 */ 1269 new_rlim.rlim_cur = 1; 1270 } 1271 1272 task_lock(current->group_leader); 1273 *old_rlim = new_rlim; 1274 task_unlock(current->group_leader); 1275 1276 if (resource != RLIMIT_CPU) 1277 goto out; 1278 1279 /* 1280 * RLIMIT_CPU handling. Note that the kernel fails to return an error 1281 * code if it rejected the user's attempt to set RLIMIT_CPU. This is a 1282 * very long-standing error, and fixing it now risks breakage of 1283 * applications, so we live with it 1284 */ 1285 if (new_rlim.rlim_cur == RLIM_INFINITY) 1286 goto out; 1287 1288 update_rlimit_cpu(new_rlim.rlim_cur); 1289 out: 1290 return 0; 1291 } 1292 1293 /* 1294 * It would make sense to put struct rusage in the task_struct, 1295 * except that would make the task_struct be *really big*. After 1296 * task_struct gets moved into malloc'ed memory, it would 1297 * make sense to do this. It will make moving the rest of the information 1298 * a lot simpler! (Which we're not doing right now because we're not 1299 * measuring them yet). 1300 * 1301 * When sampling multiple threads for RUSAGE_SELF, under SMP we might have 1302 * races with threads incrementing their own counters. But since word 1303 * reads are atomic, we either get new values or old values and we don't 1304 * care which for the sums. We always take the siglock to protect reading 1305 * the c* fields from p->signal from races with exit.c updating those 1306 * fields when reaping, so a sample either gets all the additions of a 1307 * given child after it's reaped, or none so this sample is before reaping. 1308 * 1309 * Locking: 1310 * We need to take the siglock for CHILDEREN, SELF and BOTH 1311 * for the cases current multithreaded, non-current single threaded 1312 * non-current multithreaded. Thread traversal is now safe with 1313 * the siglock held. 1314 * Strictly speaking, we donot need to take the siglock if we are current and 1315 * single threaded, as no one else can take our signal_struct away, no one 1316 * else can reap the children to update signal->c* counters, and no one else 1317 * can race with the signal-> fields. If we do not take any lock, the 1318 * signal-> fields could be read out of order while another thread was just 1319 * exiting. So we should place a read memory barrier when we avoid the lock. 1320 * On the writer side, write memory barrier is implied in __exit_signal 1321 * as __exit_signal releases the siglock spinlock after updating the signal-> 1322 * fields. But we don't do this yet to keep things simple. 1323 * 1324 */ 1325 1326 static void accumulate_thread_rusage(struct task_struct *t, struct rusage *r) 1327 { 1328 r->ru_nvcsw += t->nvcsw; 1329 r->ru_nivcsw += t->nivcsw; 1330 r->ru_minflt += t->min_flt; 1331 r->ru_majflt += t->maj_flt; 1332 r->ru_inblock += task_io_get_inblock(t); 1333 r->ru_oublock += task_io_get_oublock(t); 1334 } 1335 1336 static void k_getrusage(struct task_struct *p, int who, struct rusage *r) 1337 { 1338 struct task_struct *t; 1339 unsigned long flags; 1340 cputime_t tgutime, tgstime, utime, stime; 1341 unsigned long maxrss = 0; 1342 1343 memset((char *) r, 0, sizeof *r); 1344 utime = stime = cputime_zero; 1345 1346 if (who == RUSAGE_THREAD) { 1347 task_times(current, &utime, &stime); 1348 accumulate_thread_rusage(p, r); 1349 maxrss = p->signal->maxrss; 1350 goto out; 1351 } 1352 1353 if (!lock_task_sighand(p, &flags)) 1354 return; 1355 1356 switch (who) { 1357 case RUSAGE_BOTH: 1358 case RUSAGE_CHILDREN: 1359 utime = p->signal->cutime; 1360 stime = p->signal->cstime; 1361 r->ru_nvcsw = p->signal->cnvcsw; 1362 r->ru_nivcsw = p->signal->cnivcsw; 1363 r->ru_minflt = p->signal->cmin_flt; 1364 r->ru_majflt = p->signal->cmaj_flt; 1365 r->ru_inblock = p->signal->cinblock; 1366 r->ru_oublock = p->signal->coublock; 1367 maxrss = p->signal->cmaxrss; 1368 1369 if (who == RUSAGE_CHILDREN) 1370 break; 1371 1372 case RUSAGE_SELF: 1373 thread_group_times(p, &tgutime, &tgstime); 1374 utime = cputime_add(utime, tgutime); 1375 stime = cputime_add(stime, tgstime); 1376 r->ru_nvcsw += p->signal->nvcsw; 1377 r->ru_nivcsw += p->signal->nivcsw; 1378 r->ru_minflt += p->signal->min_flt; 1379 r->ru_majflt += p->signal->maj_flt; 1380 r->ru_inblock += p->signal->inblock; 1381 r->ru_oublock += p->signal->oublock; 1382 if (maxrss < p->signal->maxrss) 1383 maxrss = p->signal->maxrss; 1384 t = p; 1385 do { 1386 accumulate_thread_rusage(t, r); 1387 t = next_thread(t); 1388 } while (t != p); 1389 break; 1390 1391 default: 1392 BUG(); 1393 } 1394 unlock_task_sighand(p, &flags); 1395 1396 out: 1397 cputime_to_timeval(utime, &r->ru_utime); 1398 cputime_to_timeval(stime, &r->ru_stime); 1399 1400 if (who != RUSAGE_CHILDREN) { 1401 struct mm_struct *mm = get_task_mm(p); 1402 if (mm) { 1403 setmax_mm_hiwater_rss(&maxrss, mm); 1404 mmput(mm); 1405 } 1406 } 1407 r->ru_maxrss = maxrss * (PAGE_SIZE / 1024); /* convert pages to KBs */ 1408 } 1409 1410 int getrusage(struct task_struct *p, int who, struct rusage __user *ru) 1411 { 1412 struct rusage r; 1413 k_getrusage(p, who, &r); 1414 return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0; 1415 } 1416 1417 SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru) 1418 { 1419 if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN && 1420 who != RUSAGE_THREAD) 1421 return -EINVAL; 1422 return getrusage(current, who, ru); 1423 } 1424 1425 SYSCALL_DEFINE1(umask, int, mask) 1426 { 1427 mask = xchg(¤t->fs->umask, mask & S_IRWXUGO); 1428 return mask; 1429 } 1430 1431 SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, 1432 unsigned long, arg4, unsigned long, arg5) 1433 { 1434 struct task_struct *me = current; 1435 unsigned char comm[sizeof(me->comm)]; 1436 long error; 1437 1438 error = security_task_prctl(option, arg2, arg3, arg4, arg5); 1439 if (error != -ENOSYS) 1440 return error; 1441 1442 error = 0; 1443 switch (option) { 1444 case PR_SET_PDEATHSIG: 1445 if (!valid_signal(arg2)) { 1446 error = -EINVAL; 1447 break; 1448 } 1449 me->pdeath_signal = arg2; 1450 error = 0; 1451 break; 1452 case PR_GET_PDEATHSIG: 1453 error = put_user(me->pdeath_signal, (int __user *)arg2); 1454 break; 1455 case PR_GET_DUMPABLE: 1456 error = get_dumpable(me->mm); 1457 break; 1458 case PR_SET_DUMPABLE: 1459 if (arg2 < 0 || arg2 > 1) { 1460 error = -EINVAL; 1461 break; 1462 } 1463 set_dumpable(me->mm, arg2); 1464 error = 0; 1465 break; 1466 1467 case PR_SET_UNALIGN: 1468 error = SET_UNALIGN_CTL(me, arg2); 1469 break; 1470 case PR_GET_UNALIGN: 1471 error = GET_UNALIGN_CTL(me, arg2); 1472 break; 1473 case PR_SET_FPEMU: 1474 error = SET_FPEMU_CTL(me, arg2); 1475 break; 1476 case PR_GET_FPEMU: 1477 error = GET_FPEMU_CTL(me, arg2); 1478 break; 1479 case PR_SET_FPEXC: 1480 error = SET_FPEXC_CTL(me, arg2); 1481 break; 1482 case PR_GET_FPEXC: 1483 error = GET_FPEXC_CTL(me, arg2); 1484 break; 1485 case PR_GET_TIMING: 1486 error = PR_TIMING_STATISTICAL; 1487 break; 1488 case PR_SET_TIMING: 1489 if (arg2 != PR_TIMING_STATISTICAL) 1490 error = -EINVAL; 1491 else 1492 error = 0; 1493 break; 1494 1495 case PR_SET_NAME: 1496 comm[sizeof(me->comm)-1] = 0; 1497 if (strncpy_from_user(comm, (char __user *)arg2, 1498 sizeof(me->comm) - 1) < 0) 1499 return -EFAULT; 1500 set_task_comm(me, comm); 1501 return 0; 1502 case PR_GET_NAME: 1503 get_task_comm(comm, me); 1504 if (copy_to_user((char __user *)arg2, comm, 1505 sizeof(comm))) 1506 return -EFAULT; 1507 return 0; 1508 case PR_GET_ENDIAN: 1509 error = GET_ENDIAN(me, arg2); 1510 break; 1511 case PR_SET_ENDIAN: 1512 error = SET_ENDIAN(me, arg2); 1513 break; 1514 1515 case PR_GET_SECCOMP: 1516 error = prctl_get_seccomp(); 1517 break; 1518 case PR_SET_SECCOMP: 1519 error = prctl_set_seccomp(arg2); 1520 break; 1521 case PR_GET_TSC: 1522 error = GET_TSC_CTL(arg2); 1523 break; 1524 case PR_SET_TSC: 1525 error = SET_TSC_CTL(arg2); 1526 break; 1527 case PR_TASK_PERF_EVENTS_DISABLE: 1528 error = perf_event_task_disable(); 1529 break; 1530 case PR_TASK_PERF_EVENTS_ENABLE: 1531 error = perf_event_task_enable(); 1532 break; 1533 case PR_GET_TIMERSLACK: 1534 error = current->timer_slack_ns; 1535 break; 1536 case PR_SET_TIMERSLACK: 1537 if (arg2 <= 0) 1538 current->timer_slack_ns = 1539 current->default_timer_slack_ns; 1540 else 1541 current->timer_slack_ns = arg2; 1542 error = 0; 1543 break; 1544 case PR_MCE_KILL: 1545 if (arg4 | arg5) 1546 return -EINVAL; 1547 switch (arg2) { 1548 case PR_MCE_KILL_CLEAR: 1549 if (arg3 != 0) 1550 return -EINVAL; 1551 current->flags &= ~PF_MCE_PROCESS; 1552 break; 1553 case PR_MCE_KILL_SET: 1554 current->flags |= PF_MCE_PROCESS; 1555 if (arg3 == PR_MCE_KILL_EARLY) 1556 current->flags |= PF_MCE_EARLY; 1557 else if (arg3 == PR_MCE_KILL_LATE) 1558 current->flags &= ~PF_MCE_EARLY; 1559 else if (arg3 == PR_MCE_KILL_DEFAULT) 1560 current->flags &= 1561 ~(PF_MCE_EARLY|PF_MCE_PROCESS); 1562 else 1563 return -EINVAL; 1564 break; 1565 default: 1566 return -EINVAL; 1567 } 1568 error = 0; 1569 break; 1570 case PR_MCE_KILL_GET: 1571 if (arg2 | arg3 | arg4 | arg5) 1572 return -EINVAL; 1573 if (current->flags & PF_MCE_PROCESS) 1574 error = (current->flags & PF_MCE_EARLY) ? 1575 PR_MCE_KILL_EARLY : PR_MCE_KILL_LATE; 1576 else 1577 error = PR_MCE_KILL_DEFAULT; 1578 break; 1579 default: 1580 error = -EINVAL; 1581 break; 1582 } 1583 return error; 1584 } 1585 1586 SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep, 1587 struct getcpu_cache __user *, unused) 1588 { 1589 int err = 0; 1590 int cpu = raw_smp_processor_id(); 1591 if (cpup) 1592 err |= put_user(cpu, cpup); 1593 if (nodep) 1594 err |= put_user(cpu_to_node(cpu), nodep); 1595 return err ? -EFAULT : 0; 1596 } 1597 1598 char poweroff_cmd[POWEROFF_CMD_PATH_LEN] = "/sbin/poweroff"; 1599 1600 static void argv_cleanup(char **argv, char **envp) 1601 { 1602 argv_free(argv); 1603 } 1604 1605 /** 1606 * orderly_poweroff - Trigger an orderly system poweroff 1607 * @force: force poweroff if command execution fails 1608 * 1609 * This may be called from any context to trigger a system shutdown. 1610 * If the orderly shutdown fails, it will force an immediate shutdown. 1611 */ 1612 int orderly_poweroff(bool force) 1613 { 1614 int argc; 1615 char **argv = argv_split(GFP_ATOMIC, poweroff_cmd, &argc); 1616 static char *envp[] = { 1617 "HOME=/", 1618 "PATH=/sbin:/bin:/usr/sbin:/usr/bin", 1619 NULL 1620 }; 1621 int ret = -ENOMEM; 1622 struct subprocess_info *info; 1623 1624 if (argv == NULL) { 1625 printk(KERN_WARNING "%s failed to allocate memory for \"%s\"\n", 1626 __func__, poweroff_cmd); 1627 goto out; 1628 } 1629 1630 info = call_usermodehelper_setup(argv[0], argv, envp, GFP_ATOMIC); 1631 if (info == NULL) { 1632 argv_free(argv); 1633 goto out; 1634 } 1635 1636 call_usermodehelper_setcleanup(info, argv_cleanup); 1637 1638 ret = call_usermodehelper_exec(info, UMH_NO_WAIT); 1639 1640 out: 1641 if (ret && force) { 1642 printk(KERN_WARNING "Failed to start orderly shutdown: " 1643 "forcing the issue\n"); 1644 1645 /* I guess this should try to kick off some daemon to 1646 sync and poweroff asap. Or not even bother syncing 1647 if we're doing an emergency shutdown? */ 1648 emergency_sync(); 1649 kernel_power_off(); 1650 } 1651 1652 return ret; 1653 } 1654 EXPORT_SYMBOL_GPL(orderly_poweroff); 1655