Branch data Line data Source code
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/ctype.h> 11 : : #include <linux/export.h> 12 : : #include <linux/kexec.h> 13 : : #include <linux/kmod.h> 14 : : #include <linux/kmsg_dump.h> 15 : : #include <linux/reboot.h> 16 : : #include <linux/suspend.h> 17 : : #include <linux/syscalls.h> 18 : : #include <linux/syscore_ops.h> 19 : : #include <linux/uaccess.h> 20 : : 21 : : /* 22 : : * this indicates whether you can reboot with ctrl-alt-del: the default is yes 23 : : */ 24 : : 25 : : int C_A_D = 1; 26 : : struct pid *cad_pid; 27 : : EXPORT_SYMBOL(cad_pid); 28 : : 29 : : #if defined(CONFIG_ARM) || defined(CONFIG_UNICORE32) 30 : : #define DEFAULT_REBOOT_MODE = REBOOT_HARD 31 : : #else 32 : : #define DEFAULT_REBOOT_MODE 33 : : #endif 34 : : enum reboot_mode reboot_mode DEFAULT_REBOOT_MODE; 35 : : enum reboot_mode panic_reboot_mode = REBOOT_UNDEFINED; 36 : : 37 : : /* 38 : : * This variable is used privately to keep track of whether or not 39 : : * reboot_type is still set to its default value (i.e., reboot= hasn't 40 : : * been set on the command line). This is needed so that we can 41 : : * suppress DMI scanning for reboot quirks. Without it, it's 42 : : * impossible to override a faulty reboot quirk without recompiling. 43 : : */ 44 : : int reboot_default = 1; 45 : : int reboot_cpu; 46 : : enum reboot_type reboot_type = BOOT_ACPI; 47 : : int reboot_force; 48 : : 49 : : /* 50 : : * If set, this is used for preparing the system to power off. 51 : : */ 52 : : 53 : : void (*pm_power_off_prepare)(void); 54 : : EXPORT_SYMBOL_GPL(pm_power_off_prepare); 55 : : 56 : : /** 57 : : * emergency_restart - reboot the system 58 : : * 59 : : * Without shutting down any hardware or taking any locks 60 : : * reboot the system. This is called when we know we are in 61 : : * trouble so this is our best effort to reboot. This is 62 : : * safe to call in interrupt context. 63 : : */ 64 : 0 : void emergency_restart(void) 65 : : { 66 : 0 : kmsg_dump(KMSG_DUMP_EMERG); 67 : : machine_emergency_restart(); 68 : 0 : } 69 : : EXPORT_SYMBOL_GPL(emergency_restart); 70 : : 71 : 0 : void kernel_restart_prepare(char *cmd) 72 : : { 73 : 0 : blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd); 74 : 0 : system_state = SYSTEM_RESTART; 75 : : usermodehelper_disable(); 76 : 0 : device_shutdown(); 77 : 0 : } 78 : : 79 : : /** 80 : : * register_reboot_notifier - Register function to be called at reboot time 81 : : * @nb: Info about notifier function to be called 82 : : * 83 : : * Registers a function with the list of functions 84 : : * to be called at reboot time. 85 : : * 86 : : * Currently always returns zero, as blocking_notifier_chain_register() 87 : : * always returns zero. 88 : : */ 89 : 3 : int register_reboot_notifier(struct notifier_block *nb) 90 : : { 91 : 3 : return blocking_notifier_chain_register(&reboot_notifier_list, nb); 92 : : } 93 : : EXPORT_SYMBOL(register_reboot_notifier); 94 : : 95 : : /** 96 : : * unregister_reboot_notifier - Unregister previously registered reboot notifier 97 : : * @nb: Hook to be unregistered 98 : : * 99 : : * Unregisters a previously registered reboot 100 : : * notifier function. 101 : : * 102 : : * Returns zero on success, or %-ENOENT on failure. 103 : : */ 104 : 0 : int unregister_reboot_notifier(struct notifier_block *nb) 105 : : { 106 : 0 : return blocking_notifier_chain_unregister(&reboot_notifier_list, nb); 107 : : } 108 : : EXPORT_SYMBOL(unregister_reboot_notifier); 109 : : 110 : 0 : static void devm_unregister_reboot_notifier(struct device *dev, void *res) 111 : : { 112 : 0 : WARN_ON(unregister_reboot_notifier(*(struct notifier_block **)res)); 113 : 0 : } 114 : : 115 : 0 : int devm_register_reboot_notifier(struct device *dev, struct notifier_block *nb) 116 : : { 117 : : struct notifier_block **rcnb; 118 : : int ret; 119 : : 120 : : rcnb = devres_alloc(devm_unregister_reboot_notifier, 121 : : sizeof(*rcnb), GFP_KERNEL); 122 : 0 : if (!rcnb) 123 : : return -ENOMEM; 124 : : 125 : : ret = register_reboot_notifier(nb); 126 : 0 : if (!ret) { 127 : 0 : *rcnb = nb; 128 : 0 : devres_add(dev, rcnb); 129 : : } else { 130 : 0 : devres_free(rcnb); 131 : : } 132 : : 133 : 0 : return ret; 134 : : } 135 : : EXPORT_SYMBOL(devm_register_reboot_notifier); 136 : : 137 : : /* 138 : : * Notifier list for kernel code which wants to be called 139 : : * to restart the system. 140 : : */ 141 : : static ATOMIC_NOTIFIER_HEAD(restart_handler_list); 142 : : 143 : : /** 144 : : * register_restart_handler - Register function to be called to reset 145 : : * the system 146 : : * @nb: Info about handler function to be called 147 : : * @nb->priority: Handler priority. Handlers should follow the 148 : : * following guidelines for setting priorities. 149 : : * 0: Restart handler of last resort, 150 : : * with limited restart capabilities 151 : : * 128: Default restart handler; use if no other 152 : : * restart handler is expected to be available, 153 : : * and/or if restart functionality is 154 : : * sufficient to restart the entire system 155 : : * 255: Highest priority restart handler, will 156 : : * preempt all other restart handlers 157 : : * 158 : : * Registers a function with code to be called to restart the 159 : : * system. 160 : : * 161 : : * Registered functions will be called from machine_restart as last 162 : : * step of the restart sequence (if the architecture specific 163 : : * machine_restart function calls do_kernel_restart - see below 164 : : * for details). 165 : : * Registered functions are expected to restart the system immediately. 166 : : * If more than one function is registered, the restart handler priority 167 : : * selects which function will be called first. 168 : : * 169 : : * Restart handlers are expected to be registered from non-architecture 170 : : * code, typically from drivers. A typical use case would be a system 171 : : * where restart functionality is provided through a watchdog. Multiple 172 : : * restart handlers may exist; for example, one restart handler might 173 : : * restart the entire system, while another only restarts the CPU. 174 : : * In such cases, the restart handler which only restarts part of the 175 : : * hardware is expected to register with low priority to ensure that 176 : : * it only runs if no other means to restart the system is available. 177 : : * 178 : : * Currently always returns zero, as atomic_notifier_chain_register() 179 : : * always returns zero. 180 : : */ 181 : 3 : int register_restart_handler(struct notifier_block *nb) 182 : : { 183 : 3 : return atomic_notifier_chain_register(&restart_handler_list, nb); 184 : : } 185 : : EXPORT_SYMBOL(register_restart_handler); 186 : : 187 : : /** 188 : : * unregister_restart_handler - Unregister previously registered 189 : : * restart handler 190 : : * @nb: Hook to be unregistered 191 : : * 192 : : * Unregisters a previously registered restart handler function. 193 : : * 194 : : * Returns zero on success, or %-ENOENT on failure. 195 : : */ 196 : 0 : int unregister_restart_handler(struct notifier_block *nb) 197 : : { 198 : 0 : return atomic_notifier_chain_unregister(&restart_handler_list, nb); 199 : : } 200 : : EXPORT_SYMBOL(unregister_restart_handler); 201 : : 202 : : /** 203 : : * do_kernel_restart - Execute kernel restart handler call chain 204 : : * 205 : : * Calls functions registered with register_restart_handler. 206 : : * 207 : : * Expected to be called from machine_restart as last step of the restart 208 : : * sequence. 209 : : * 210 : : * Restarts the system immediately if a restart handler function has been 211 : : * registered. Otherwise does nothing. 212 : : */ 213 : 0 : void do_kernel_restart(char *cmd) 214 : : { 215 : 0 : atomic_notifier_call_chain(&restart_handler_list, reboot_mode, cmd); 216 : 0 : } 217 : : 218 : 0 : void migrate_to_reboot_cpu(void) 219 : : { 220 : : /* The boot cpu is always logical cpu 0 */ 221 : 0 : int cpu = reboot_cpu; 222 : : 223 : : cpu_hotplug_disable(); 224 : : 225 : : /* Make certain the cpu I'm about to reboot on is online */ 226 : 0 : if (!cpu_online(cpu)) 227 : : cpu = cpumask_first(cpu_online_mask); 228 : : 229 : : /* Prevent races with other tasks migrating this task */ 230 : 0 : current->flags |= PF_NO_SETAFFINITY; 231 : : 232 : : /* Make certain I only run on the appropriate processor */ 233 : 0 : set_cpus_allowed_ptr(current, cpumask_of(cpu)); 234 : 0 : } 235 : : 236 : : /** 237 : : * kernel_restart - reboot the system 238 : : * @cmd: pointer to buffer containing command to execute for restart 239 : : * or %NULL 240 : : * 241 : : * Shutdown everything and perform a clean reboot. 242 : : * This is not safe to call in interrupt context. 243 : : */ 244 : 0 : void kernel_restart(char *cmd) 245 : : { 246 : 0 : kernel_restart_prepare(cmd); 247 : 0 : migrate_to_reboot_cpu(); 248 : 0 : syscore_shutdown(); 249 : 0 : if (!cmd) 250 : 0 : pr_emerg("Restarting system\n"); 251 : : else 252 : 0 : pr_emerg("Restarting system with command '%s'\n", cmd); 253 : 0 : kmsg_dump(KMSG_DUMP_RESTART); 254 : 0 : machine_restart(cmd); 255 : 0 : } 256 : : EXPORT_SYMBOL_GPL(kernel_restart); 257 : : 258 : 0 : static void kernel_shutdown_prepare(enum system_states state) 259 : : { 260 : 0 : blocking_notifier_call_chain(&reboot_notifier_list, 261 : : (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); 262 : 0 : system_state = state; 263 : : usermodehelper_disable(); 264 : 0 : device_shutdown(); 265 : 0 : } 266 : : /** 267 : : * kernel_halt - halt the system 268 : : * 269 : : * Shutdown everything and perform a clean system halt. 270 : : */ 271 : 0 : void kernel_halt(void) 272 : : { 273 : 0 : kernel_shutdown_prepare(SYSTEM_HALT); 274 : 0 : migrate_to_reboot_cpu(); 275 : 0 : syscore_shutdown(); 276 : 0 : pr_emerg("System halted\n"); 277 : 0 : kmsg_dump(KMSG_DUMP_HALT); 278 : 0 : machine_halt(); 279 : 0 : } 280 : : EXPORT_SYMBOL_GPL(kernel_halt); 281 : : 282 : : /** 283 : : * kernel_power_off - power_off the system 284 : : * 285 : : * Shutdown everything and perform a clean system power_off. 286 : : */ 287 : 0 : void kernel_power_off(void) 288 : : { 289 : 0 : kernel_shutdown_prepare(SYSTEM_POWER_OFF); 290 : 0 : if (pm_power_off_prepare) 291 : 0 : pm_power_off_prepare(); 292 : 0 : migrate_to_reboot_cpu(); 293 : 0 : syscore_shutdown(); 294 : 0 : pr_emerg("Power down\n"); 295 : 0 : kmsg_dump(KMSG_DUMP_POWEROFF); 296 : 0 : machine_power_off(); 297 : 0 : } 298 : : EXPORT_SYMBOL_GPL(kernel_power_off); 299 : : 300 : : DEFINE_MUTEX(system_transition_mutex); 301 : : 302 : : /* 303 : : * Reboot system call: for obvious reasons only root may call it, 304 : : * and even root needs to set up some magic numbers in the registers 305 : : * so that some mistake won't make this reboot the whole machine. 306 : : * You can also set the meaning of the ctrl-alt-del-key here. 307 : : * 308 : : * reboot doesn't sync: do that yourself before calling this. 309 : : */ 310 : 3 : SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, 311 : : void __user *, arg) 312 : : { 313 : 3 : struct pid_namespace *pid_ns = task_active_pid_ns(current); 314 : : char buffer[256]; 315 : : int ret = 0; 316 : : 317 : : /* We only trust the superuser with rebooting the system. */ 318 : 3 : if (!ns_capable(pid_ns->user_ns, CAP_SYS_BOOT)) 319 : : return -EPERM; 320 : : 321 : : /* For safety, we require "magic" arguments. */ 322 : 3 : if (magic1 != LINUX_REBOOT_MAGIC1 || 323 : 3 : (magic2 != LINUX_REBOOT_MAGIC2 && 324 : 3 : magic2 != LINUX_REBOOT_MAGIC2A && 325 : 0 : magic2 != LINUX_REBOOT_MAGIC2B && 326 : 0 : magic2 != LINUX_REBOOT_MAGIC2C)) 327 : : return -EINVAL; 328 : : 329 : : /* 330 : : * If pid namespaces are enabled and the current task is in a child 331 : : * pid_namespace, the command is handled by reboot_pid_ns() which will 332 : : * call do_exit(). 333 : : */ 334 : 3 : ret = reboot_pid_ns(pid_ns, cmd); 335 : 3 : if (ret) 336 : : return ret; 337 : : 338 : : /* Instead of trying to make the power_off code look like 339 : : * halt when pm_power_off is not set do it the easy way. 340 : : */ 341 : 3 : if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off) 342 : : cmd = LINUX_REBOOT_CMD_HALT; 343 : : 344 : 3 : mutex_lock(&system_transition_mutex); 345 : 3 : switch (cmd) { 346 : : case LINUX_REBOOT_CMD_RESTART: 347 : 0 : kernel_restart(NULL); 348 : 0 : break; 349 : : 350 : : case LINUX_REBOOT_CMD_CAD_ON: 351 : 0 : C_A_D = 1; 352 : 0 : break; 353 : : 354 : : case LINUX_REBOOT_CMD_CAD_OFF: 355 : 3 : C_A_D = 0; 356 : 3 : break; 357 : : 358 : : case LINUX_REBOOT_CMD_HALT: 359 : 0 : kernel_halt(); 360 : 0 : do_exit(0); 361 : : panic("cannot halt"); 362 : : 363 : : case LINUX_REBOOT_CMD_POWER_OFF: 364 : 0 : kernel_power_off(); 365 : 0 : do_exit(0); 366 : : break; 367 : : 368 : : case LINUX_REBOOT_CMD_RESTART2: 369 : 0 : ret = strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1); 370 : 0 : if (ret < 0) { 371 : : ret = -EFAULT; 372 : : break; 373 : : } 374 : 0 : buffer[sizeof(buffer) - 1] = '\0'; 375 : : 376 : 0 : kernel_restart(buffer); 377 : 0 : 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 : 3 : mutex_unlock(&system_transition_mutex); 396 : 3 : return ret; 397 : : } 398 : : 399 : 0 : static void deferred_cad(struct work_struct *dummy) 400 : : { 401 : 0 : kernel_restart(NULL); 402 : 0 : } 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 : 0 : void ctrl_alt_del(void) 410 : : { 411 : : static DECLARE_WORK(cad_work, deferred_cad); 412 : : 413 : 0 : if (C_A_D) 414 : : schedule_work(&cad_work); 415 : : else 416 : : kill_cad_pid(SIGINT, 1); 417 : 0 : } 418 : : 419 : : char poweroff_cmd[POWEROFF_CMD_PATH_LEN] = "/sbin/poweroff"; 420 : : static const char reboot_cmd[] = "/sbin/reboot"; 421 : : 422 : 0 : 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 : 0 : argv = argv_split(GFP_KERNEL, cmd, NULL); 432 : 0 : if (argv) { 433 : 0 : ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC); 434 : 0 : argv_free(argv); 435 : : } else { 436 : : ret = -ENOMEM; 437 : : } 438 : : 439 : 0 : return ret; 440 : : } 441 : : 442 : 0 : static int __orderly_reboot(void) 443 : : { 444 : : int ret; 445 : : 446 : 0 : ret = run_cmd(reboot_cmd); 447 : : 448 : 0 : if (ret) { 449 : 0 : pr_warn("Failed to start orderly reboot: forcing the issue\n"); 450 : 0 : emergency_sync(); 451 : 0 : kernel_restart(NULL); 452 : : } 453 : : 454 : 0 : return ret; 455 : : } 456 : : 457 : 0 : static int __orderly_poweroff(bool force) 458 : : { 459 : : int ret; 460 : : 461 : 0 : ret = run_cmd(poweroff_cmd); 462 : : 463 : 0 : if (ret && force) { 464 : 0 : 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 : 0 : emergency_sync(); 472 : 0 : kernel_power_off(); 473 : : } 474 : : 475 : 0 : return ret; 476 : : } 477 : : 478 : : static bool poweroff_force; 479 : : 480 : 0 : static void poweroff_work_func(struct work_struct *work) 481 : : { 482 : 0 : __orderly_poweroff(poweroff_force); 483 : 0 : } 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 : 0 : void orderly_poweroff(bool force) 495 : : { 496 : 0 : if (force) /* do not override the pending "true" */ 497 : 0 : poweroff_force = true; 498 : : schedule_work(&poweroff_work); 499 : 0 : } 500 : : EXPORT_SYMBOL_GPL(orderly_poweroff); 501 : : 502 : 0 : static void reboot_work_func(struct work_struct *work) 503 : : { 504 : 0 : __orderly_reboot(); 505 : 0 : } 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 : 0 : void orderly_reboot(void) 516 : : { 517 : : schedule_work(&reboot_work); 518 : 0 : } 519 : : EXPORT_SYMBOL_GPL(orderly_reboot); 520 : : 521 : 0 : static int __init reboot_setup(char *str) 522 : : { 523 : : for (;;) { 524 : : enum reboot_mode *mode; 525 : : 526 : : /* 527 : : * Having anything passed on the command line via 528 : : * reboot= will cause us to disable DMI checking 529 : : * below. 530 : : */ 531 : 0 : reboot_default = 0; 532 : : 533 : 0 : if (!strncmp(str, "panic_", 6)) { 534 : : mode = &panic_reboot_mode; 535 : 0 : str += 6; 536 : : } else { 537 : : mode = &reboot_mode; 538 : : } 539 : : 540 : 0 : switch (*str) { 541 : : case 'w': 542 : 0 : *mode = REBOOT_WARM; 543 : 0 : break; 544 : : 545 : : case 'c': 546 : 0 : *mode = REBOOT_COLD; 547 : 0 : break; 548 : : 549 : : case 'h': 550 : 0 : *mode = REBOOT_HARD; 551 : 0 : break; 552 : : 553 : : case 's': 554 : : { 555 : : int rc; 556 : : 557 : 0 : if (isdigit(*(str+1))) { 558 : 0 : rc = kstrtoint(str+1, 0, &reboot_cpu); 559 : 0 : if (rc) 560 : 0 : return rc; 561 : 0 : } else if (str[1] == 'm' && str[2] == 'p' && 562 : 0 : isdigit(*(str+3))) { 563 : 0 : rc = kstrtoint(str+3, 0, &reboot_cpu); 564 : 0 : if (rc) 565 : 0 : return rc; 566 : : } else 567 : 0 : *mode = REBOOT_SOFT; 568 : : break; 569 : : } 570 : : case 'g': 571 : 0 : *mode = REBOOT_GPIO; 572 : 0 : break; 573 : : 574 : : case 'b': 575 : : case 'a': 576 : : case 'k': 577 : : case 't': 578 : : case 'e': 579 : : case 'p': 580 : 0 : reboot_type = *str; 581 : 0 : break; 582 : : 583 : : case 'f': 584 : 0 : reboot_force = 1; 585 : 0 : break; 586 : : } 587 : : 588 : 0 : str = strchr(str, ','); 589 : 0 : if (str) 590 : 0 : str++; 591 : : else 592 : : break; 593 : 0 : } 594 : : return 1; 595 : : } 596 : : __setup("reboot=", reboot_setup);