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