1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * linux/kernel/reboot.c 4 * 5 * Copyright (C) 2013 Linus Torvalds 6 */ 7 8 #define pr_fmt(fmt) "reboot: " fmt 9 10 #include <linux/atomic.h> 11 #include <linux/ctype.h> 12 #include <linux/export.h> 13 #include <linux/kexec.h> 14 #include <linux/kmod.h> 15 #include <linux/kmsg_dump.h> 16 #include <linux/reboot.h> 17 #include <linux/suspend.h> 18 #include <linux/syscalls.h> 19 #include <linux/syscore_ops.h> 20 #include <linux/uaccess.h> 21 22 /* 23 * this indicates whether you can reboot with ctrl-alt-del: the default is yes 24 */ 25 26 int C_A_D = 1; 27 struct pid *cad_pid; 28 EXPORT_SYMBOL(cad_pid); 29 30 #if defined(CONFIG_ARM) 31 #define DEFAULT_REBOOT_MODE = REBOOT_HARD 32 #else 33 #define DEFAULT_REBOOT_MODE 34 #endif 35 enum reboot_mode reboot_mode DEFAULT_REBOOT_MODE; 36 enum reboot_mode panic_reboot_mode = REBOOT_UNDEFINED; 37 38 /* 39 * This variable is used privately to keep track of whether or not 40 * reboot_type is still set to its default value (i.e., reboot= hasn't 41 * been set on the command line). This is needed so that we can 42 * suppress DMI scanning for reboot quirks. Without it, it's 43 * impossible to override a faulty reboot quirk without recompiling. 44 */ 45 int reboot_default = 1; 46 int reboot_cpu; 47 enum reboot_type reboot_type = BOOT_ACPI; 48 int reboot_force; 49 50 /* 51 * If set, this is used for preparing the system to power off. 52 */ 53 54 void (*pm_power_off_prepare)(void); 55 EXPORT_SYMBOL_GPL(pm_power_off_prepare); 56 57 /** 58 * emergency_restart - reboot the system 59 * 60 * Without shutting down any hardware or taking any locks 61 * reboot the system. This is called when we know we are in 62 * trouble so this is our best effort to reboot. This is 63 * safe to call in interrupt context. 64 */ 65 void emergency_restart(void) 66 { 67 kmsg_dump(KMSG_DUMP_EMERG); 68 machine_emergency_restart(); 69 } 70 EXPORT_SYMBOL_GPL(emergency_restart); 71 72 void kernel_restart_prepare(char *cmd) 73 { 74 blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd); 75 system_state = SYSTEM_RESTART; 76 usermodehelper_disable(); 77 device_shutdown(); 78 } 79 80 /** 81 * register_reboot_notifier - Register function to be called at reboot time 82 * @nb: Info about notifier function to be called 83 * 84 * Registers a function with the list of functions 85 * to be called at reboot time. 86 * 87 * Currently always returns zero, as blocking_notifier_chain_register() 88 * always returns zero. 89 */ 90 int register_reboot_notifier(struct notifier_block *nb) 91 { 92 return blocking_notifier_chain_register(&reboot_notifier_list, nb); 93 } 94 EXPORT_SYMBOL(register_reboot_notifier); 95 96 /** 97 * unregister_reboot_notifier - Unregister previously registered reboot notifier 98 * @nb: Hook to be unregistered 99 * 100 * Unregisters a previously registered reboot 101 * notifier function. 102 * 103 * Returns zero on success, or %-ENOENT on failure. 104 */ 105 int unregister_reboot_notifier(struct notifier_block *nb) 106 { 107 return blocking_notifier_chain_unregister(&reboot_notifier_list, nb); 108 } 109 EXPORT_SYMBOL(unregister_reboot_notifier); 110 111 static void devm_unregister_reboot_notifier(struct device *dev, void *res) 112 { 113 WARN_ON(unregister_reboot_notifier(*(struct notifier_block **)res)); 114 } 115 116 int devm_register_reboot_notifier(struct device *dev, struct notifier_block *nb) 117 { 118 struct notifier_block **rcnb; 119 int ret; 120 121 rcnb = devres_alloc(devm_unregister_reboot_notifier, 122 sizeof(*rcnb), GFP_KERNEL); 123 if (!rcnb) 124 return -ENOMEM; 125 126 ret = register_reboot_notifier(nb); 127 if (!ret) { 128 *rcnb = nb; 129 devres_add(dev, rcnb); 130 } else { 131 devres_free(rcnb); 132 } 133 134 return ret; 135 } 136 EXPORT_SYMBOL(devm_register_reboot_notifier); 137 138 /* 139 * Notifier list for kernel code which wants to be called 140 * to restart the system. 141 */ 142 static ATOMIC_NOTIFIER_HEAD(restart_handler_list); 143 144 /** 145 * register_restart_handler - Register function to be called to reset 146 * the system 147 * @nb: Info about handler function to be called 148 * @nb->priority: Handler priority. Handlers should follow the 149 * following guidelines for setting priorities. 150 * 0: Restart handler of last resort, 151 * with limited restart capabilities 152 * 128: Default restart handler; use if no other 153 * restart handler is expected to be available, 154 * and/or if restart functionality is 155 * sufficient to restart the entire system 156 * 255: Highest priority restart handler, will 157 * preempt all other restart handlers 158 * 159 * Registers a function with code to be called to restart the 160 * system. 161 * 162 * Registered functions will be called from machine_restart as last 163 * step of the restart sequence (if the architecture specific 164 * machine_restart function calls do_kernel_restart - see below 165 * for details). 166 * Registered functions are expected to restart the system immediately. 167 * If more than one function is registered, the restart handler priority 168 * selects which function will be called first. 169 * 170 * Restart handlers are expected to be registered from non-architecture 171 * code, typically from drivers. A typical use case would be a system 172 * where restart functionality is provided through a watchdog. Multiple 173 * restart handlers may exist; for example, one restart handler might 174 * restart the entire system, while another only restarts the CPU. 175 * In such cases, the restart handler which only restarts part of the 176 * hardware is expected to register with low priority to ensure that 177 * it only runs if no other means to restart the system is available. 178 * 179 * Currently always returns zero, as atomic_notifier_chain_register() 180 * always returns zero. 181 */ 182 int register_restart_handler(struct notifier_block *nb) 183 { 184 return atomic_notifier_chain_register(&restart_handler_list, nb); 185 } 186 EXPORT_SYMBOL(register_restart_handler); 187 188 /** 189 * unregister_restart_handler - Unregister previously registered 190 * restart handler 191 * @nb: Hook to be unregistered 192 * 193 * Unregisters a previously registered restart handler function. 194 * 195 * Returns zero on success, or %-ENOENT on failure. 196 */ 197 int unregister_restart_handler(struct notifier_block *nb) 198 { 199 return atomic_notifier_chain_unregister(&restart_handler_list, nb); 200 } 201 EXPORT_SYMBOL(unregister_restart_handler); 202 203 /** 204 * do_kernel_restart - Execute kernel restart handler call chain 205 * 206 * Calls functions registered with register_restart_handler. 207 * 208 * Expected to be called from machine_restart as last step of the restart 209 * sequence. 210 * 211 * Restarts the system immediately if a restart handler function has been 212 * registered. Otherwise does nothing. 213 */ 214 void do_kernel_restart(char *cmd) 215 { 216 atomic_notifier_call_chain(&restart_handler_list, reboot_mode, cmd); 217 } 218 219 void migrate_to_reboot_cpu(void) 220 { 221 /* The boot cpu is always logical cpu 0 */ 222 int cpu = reboot_cpu; 223 224 cpu_hotplug_disable(); 225 226 /* Make certain the cpu I'm about to reboot on is online */ 227 if (!cpu_online(cpu)) 228 cpu = cpumask_first(cpu_online_mask); 229 230 /* Prevent races with other tasks migrating this task */ 231 current->flags |= PF_NO_SETAFFINITY; 232 233 /* Make certain I only run on the appropriate processor */ 234 set_cpus_allowed_ptr(current, cpumask_of(cpu)); 235 } 236 237 /** 238 * kernel_restart - reboot the system 239 * @cmd: pointer to buffer containing command to execute for restart 240 * or %NULL 241 * 242 * Shutdown everything and perform a clean reboot. 243 * This is not safe to call in interrupt context. 244 */ 245 void kernel_restart(char *cmd) 246 { 247 kernel_restart_prepare(cmd); 248 migrate_to_reboot_cpu(); 249 syscore_shutdown(); 250 if (!cmd) 251 pr_emerg("Restarting system\n"); 252 else 253 pr_emerg("Restarting system with command '%s'\n", cmd); 254 kmsg_dump(KMSG_DUMP_SHUTDOWN); 255 machine_restart(cmd); 256 } 257 EXPORT_SYMBOL_GPL(kernel_restart); 258 259 static void kernel_shutdown_prepare(enum system_states state) 260 { 261 blocking_notifier_call_chain(&reboot_notifier_list, 262 (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); 263 system_state = state; 264 usermodehelper_disable(); 265 device_shutdown(); 266 } 267 /** 268 * kernel_halt - halt the system 269 * 270 * Shutdown everything and perform a clean system halt. 271 */ 272 void kernel_halt(void) 273 { 274 kernel_shutdown_prepare(SYSTEM_HALT); 275 migrate_to_reboot_cpu(); 276 syscore_shutdown(); 277 pr_emerg("System halted\n"); 278 kmsg_dump(KMSG_DUMP_SHUTDOWN); 279 machine_halt(); 280 } 281 EXPORT_SYMBOL_GPL(kernel_halt); 282 283 /** 284 * kernel_power_off - power_off the system 285 * 286 * Shutdown everything and perform a clean system power_off. 287 */ 288 void kernel_power_off(void) 289 { 290 kernel_shutdown_prepare(SYSTEM_POWER_OFF); 291 if (pm_power_off_prepare) 292 pm_power_off_prepare(); 293 migrate_to_reboot_cpu(); 294 syscore_shutdown(); 295 pr_emerg("Power down\n"); 296 kmsg_dump(KMSG_DUMP_SHUTDOWN); 297 machine_power_off(); 298 } 299 EXPORT_SYMBOL_GPL(kernel_power_off); 300 301 DEFINE_MUTEX(system_transition_mutex); 302 303 /* 304 * Reboot system call: for obvious reasons only root may call it, 305 * and even root needs to set up some magic numbers in the registers 306 * so that some mistake won't make this reboot the whole machine. 307 * You can also set the meaning of the ctrl-alt-del-key here. 308 * 309 * reboot doesn't sync: do that yourself before calling this. 310 */ 311 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, 312 void __user *, arg) 313 { 314 struct pid_namespace *pid_ns = task_active_pid_ns(current); 315 char buffer[256]; 316 int ret = 0; 317 318 /* We only trust the superuser with rebooting the system. */ 319 if (!ns_capable(pid_ns->user_ns, CAP_SYS_BOOT)) 320 return -EPERM; 321 322 /* For safety, we require "magic" arguments. */ 323 if (magic1 != LINUX_REBOOT_MAGIC1 || 324 (magic2 != LINUX_REBOOT_MAGIC2 && 325 magic2 != LINUX_REBOOT_MAGIC2A && 326 magic2 != LINUX_REBOOT_MAGIC2B && 327 magic2 != LINUX_REBOOT_MAGIC2C)) 328 return -EINVAL; 329 330 /* 331 * If pid namespaces are enabled and the current task is in a child 332 * pid_namespace, the command is handled by reboot_pid_ns() which will 333 * call do_exit(). 334 */ 335 ret = reboot_pid_ns(pid_ns, cmd); 336 if (ret) 337 return ret; 338 339 /* Instead of trying to make the power_off code look like 340 * halt when pm_power_off is not set do it the easy way. 341 */ 342 if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off) 343 cmd = LINUX_REBOOT_CMD_HALT; 344 345 mutex_lock(&system_transition_mutex); 346 switch (cmd) { 347 case LINUX_REBOOT_CMD_RESTART: 348 kernel_restart(NULL); 349 break; 350 351 case LINUX_REBOOT_CMD_CAD_ON: 352 C_A_D = 1; 353 break; 354 355 case LINUX_REBOOT_CMD_CAD_OFF: 356 C_A_D = 0; 357 break; 358 359 case LINUX_REBOOT_CMD_HALT: 360 kernel_halt(); 361 do_exit(0); 362 363 case LINUX_REBOOT_CMD_POWER_OFF: 364 kernel_power_off(); 365 do_exit(0); 366 break; 367 368 case LINUX_REBOOT_CMD_RESTART2: 369 ret = strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1); 370 if (ret < 0) { 371 ret = -EFAULT; 372 break; 373 } 374 buffer[sizeof(buffer) - 1] = '\0'; 375 376 kernel_restart(buffer); 377 break; 378 379 #ifdef CONFIG_KEXEC_CORE 380 case LINUX_REBOOT_CMD_KEXEC: 381 ret = kernel_kexec(); 382 break; 383 #endif 384 385 #ifdef CONFIG_HIBERNATION 386 case LINUX_REBOOT_CMD_SW_SUSPEND: 387 ret = hibernate(); 388 break; 389 #endif 390 391 default: 392 ret = -EINVAL; 393 break; 394 } 395 mutex_unlock(&system_transition_mutex); 396 return ret; 397 } 398 399 static void deferred_cad(struct work_struct *dummy) 400 { 401 kernel_restart(NULL); 402 } 403 404 /* 405 * This function gets called by ctrl-alt-del - ie the keyboard interrupt. 406 * As it's called within an interrupt, it may NOT sync: the only choice 407 * is whether to reboot at once, or just ignore the ctrl-alt-del. 408 */ 409 void ctrl_alt_del(void) 410 { 411 static DECLARE_WORK(cad_work, deferred_cad); 412 413 if (C_A_D) 414 schedule_work(&cad_work); 415 else 416 kill_cad_pid(SIGINT, 1); 417 } 418 419 char poweroff_cmd[POWEROFF_CMD_PATH_LEN] = "/sbin/poweroff"; 420 static const char reboot_cmd[] = "/sbin/reboot"; 421 422 static int run_cmd(const char *cmd) 423 { 424 char **argv; 425 static char *envp[] = { 426 "HOME=/", 427 "PATH=/sbin:/bin:/usr/sbin:/usr/bin", 428 NULL 429 }; 430 int ret; 431 argv = argv_split(GFP_KERNEL, cmd, NULL); 432 if (argv) { 433 ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC); 434 argv_free(argv); 435 } else { 436 ret = -ENOMEM; 437 } 438 439 return ret; 440 } 441 442 static int __orderly_reboot(void) 443 { 444 int ret; 445 446 ret = run_cmd(reboot_cmd); 447 448 if (ret) { 449 pr_warn("Failed to start orderly reboot: forcing the issue\n"); 450 emergency_sync(); 451 kernel_restart(NULL); 452 } 453 454 return ret; 455 } 456 457 static int __orderly_poweroff(bool force) 458 { 459 int ret; 460 461 ret = run_cmd(poweroff_cmd); 462 463 if (ret && force) { 464 pr_warn("Failed to start orderly shutdown: forcing the issue\n"); 465 466 /* 467 * I guess this should try to kick off some daemon to sync and 468 * poweroff asap. Or not even bother syncing if we're doing an 469 * emergency shutdown? 470 */ 471 emergency_sync(); 472 kernel_power_off(); 473 } 474 475 return ret; 476 } 477 478 static bool poweroff_force; 479 480 static void poweroff_work_func(struct work_struct *work) 481 { 482 __orderly_poweroff(poweroff_force); 483 } 484 485 static DECLARE_WORK(poweroff_work, poweroff_work_func); 486 487 /** 488 * orderly_poweroff - Trigger an orderly system poweroff 489 * @force: force poweroff if command execution fails 490 * 491 * This may be called from any context to trigger a system shutdown. 492 * If the orderly shutdown fails, it will force an immediate shutdown. 493 */ 494 void orderly_poweroff(bool force) 495 { 496 if (force) /* do not override the pending "true" */ 497 poweroff_force = true; 498 schedule_work(&poweroff_work); 499 } 500 EXPORT_SYMBOL_GPL(orderly_poweroff); 501 502 static void reboot_work_func(struct work_struct *work) 503 { 504 __orderly_reboot(); 505 } 506 507 static DECLARE_WORK(reboot_work, reboot_work_func); 508 509 /** 510 * orderly_reboot - Trigger an orderly system reboot 511 * 512 * This may be called from any context to trigger a system reboot. 513 * If the orderly reboot fails, it will force an immediate reboot. 514 */ 515 void orderly_reboot(void) 516 { 517 schedule_work(&reboot_work); 518 } 519 EXPORT_SYMBOL_GPL(orderly_reboot); 520 521 /** 522 * hw_failure_emergency_poweroff_func - emergency poweroff work after a known delay 523 * @work: work_struct associated with the emergency poweroff function 524 * 525 * This function is called in very critical situations to force 526 * a kernel poweroff after a configurable timeout value. 527 */ 528 static void hw_failure_emergency_poweroff_func(struct work_struct *work) 529 { 530 /* 531 * We have reached here after the emergency shutdown waiting period has 532 * expired. This means orderly_poweroff has not been able to shut off 533 * the system for some reason. 534 * 535 * Try to shut down the system immediately using kernel_power_off 536 * if populated 537 */ 538 pr_emerg("Hardware protection timed-out. Trying forced poweroff\n"); 539 kernel_power_off(); 540 541 /* 542 * Worst of the worst case trigger emergency restart 543 */ 544 pr_emerg("Hardware protection shutdown failed. Trying emergency restart\n"); 545 emergency_restart(); 546 } 547 548 static DECLARE_DELAYED_WORK(hw_failure_emergency_poweroff_work, 549 hw_failure_emergency_poweroff_func); 550 551 /** 552 * hw_failure_emergency_poweroff - Trigger an emergency system poweroff 553 * 554 * This may be called from any critical situation to trigger a system shutdown 555 * after a given period of time. If time is negative this is not scheduled. 556 */ 557 static void hw_failure_emergency_poweroff(int poweroff_delay_ms) 558 { 559 if (poweroff_delay_ms <= 0) 560 return; 561 schedule_delayed_work(&hw_failure_emergency_poweroff_work, 562 msecs_to_jiffies(poweroff_delay_ms)); 563 } 564 565 /** 566 * hw_protection_shutdown - Trigger an emergency system poweroff 567 * 568 * @reason: Reason of emergency shutdown to be printed. 569 * @ms_until_forced: Time to wait for orderly shutdown before tiggering a 570 * forced shudown. Negative value disables the forced 571 * shutdown. 572 * 573 * Initiate an emergency system shutdown in order to protect hardware from 574 * further damage. Usage examples include a thermal protection or a voltage or 575 * current regulator failures. 576 * NOTE: The request is ignored if protection shutdown is already pending even 577 * if the previous request has given a large timeout for forced shutdown. 578 * Can be called from any context. 579 */ 580 void hw_protection_shutdown(const char *reason, int ms_until_forced) 581 { 582 static atomic_t allow_proceed = ATOMIC_INIT(1); 583 584 pr_emerg("HARDWARE PROTECTION shutdown (%s)\n", reason); 585 586 /* Shutdown should be initiated only once. */ 587 if (!atomic_dec_and_test(&allow_proceed)) 588 return; 589 590 /* 591 * Queue a backup emergency shutdown in the event of 592 * orderly_poweroff failure 593 */ 594 hw_failure_emergency_poweroff(ms_until_forced); 595 orderly_poweroff(true); 596 } 597 EXPORT_SYMBOL_GPL(hw_protection_shutdown); 598 599 static int __init reboot_setup(char *str) 600 { 601 for (;;) { 602 enum reboot_mode *mode; 603 604 /* 605 * Having anything passed on the command line via 606 * reboot= will cause us to disable DMI checking 607 * below. 608 */ 609 reboot_default = 0; 610 611 if (!strncmp(str, "panic_", 6)) { 612 mode = &panic_reboot_mode; 613 str += 6; 614 } else { 615 mode = &reboot_mode; 616 } 617 618 switch (*str) { 619 case 'w': 620 *mode = REBOOT_WARM; 621 break; 622 623 case 'c': 624 *mode = REBOOT_COLD; 625 break; 626 627 case 'h': 628 *mode = REBOOT_HARD; 629 break; 630 631 case 's': 632 /* 633 * reboot_cpu is s[mp]#### with #### being the processor 634 * to be used for rebooting. Skip 's' or 'smp' prefix. 635 */ 636 str += str[1] == 'm' && str[2] == 'p' ? 3 : 1; 637 638 if (isdigit(str[0])) { 639 int cpu = simple_strtoul(str, NULL, 0); 640 641 if (cpu >= num_possible_cpus()) { 642 pr_err("Ignoring the CPU number in reboot= option. " 643 "CPU %d exceeds possible cpu number %d\n", 644 cpu, num_possible_cpus()); 645 break; 646 } 647 reboot_cpu = cpu; 648 } else 649 *mode = REBOOT_SOFT; 650 break; 651 652 case 'g': 653 *mode = REBOOT_GPIO; 654 break; 655 656 case 'b': 657 case 'a': 658 case 'k': 659 case 't': 660 case 'e': 661 case 'p': 662 reboot_type = *str; 663 break; 664 665 case 'f': 666 reboot_force = 1; 667 break; 668 } 669 670 str = strchr(str, ','); 671 if (str) 672 str++; 673 else 674 break; 675 } 676 return 1; 677 } 678 __setup("reboot=", reboot_setup); 679 680 #ifdef CONFIG_SYSFS 681 682 #define REBOOT_COLD_STR "cold" 683 #define REBOOT_WARM_STR "warm" 684 #define REBOOT_HARD_STR "hard" 685 #define REBOOT_SOFT_STR "soft" 686 #define REBOOT_GPIO_STR "gpio" 687 #define REBOOT_UNDEFINED_STR "undefined" 688 689 #define BOOT_TRIPLE_STR "triple" 690 #define BOOT_KBD_STR "kbd" 691 #define BOOT_BIOS_STR "bios" 692 #define BOOT_ACPI_STR "acpi" 693 #define BOOT_EFI_STR "efi" 694 #define BOOT_PCI_STR "pci" 695 696 static ssize_t mode_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 697 { 698 const char *val; 699 700 switch (reboot_mode) { 701 case REBOOT_COLD: 702 val = REBOOT_COLD_STR; 703 break; 704 case REBOOT_WARM: 705 val = REBOOT_WARM_STR; 706 break; 707 case REBOOT_HARD: 708 val = REBOOT_HARD_STR; 709 break; 710 case REBOOT_SOFT: 711 val = REBOOT_SOFT_STR; 712 break; 713 case REBOOT_GPIO: 714 val = REBOOT_GPIO_STR; 715 break; 716 default: 717 val = REBOOT_UNDEFINED_STR; 718 } 719 720 return sprintf(buf, "%s\n", val); 721 } 722 static ssize_t mode_store(struct kobject *kobj, struct kobj_attribute *attr, 723 const char *buf, size_t count) 724 { 725 if (!capable(CAP_SYS_BOOT)) 726 return -EPERM; 727 728 if (!strncmp(buf, REBOOT_COLD_STR, strlen(REBOOT_COLD_STR))) 729 reboot_mode = REBOOT_COLD; 730 else if (!strncmp(buf, REBOOT_WARM_STR, strlen(REBOOT_WARM_STR))) 731 reboot_mode = REBOOT_WARM; 732 else if (!strncmp(buf, REBOOT_HARD_STR, strlen(REBOOT_HARD_STR))) 733 reboot_mode = REBOOT_HARD; 734 else if (!strncmp(buf, REBOOT_SOFT_STR, strlen(REBOOT_SOFT_STR))) 735 reboot_mode = REBOOT_SOFT; 736 else if (!strncmp(buf, REBOOT_GPIO_STR, strlen(REBOOT_GPIO_STR))) 737 reboot_mode = REBOOT_GPIO; 738 else 739 return -EINVAL; 740 741 reboot_default = 0; 742 743 return count; 744 } 745 static struct kobj_attribute reboot_mode_attr = __ATTR_RW(mode); 746 747 #ifdef CONFIG_X86 748 static ssize_t force_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 749 { 750 return sprintf(buf, "%d\n", reboot_force); 751 } 752 static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr, 753 const char *buf, size_t count) 754 { 755 bool res; 756 757 if (!capable(CAP_SYS_BOOT)) 758 return -EPERM; 759 760 if (kstrtobool(buf, &res)) 761 return -EINVAL; 762 763 reboot_default = 0; 764 reboot_force = res; 765 766 return count; 767 } 768 static struct kobj_attribute reboot_force_attr = __ATTR_RW(force); 769 770 static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 771 { 772 const char *val; 773 774 switch (reboot_type) { 775 case BOOT_TRIPLE: 776 val = BOOT_TRIPLE_STR; 777 break; 778 case BOOT_KBD: 779 val = BOOT_KBD_STR; 780 break; 781 case BOOT_BIOS: 782 val = BOOT_BIOS_STR; 783 break; 784 case BOOT_ACPI: 785 val = BOOT_ACPI_STR; 786 break; 787 case BOOT_EFI: 788 val = BOOT_EFI_STR; 789 break; 790 case BOOT_CF9_FORCE: 791 val = BOOT_PCI_STR; 792 break; 793 default: 794 val = REBOOT_UNDEFINED_STR; 795 } 796 797 return sprintf(buf, "%s\n", val); 798 } 799 static ssize_t type_store(struct kobject *kobj, struct kobj_attribute *attr, 800 const char *buf, size_t count) 801 { 802 if (!capable(CAP_SYS_BOOT)) 803 return -EPERM; 804 805 if (!strncmp(buf, BOOT_TRIPLE_STR, strlen(BOOT_TRIPLE_STR))) 806 reboot_type = BOOT_TRIPLE; 807 else if (!strncmp(buf, BOOT_KBD_STR, strlen(BOOT_KBD_STR))) 808 reboot_type = BOOT_KBD; 809 else if (!strncmp(buf, BOOT_BIOS_STR, strlen(BOOT_BIOS_STR))) 810 reboot_type = BOOT_BIOS; 811 else if (!strncmp(buf, BOOT_ACPI_STR, strlen(BOOT_ACPI_STR))) 812 reboot_type = BOOT_ACPI; 813 else if (!strncmp(buf, BOOT_EFI_STR, strlen(BOOT_EFI_STR))) 814 reboot_type = BOOT_EFI; 815 else if (!strncmp(buf, BOOT_PCI_STR, strlen(BOOT_PCI_STR))) 816 reboot_type = BOOT_CF9_FORCE; 817 else 818 return -EINVAL; 819 820 reboot_default = 0; 821 822 return count; 823 } 824 static struct kobj_attribute reboot_type_attr = __ATTR_RW(type); 825 #endif 826 827 #ifdef CONFIG_SMP 828 static ssize_t cpu_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) 829 { 830 return sprintf(buf, "%d\n", reboot_cpu); 831 } 832 static ssize_t cpu_store(struct kobject *kobj, struct kobj_attribute *attr, 833 const char *buf, size_t count) 834 { 835 unsigned int cpunum; 836 int rc; 837 838 if (!capable(CAP_SYS_BOOT)) 839 return -EPERM; 840 841 rc = kstrtouint(buf, 0, &cpunum); 842 843 if (rc) 844 return rc; 845 846 if (cpunum >= num_possible_cpus()) 847 return -ERANGE; 848 849 reboot_default = 0; 850 reboot_cpu = cpunum; 851 852 return count; 853 } 854 static struct kobj_attribute reboot_cpu_attr = __ATTR_RW(cpu); 855 #endif 856 857 static struct attribute *reboot_attrs[] = { 858 &reboot_mode_attr.attr, 859 #ifdef CONFIG_X86 860 &reboot_force_attr.attr, 861 &reboot_type_attr.attr, 862 #endif 863 #ifdef CONFIG_SMP 864 &reboot_cpu_attr.attr, 865 #endif 866 NULL, 867 }; 868 869 static const struct attribute_group reboot_attr_group = { 870 .attrs = reboot_attrs, 871 }; 872 873 static int __init reboot_ksysfs_init(void) 874 { 875 struct kobject *reboot_kobj; 876 int ret; 877 878 reboot_kobj = kobject_create_and_add("reboot", kernel_kobj); 879 if (!reboot_kobj) 880 return -ENOMEM; 881 882 ret = sysfs_create_group(reboot_kobj, &reboot_attr_group); 883 if (ret) { 884 kobject_put(reboot_kobj); 885 return ret; 886 } 887 888 return 0; 889 } 890 late_initcall(reboot_ksysfs_init); 891 892 #endif 893