1 /* 2 * Linux Magic System Request Key Hacks 3 * 4 * (c) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz> 5 * based on ideas by Pavel Machek <pavel@atrey.karlin.mff.cuni.cz> 6 * 7 * (c) 2000 Crutcher Dunnavant <crutcher+kernel@datastacks.com> 8 * overhauled to use key registration 9 * based upon discusions in irc://irc.openprojects.net/#kernelnewbies 10 * 11 * Copyright (c) 2010 Dmitry Torokhov 12 * Input handler conversion 13 */ 14 15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 16 17 #include <linux/sched.h> 18 #include <linux/sched/rt.h> 19 #include <linux/interrupt.h> 20 #include <linux/mm.h> 21 #include <linux/fs.h> 22 #include <linux/mount.h> 23 #include <linux/kdev_t.h> 24 #include <linux/major.h> 25 #include <linux/reboot.h> 26 #include <linux/sysrq.h> 27 #include <linux/kbd_kern.h> 28 #include <linux/proc_fs.h> 29 #include <linux/nmi.h> 30 #include <linux/quotaops.h> 31 #include <linux/perf_event.h> 32 #include <linux/kernel.h> 33 #include <linux/module.h> 34 #include <linux/suspend.h> 35 #include <linux/writeback.h> 36 #include <linux/swap.h> 37 #include <linux/spinlock.h> 38 #include <linux/vt_kern.h> 39 #include <linux/workqueue.h> 40 #include <linux/hrtimer.h> 41 #include <linux/oom.h> 42 #include <linux/slab.h> 43 #include <linux/input.h> 44 #include <linux/uaccess.h> 45 #include <linux/moduleparam.h> 46 #include <linux/jiffies.h> 47 #include <linux/syscalls.h> 48 #include <linux/of.h> 49 #include <linux/rcupdate.h> 50 51 #include <asm/ptrace.h> 52 #include <asm/irq_regs.h> 53 54 /* Whether we react on sysrq keys or just ignore them */ 55 static int __read_mostly sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE; 56 static bool __read_mostly sysrq_always_enabled; 57 58 static bool sysrq_on(void) 59 { 60 return sysrq_enabled || sysrq_always_enabled; 61 } 62 63 /* 64 * A value of 1 means 'all', other nonzero values are an op mask: 65 */ 66 static bool sysrq_on_mask(int mask) 67 { 68 return sysrq_always_enabled || 69 sysrq_enabled == 1 || 70 (sysrq_enabled & mask); 71 } 72 73 static int __init sysrq_always_enabled_setup(char *str) 74 { 75 sysrq_always_enabled = true; 76 pr_info("sysrq always enabled.\n"); 77 78 return 1; 79 } 80 81 __setup("sysrq_always_enabled", sysrq_always_enabled_setup); 82 83 84 static void sysrq_handle_loglevel(int key) 85 { 86 int i; 87 88 i = key - '0'; 89 console_loglevel = CONSOLE_LOGLEVEL_DEFAULT; 90 pr_info("Loglevel set to %d\n", i); 91 console_loglevel = i; 92 } 93 static struct sysrq_key_op sysrq_loglevel_op = { 94 .handler = sysrq_handle_loglevel, 95 .help_msg = "loglevel(0-9)", 96 .action_msg = "Changing Loglevel", 97 .enable_mask = SYSRQ_ENABLE_LOG, 98 }; 99 100 #ifdef CONFIG_VT 101 static void sysrq_handle_SAK(int key) 102 { 103 struct work_struct *SAK_work = &vc_cons[fg_console].SAK_work; 104 schedule_work(SAK_work); 105 } 106 static struct sysrq_key_op sysrq_SAK_op = { 107 .handler = sysrq_handle_SAK, 108 .help_msg = "sak(k)", 109 .action_msg = "SAK", 110 .enable_mask = SYSRQ_ENABLE_KEYBOARD, 111 }; 112 #else 113 #define sysrq_SAK_op (*(struct sysrq_key_op *)NULL) 114 #endif 115 116 #ifdef CONFIG_VT 117 static void sysrq_handle_unraw(int key) 118 { 119 vt_reset_unicode(fg_console); 120 } 121 122 static struct sysrq_key_op sysrq_unraw_op = { 123 .handler = sysrq_handle_unraw, 124 .help_msg = "unraw(r)", 125 .action_msg = "Keyboard mode set to system default", 126 .enable_mask = SYSRQ_ENABLE_KEYBOARD, 127 }; 128 #else 129 #define sysrq_unraw_op (*(struct sysrq_key_op *)NULL) 130 #endif /* CONFIG_VT */ 131 132 static void sysrq_handle_crash(int key) 133 { 134 char *killer = NULL; 135 136 /* we need to release the RCU read lock here, 137 * otherwise we get an annoying 138 * 'BUG: sleeping function called from invalid context' 139 * complaint from the kernel before the panic. 140 */ 141 rcu_read_unlock(); 142 panic_on_oops = 1; /* force panic */ 143 wmb(); 144 *killer = 1; 145 } 146 static struct sysrq_key_op sysrq_crash_op = { 147 .handler = sysrq_handle_crash, 148 .help_msg = "crash(c)", 149 .action_msg = "Trigger a crash", 150 .enable_mask = SYSRQ_ENABLE_DUMP, 151 }; 152 153 static void sysrq_handle_reboot(int key) 154 { 155 lockdep_off(); 156 local_irq_enable(); 157 emergency_restart(); 158 } 159 static struct sysrq_key_op sysrq_reboot_op = { 160 .handler = sysrq_handle_reboot, 161 .help_msg = "reboot(b)", 162 .action_msg = "Resetting", 163 .enable_mask = SYSRQ_ENABLE_BOOT, 164 }; 165 166 static void sysrq_handle_sync(int key) 167 { 168 emergency_sync(); 169 } 170 static struct sysrq_key_op sysrq_sync_op = { 171 .handler = sysrq_handle_sync, 172 .help_msg = "sync(s)", 173 .action_msg = "Emergency Sync", 174 .enable_mask = SYSRQ_ENABLE_SYNC, 175 }; 176 177 static void sysrq_handle_show_timers(int key) 178 { 179 sysrq_timer_list_show(); 180 } 181 182 static struct sysrq_key_op sysrq_show_timers_op = { 183 .handler = sysrq_handle_show_timers, 184 .help_msg = "show-all-timers(q)", 185 .action_msg = "Show clockevent devices & pending hrtimers (no others)", 186 }; 187 188 static void sysrq_handle_mountro(int key) 189 { 190 emergency_remount(); 191 } 192 static struct sysrq_key_op sysrq_mountro_op = { 193 .handler = sysrq_handle_mountro, 194 .help_msg = "unmount(u)", 195 .action_msg = "Emergency Remount R/O", 196 .enable_mask = SYSRQ_ENABLE_REMOUNT, 197 }; 198 199 #ifdef CONFIG_LOCKDEP 200 static void sysrq_handle_showlocks(int key) 201 { 202 debug_show_all_locks(); 203 } 204 205 static struct sysrq_key_op sysrq_showlocks_op = { 206 .handler = sysrq_handle_showlocks, 207 .help_msg = "show-all-locks(d)", 208 .action_msg = "Show Locks Held", 209 }; 210 #else 211 #define sysrq_showlocks_op (*(struct sysrq_key_op *)NULL) 212 #endif 213 214 #ifdef CONFIG_SMP 215 static DEFINE_SPINLOCK(show_lock); 216 217 static void showacpu(void *dummy) 218 { 219 unsigned long flags; 220 221 /* Idle CPUs have no interesting backtrace. */ 222 if (idle_cpu(smp_processor_id())) 223 return; 224 225 spin_lock_irqsave(&show_lock, flags); 226 pr_info("CPU%d:\n", smp_processor_id()); 227 show_stack(NULL, NULL); 228 spin_unlock_irqrestore(&show_lock, flags); 229 } 230 231 static void sysrq_showregs_othercpus(struct work_struct *dummy) 232 { 233 smp_call_function(showacpu, NULL, 0); 234 } 235 236 static DECLARE_WORK(sysrq_showallcpus, sysrq_showregs_othercpus); 237 238 static void sysrq_handle_showallcpus(int key) 239 { 240 /* 241 * Fall back to the workqueue based printing if the 242 * backtrace printing did not succeed or the 243 * architecture has no support for it: 244 */ 245 if (!trigger_all_cpu_backtrace()) { 246 struct pt_regs *regs = get_irq_regs(); 247 248 if (regs) { 249 pr_info("CPU%d:\n", smp_processor_id()); 250 show_regs(regs); 251 } 252 schedule_work(&sysrq_showallcpus); 253 } 254 } 255 256 static struct sysrq_key_op sysrq_showallcpus_op = { 257 .handler = sysrq_handle_showallcpus, 258 .help_msg = "show-backtrace-all-active-cpus(l)", 259 .action_msg = "Show backtrace of all active CPUs", 260 .enable_mask = SYSRQ_ENABLE_DUMP, 261 }; 262 #endif 263 264 static void sysrq_handle_showregs(int key) 265 { 266 struct pt_regs *regs = get_irq_regs(); 267 if (regs) 268 show_regs(regs); 269 perf_event_print_debug(); 270 } 271 static struct sysrq_key_op sysrq_showregs_op = { 272 .handler = sysrq_handle_showregs, 273 .help_msg = "show-registers(p)", 274 .action_msg = "Show Regs", 275 .enable_mask = SYSRQ_ENABLE_DUMP, 276 }; 277 278 static void sysrq_handle_showstate(int key) 279 { 280 show_state(); 281 show_workqueue_state(); 282 } 283 static struct sysrq_key_op sysrq_showstate_op = { 284 .handler = sysrq_handle_showstate, 285 .help_msg = "show-task-states(t)", 286 .action_msg = "Show State", 287 .enable_mask = SYSRQ_ENABLE_DUMP, 288 }; 289 290 static void sysrq_handle_showstate_blocked(int key) 291 { 292 show_state_filter(TASK_UNINTERRUPTIBLE); 293 } 294 static struct sysrq_key_op sysrq_showstate_blocked_op = { 295 .handler = sysrq_handle_showstate_blocked, 296 .help_msg = "show-blocked-tasks(w)", 297 .action_msg = "Show Blocked State", 298 .enable_mask = SYSRQ_ENABLE_DUMP, 299 }; 300 301 #ifdef CONFIG_TRACING 302 #include <linux/ftrace.h> 303 304 static void sysrq_ftrace_dump(int key) 305 { 306 ftrace_dump(DUMP_ALL); 307 } 308 static struct sysrq_key_op sysrq_ftrace_dump_op = { 309 .handler = sysrq_ftrace_dump, 310 .help_msg = "dump-ftrace-buffer(z)", 311 .action_msg = "Dump ftrace buffer", 312 .enable_mask = SYSRQ_ENABLE_DUMP, 313 }; 314 #else 315 #define sysrq_ftrace_dump_op (*(struct sysrq_key_op *)NULL) 316 #endif 317 318 static void sysrq_handle_showmem(int key) 319 { 320 show_mem(0); 321 } 322 static struct sysrq_key_op sysrq_showmem_op = { 323 .handler = sysrq_handle_showmem, 324 .help_msg = "show-memory-usage(m)", 325 .action_msg = "Show Memory", 326 .enable_mask = SYSRQ_ENABLE_DUMP, 327 }; 328 329 /* 330 * Signal sysrq helper function. Sends a signal to all user processes. 331 */ 332 static void send_sig_all(int sig) 333 { 334 struct task_struct *p; 335 336 read_lock(&tasklist_lock); 337 for_each_process(p) { 338 if (p->flags & PF_KTHREAD) 339 continue; 340 if (is_global_init(p)) 341 continue; 342 343 do_send_sig_info(sig, SEND_SIG_FORCED, p, true); 344 } 345 read_unlock(&tasklist_lock); 346 } 347 348 static void sysrq_handle_term(int key) 349 { 350 send_sig_all(SIGTERM); 351 console_loglevel = CONSOLE_LOGLEVEL_DEBUG; 352 } 353 static struct sysrq_key_op sysrq_term_op = { 354 .handler = sysrq_handle_term, 355 .help_msg = "terminate-all-tasks(e)", 356 .action_msg = "Terminate All Tasks", 357 .enable_mask = SYSRQ_ENABLE_SIGNAL, 358 }; 359 360 static void moom_callback(struct work_struct *ignored) 361 { 362 const gfp_t gfp_mask = GFP_KERNEL; 363 struct oom_control oc = { 364 .zonelist = node_zonelist(first_memory_node, gfp_mask), 365 .nodemask = NULL, 366 .memcg = NULL, 367 .gfp_mask = gfp_mask, 368 .order = -1, 369 }; 370 371 mutex_lock(&oom_lock); 372 if (!out_of_memory(&oc)) 373 pr_info("OOM request ignored because killer is disabled\n"); 374 mutex_unlock(&oom_lock); 375 } 376 377 static DECLARE_WORK(moom_work, moom_callback); 378 379 static void sysrq_handle_moom(int key) 380 { 381 schedule_work(&moom_work); 382 } 383 static struct sysrq_key_op sysrq_moom_op = { 384 .handler = sysrq_handle_moom, 385 .help_msg = "memory-full-oom-kill(f)", 386 .action_msg = "Manual OOM execution", 387 .enable_mask = SYSRQ_ENABLE_SIGNAL, 388 }; 389 390 #ifdef CONFIG_BLOCK 391 static void sysrq_handle_thaw(int key) 392 { 393 emergency_thaw_all(); 394 } 395 static struct sysrq_key_op sysrq_thaw_op = { 396 .handler = sysrq_handle_thaw, 397 .help_msg = "thaw-filesystems(j)", 398 .action_msg = "Emergency Thaw of all frozen filesystems", 399 .enable_mask = SYSRQ_ENABLE_SIGNAL, 400 }; 401 #endif 402 403 static void sysrq_handle_kill(int key) 404 { 405 send_sig_all(SIGKILL); 406 console_loglevel = CONSOLE_LOGLEVEL_DEBUG; 407 } 408 static struct sysrq_key_op sysrq_kill_op = { 409 .handler = sysrq_handle_kill, 410 .help_msg = "kill-all-tasks(i)", 411 .action_msg = "Kill All Tasks", 412 .enable_mask = SYSRQ_ENABLE_SIGNAL, 413 }; 414 415 static void sysrq_handle_unrt(int key) 416 { 417 normalize_rt_tasks(); 418 } 419 static struct sysrq_key_op sysrq_unrt_op = { 420 .handler = sysrq_handle_unrt, 421 .help_msg = "nice-all-RT-tasks(n)", 422 .action_msg = "Nice All RT Tasks", 423 .enable_mask = SYSRQ_ENABLE_RTNICE, 424 }; 425 426 /* Key Operations table and lock */ 427 static DEFINE_SPINLOCK(sysrq_key_table_lock); 428 429 static struct sysrq_key_op *sysrq_key_table[36] = { 430 &sysrq_loglevel_op, /* 0 */ 431 &sysrq_loglevel_op, /* 1 */ 432 &sysrq_loglevel_op, /* 2 */ 433 &sysrq_loglevel_op, /* 3 */ 434 &sysrq_loglevel_op, /* 4 */ 435 &sysrq_loglevel_op, /* 5 */ 436 &sysrq_loglevel_op, /* 6 */ 437 &sysrq_loglevel_op, /* 7 */ 438 &sysrq_loglevel_op, /* 8 */ 439 &sysrq_loglevel_op, /* 9 */ 440 441 /* 442 * a: Don't use for system provided sysrqs, it is handled specially on 443 * sparc and will never arrive. 444 */ 445 NULL, /* a */ 446 &sysrq_reboot_op, /* b */ 447 &sysrq_crash_op, /* c & ibm_emac driver debug */ 448 &sysrq_showlocks_op, /* d */ 449 &sysrq_term_op, /* e */ 450 &sysrq_moom_op, /* f */ 451 /* g: May be registered for the kernel debugger */ 452 NULL, /* g */ 453 NULL, /* h - reserved for help */ 454 &sysrq_kill_op, /* i */ 455 #ifdef CONFIG_BLOCK 456 &sysrq_thaw_op, /* j */ 457 #else 458 NULL, /* j */ 459 #endif 460 &sysrq_SAK_op, /* k */ 461 #ifdef CONFIG_SMP 462 &sysrq_showallcpus_op, /* l */ 463 #else 464 NULL, /* l */ 465 #endif 466 &sysrq_showmem_op, /* m */ 467 &sysrq_unrt_op, /* n */ 468 /* o: This will often be registered as 'Off' at init time */ 469 NULL, /* o */ 470 &sysrq_showregs_op, /* p */ 471 &sysrq_show_timers_op, /* q */ 472 &sysrq_unraw_op, /* r */ 473 &sysrq_sync_op, /* s */ 474 &sysrq_showstate_op, /* t */ 475 &sysrq_mountro_op, /* u */ 476 /* v: May be registered for frame buffer console restore */ 477 NULL, /* v */ 478 &sysrq_showstate_blocked_op, /* w */ 479 /* x: May be registered on mips for TLB dump */ 480 /* x: May be registered on ppc/powerpc for xmon */ 481 /* x: May be registered on sparc64 for global PMU dump */ 482 NULL, /* x */ 483 /* y: May be registered on sparc64 for global register dump */ 484 NULL, /* y */ 485 &sysrq_ftrace_dump_op, /* z */ 486 }; 487 488 /* key2index calculation, -1 on invalid index */ 489 static int sysrq_key_table_key2index(int key) 490 { 491 int retval; 492 493 if ((key >= '0') && (key <= '9')) 494 retval = key - '0'; 495 else if ((key >= 'a') && (key <= 'z')) 496 retval = key + 10 - 'a'; 497 else 498 retval = -1; 499 return retval; 500 } 501 502 /* 503 * get and put functions for the table, exposed to modules. 504 */ 505 struct sysrq_key_op *__sysrq_get_key_op(int key) 506 { 507 struct sysrq_key_op *op_p = NULL; 508 int i; 509 510 i = sysrq_key_table_key2index(key); 511 if (i != -1) 512 op_p = sysrq_key_table[i]; 513 514 return op_p; 515 } 516 517 static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p) 518 { 519 int i = sysrq_key_table_key2index(key); 520 521 if (i != -1) 522 sysrq_key_table[i] = op_p; 523 } 524 525 void __handle_sysrq(int key, bool check_mask) 526 { 527 struct sysrq_key_op *op_p; 528 int orig_log_level; 529 int i; 530 531 rcu_sysrq_start(); 532 rcu_read_lock(); 533 /* 534 * Raise the apparent loglevel to maximum so that the sysrq header 535 * is shown to provide the user with positive feedback. We do not 536 * simply emit this at KERN_EMERG as that would change message 537 * routing in the consumers of /proc/kmsg. 538 */ 539 orig_log_level = console_loglevel; 540 console_loglevel = CONSOLE_LOGLEVEL_DEFAULT; 541 pr_info("SysRq : "); 542 543 op_p = __sysrq_get_key_op(key); 544 if (op_p) { 545 /* 546 * Should we check for enabled operations (/proc/sysrq-trigger 547 * should not) and is the invoked operation enabled? 548 */ 549 if (!check_mask || sysrq_on_mask(op_p->enable_mask)) { 550 pr_cont("%s\n", op_p->action_msg); 551 console_loglevel = orig_log_level; 552 op_p->handler(key); 553 } else { 554 pr_cont("This sysrq operation is disabled.\n"); 555 } 556 } else { 557 pr_cont("HELP : "); 558 /* Only print the help msg once per handler */ 559 for (i = 0; i < ARRAY_SIZE(sysrq_key_table); i++) { 560 if (sysrq_key_table[i]) { 561 int j; 562 563 for (j = 0; sysrq_key_table[i] != 564 sysrq_key_table[j]; j++) 565 ; 566 if (j != i) 567 continue; 568 pr_cont("%s ", sysrq_key_table[i]->help_msg); 569 } 570 } 571 pr_cont("\n"); 572 console_loglevel = orig_log_level; 573 } 574 rcu_read_unlock(); 575 rcu_sysrq_end(); 576 } 577 578 void handle_sysrq(int key) 579 { 580 if (sysrq_on()) 581 __handle_sysrq(key, true); 582 } 583 EXPORT_SYMBOL(handle_sysrq); 584 585 #ifdef CONFIG_INPUT 586 static int sysrq_reset_downtime_ms; 587 588 /* Simple translation table for the SysRq keys */ 589 static const unsigned char sysrq_xlate[KEY_CNT] = 590 "\000\0331234567890-=\177\t" /* 0x00 - 0x0f */ 591 "qwertyuiop[]\r\000as" /* 0x10 - 0x1f */ 592 "dfghjkl;'`\000\\zxcv" /* 0x20 - 0x2f */ 593 "bnm,./\000*\000 \000\201\202\203\204\205" /* 0x30 - 0x3f */ 594 "\206\207\210\211\212\000\000789-456+1" /* 0x40 - 0x4f */ 595 "230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000" /* 0x50 - 0x5f */ 596 "\r\000/"; /* 0x60 - 0x6f */ 597 598 struct sysrq_state { 599 struct input_handle handle; 600 struct work_struct reinject_work; 601 unsigned long key_down[BITS_TO_LONGS(KEY_CNT)]; 602 unsigned int alt; 603 unsigned int alt_use; 604 bool active; 605 bool need_reinject; 606 bool reinjecting; 607 608 /* reset sequence handling */ 609 bool reset_canceled; 610 bool reset_requested; 611 unsigned long reset_keybit[BITS_TO_LONGS(KEY_CNT)]; 612 int reset_seq_len; 613 int reset_seq_cnt; 614 int reset_seq_version; 615 struct timer_list keyreset_timer; 616 }; 617 618 #define SYSRQ_KEY_RESET_MAX 20 /* Should be plenty */ 619 static unsigned short sysrq_reset_seq[SYSRQ_KEY_RESET_MAX]; 620 static unsigned int sysrq_reset_seq_len; 621 static unsigned int sysrq_reset_seq_version = 1; 622 623 static void sysrq_parse_reset_sequence(struct sysrq_state *state) 624 { 625 int i; 626 unsigned short key; 627 628 state->reset_seq_cnt = 0; 629 630 for (i = 0; i < sysrq_reset_seq_len; i++) { 631 key = sysrq_reset_seq[i]; 632 633 if (key == KEY_RESERVED || key > KEY_MAX) 634 break; 635 636 __set_bit(key, state->reset_keybit); 637 state->reset_seq_len++; 638 639 if (test_bit(key, state->key_down)) 640 state->reset_seq_cnt++; 641 } 642 643 /* Disable reset until old keys are not released */ 644 state->reset_canceled = state->reset_seq_cnt != 0; 645 646 state->reset_seq_version = sysrq_reset_seq_version; 647 } 648 649 static void sysrq_do_reset(unsigned long _state) 650 { 651 struct sysrq_state *state = (struct sysrq_state *) _state; 652 653 state->reset_requested = true; 654 655 sys_sync(); 656 kernel_restart(NULL); 657 } 658 659 static void sysrq_handle_reset_request(struct sysrq_state *state) 660 { 661 if (state->reset_requested) 662 __handle_sysrq(sysrq_xlate[KEY_B], false); 663 664 if (sysrq_reset_downtime_ms) 665 mod_timer(&state->keyreset_timer, 666 jiffies + msecs_to_jiffies(sysrq_reset_downtime_ms)); 667 else 668 sysrq_do_reset((unsigned long)state); 669 } 670 671 static void sysrq_detect_reset_sequence(struct sysrq_state *state, 672 unsigned int code, int value) 673 { 674 if (!test_bit(code, state->reset_keybit)) { 675 /* 676 * Pressing any key _not_ in reset sequence cancels 677 * the reset sequence. Also cancelling the timer in 678 * case additional keys were pressed after a reset 679 * has been requested. 680 */ 681 if (value && state->reset_seq_cnt) { 682 state->reset_canceled = true; 683 del_timer(&state->keyreset_timer); 684 } 685 } else if (value == 0) { 686 /* 687 * Key release - all keys in the reset sequence need 688 * to be pressed and held for the reset timeout 689 * to hold. 690 */ 691 del_timer(&state->keyreset_timer); 692 693 if (--state->reset_seq_cnt == 0) 694 state->reset_canceled = false; 695 } else if (value == 1) { 696 /* key press, not autorepeat */ 697 if (++state->reset_seq_cnt == state->reset_seq_len && 698 !state->reset_canceled) { 699 sysrq_handle_reset_request(state); 700 } 701 } 702 } 703 704 #ifdef CONFIG_OF 705 static void sysrq_of_get_keyreset_config(void) 706 { 707 u32 key; 708 struct device_node *np; 709 struct property *prop; 710 const __be32 *p; 711 712 np = of_find_node_by_path("/chosen/linux,sysrq-reset-seq"); 713 if (!np) { 714 pr_debug("No sysrq node found"); 715 return; 716 } 717 718 /* Reset in case a __weak definition was present */ 719 sysrq_reset_seq_len = 0; 720 721 of_property_for_each_u32(np, "keyset", prop, p, key) { 722 if (key == KEY_RESERVED || key > KEY_MAX || 723 sysrq_reset_seq_len == SYSRQ_KEY_RESET_MAX) 724 break; 725 726 sysrq_reset_seq[sysrq_reset_seq_len++] = (unsigned short)key; 727 } 728 729 /* Get reset timeout if any. */ 730 of_property_read_u32(np, "timeout-ms", &sysrq_reset_downtime_ms); 731 } 732 #else 733 static void sysrq_of_get_keyreset_config(void) 734 { 735 } 736 #endif 737 738 static void sysrq_reinject_alt_sysrq(struct work_struct *work) 739 { 740 struct sysrq_state *sysrq = 741 container_of(work, struct sysrq_state, reinject_work); 742 struct input_handle *handle = &sysrq->handle; 743 unsigned int alt_code = sysrq->alt_use; 744 745 if (sysrq->need_reinject) { 746 /* we do not want the assignment to be reordered */ 747 sysrq->reinjecting = true; 748 mb(); 749 750 /* Simulate press and release of Alt + SysRq */ 751 input_inject_event(handle, EV_KEY, alt_code, 1); 752 input_inject_event(handle, EV_KEY, KEY_SYSRQ, 1); 753 input_inject_event(handle, EV_SYN, SYN_REPORT, 1); 754 755 input_inject_event(handle, EV_KEY, KEY_SYSRQ, 0); 756 input_inject_event(handle, EV_KEY, alt_code, 0); 757 input_inject_event(handle, EV_SYN, SYN_REPORT, 1); 758 759 mb(); 760 sysrq->reinjecting = false; 761 } 762 } 763 764 static bool sysrq_handle_keypress(struct sysrq_state *sysrq, 765 unsigned int code, int value) 766 { 767 bool was_active = sysrq->active; 768 bool suppress; 769 770 switch (code) { 771 772 case KEY_LEFTALT: 773 case KEY_RIGHTALT: 774 if (!value) { 775 /* One of ALTs is being released */ 776 if (sysrq->active && code == sysrq->alt_use) 777 sysrq->active = false; 778 779 sysrq->alt = KEY_RESERVED; 780 781 } else if (value != 2) { 782 sysrq->alt = code; 783 sysrq->need_reinject = false; 784 } 785 break; 786 787 case KEY_SYSRQ: 788 if (value == 1 && sysrq->alt != KEY_RESERVED) { 789 sysrq->active = true; 790 sysrq->alt_use = sysrq->alt; 791 /* 792 * If nothing else will be pressed we'll need 793 * to re-inject Alt-SysRq keysroke. 794 */ 795 sysrq->need_reinject = true; 796 } 797 798 /* 799 * Pretend that sysrq was never pressed at all. This 800 * is needed to properly handle KGDB which will try 801 * to release all keys after exiting debugger. If we 802 * do not clear key bit it KGDB will end up sending 803 * release events for Alt and SysRq, potentially 804 * triggering print screen function. 805 */ 806 if (sysrq->active) 807 clear_bit(KEY_SYSRQ, sysrq->handle.dev->key); 808 809 break; 810 811 default: 812 if (sysrq->active && value && value != 2) { 813 sysrq->need_reinject = false; 814 __handle_sysrq(sysrq_xlate[code], true); 815 } 816 break; 817 } 818 819 suppress = sysrq->active; 820 821 if (!sysrq->active) { 822 823 /* 824 * See if reset sequence has changed since the last time. 825 */ 826 if (sysrq->reset_seq_version != sysrq_reset_seq_version) 827 sysrq_parse_reset_sequence(sysrq); 828 829 /* 830 * If we are not suppressing key presses keep track of 831 * keyboard state so we can release keys that have been 832 * pressed before entering SysRq mode. 833 */ 834 if (value) 835 set_bit(code, sysrq->key_down); 836 else 837 clear_bit(code, sysrq->key_down); 838 839 if (was_active) 840 schedule_work(&sysrq->reinject_work); 841 842 /* Check for reset sequence */ 843 sysrq_detect_reset_sequence(sysrq, code, value); 844 845 } else if (value == 0 && test_and_clear_bit(code, sysrq->key_down)) { 846 /* 847 * Pass on release events for keys that was pressed before 848 * entering SysRq mode. 849 */ 850 suppress = false; 851 } 852 853 return suppress; 854 } 855 856 static bool sysrq_filter(struct input_handle *handle, 857 unsigned int type, unsigned int code, int value) 858 { 859 struct sysrq_state *sysrq = handle->private; 860 bool suppress; 861 862 /* 863 * Do not filter anything if we are in the process of re-injecting 864 * Alt+SysRq combination. 865 */ 866 if (sysrq->reinjecting) 867 return false; 868 869 switch (type) { 870 871 case EV_SYN: 872 suppress = false; 873 break; 874 875 case EV_KEY: 876 suppress = sysrq_handle_keypress(sysrq, code, value); 877 break; 878 879 default: 880 suppress = sysrq->active; 881 break; 882 } 883 884 return suppress; 885 } 886 887 static int sysrq_connect(struct input_handler *handler, 888 struct input_dev *dev, 889 const struct input_device_id *id) 890 { 891 struct sysrq_state *sysrq; 892 int error; 893 894 sysrq = kzalloc(sizeof(struct sysrq_state), GFP_KERNEL); 895 if (!sysrq) 896 return -ENOMEM; 897 898 INIT_WORK(&sysrq->reinject_work, sysrq_reinject_alt_sysrq); 899 900 sysrq->handle.dev = dev; 901 sysrq->handle.handler = handler; 902 sysrq->handle.name = "sysrq"; 903 sysrq->handle.private = sysrq; 904 setup_timer(&sysrq->keyreset_timer, 905 sysrq_do_reset, (unsigned long)sysrq); 906 907 error = input_register_handle(&sysrq->handle); 908 if (error) { 909 pr_err("Failed to register input sysrq handler, error %d\n", 910 error); 911 goto err_free; 912 } 913 914 error = input_open_device(&sysrq->handle); 915 if (error) { 916 pr_err("Failed to open input device, error %d\n", error); 917 goto err_unregister; 918 } 919 920 return 0; 921 922 err_unregister: 923 input_unregister_handle(&sysrq->handle); 924 err_free: 925 kfree(sysrq); 926 return error; 927 } 928 929 static void sysrq_disconnect(struct input_handle *handle) 930 { 931 struct sysrq_state *sysrq = handle->private; 932 933 input_close_device(handle); 934 cancel_work_sync(&sysrq->reinject_work); 935 del_timer_sync(&sysrq->keyreset_timer); 936 input_unregister_handle(handle); 937 kfree(sysrq); 938 } 939 940 /* 941 * We are matching on KEY_LEFTALT instead of KEY_SYSRQ because not all 942 * keyboards have SysRq key predefined and so user may add it to keymap 943 * later, but we expect all such keyboards to have left alt. 944 */ 945 static const struct input_device_id sysrq_ids[] = { 946 { 947 .flags = INPUT_DEVICE_ID_MATCH_EVBIT | 948 INPUT_DEVICE_ID_MATCH_KEYBIT, 949 .evbit = { BIT_MASK(EV_KEY) }, 950 .keybit = { BIT_MASK(KEY_LEFTALT) }, 951 }, 952 { }, 953 }; 954 955 static struct input_handler sysrq_handler = { 956 .filter = sysrq_filter, 957 .connect = sysrq_connect, 958 .disconnect = sysrq_disconnect, 959 .name = "sysrq", 960 .id_table = sysrq_ids, 961 }; 962 963 static bool sysrq_handler_registered; 964 965 static inline void sysrq_register_handler(void) 966 { 967 int error; 968 969 sysrq_of_get_keyreset_config(); 970 971 error = input_register_handler(&sysrq_handler); 972 if (error) 973 pr_err("Failed to register input handler, error %d", error); 974 else 975 sysrq_handler_registered = true; 976 } 977 978 static inline void sysrq_unregister_handler(void) 979 { 980 if (sysrq_handler_registered) { 981 input_unregister_handler(&sysrq_handler); 982 sysrq_handler_registered = false; 983 } 984 } 985 986 static int sysrq_reset_seq_param_set(const char *buffer, 987 const struct kernel_param *kp) 988 { 989 unsigned long val; 990 int error; 991 992 error = kstrtoul(buffer, 0, &val); 993 if (error < 0) 994 return error; 995 996 if (val > KEY_MAX) 997 return -EINVAL; 998 999 *((unsigned short *)kp->arg) = val; 1000 sysrq_reset_seq_version++; 1001 1002 return 0; 1003 } 1004 1005 static const struct kernel_param_ops param_ops_sysrq_reset_seq = { 1006 .get = param_get_ushort, 1007 .set = sysrq_reset_seq_param_set, 1008 }; 1009 1010 #define param_check_sysrq_reset_seq(name, p) \ 1011 __param_check(name, p, unsigned short) 1012 1013 /* 1014 * not really modular, but the easiest way to keep compat with existing 1015 * bootargs behaviour is to continue using module_param here. 1016 */ 1017 module_param_array_named(reset_seq, sysrq_reset_seq, sysrq_reset_seq, 1018 &sysrq_reset_seq_len, 0644); 1019 1020 module_param_named(sysrq_downtime_ms, sysrq_reset_downtime_ms, int, 0644); 1021 1022 #else 1023 1024 static inline void sysrq_register_handler(void) 1025 { 1026 } 1027 1028 static inline void sysrq_unregister_handler(void) 1029 { 1030 } 1031 1032 #endif /* CONFIG_INPUT */ 1033 1034 int sysrq_toggle_support(int enable_mask) 1035 { 1036 bool was_enabled = sysrq_on(); 1037 1038 sysrq_enabled = enable_mask; 1039 1040 if (was_enabled != sysrq_on()) { 1041 if (sysrq_on()) 1042 sysrq_register_handler(); 1043 else 1044 sysrq_unregister_handler(); 1045 } 1046 1047 return 0; 1048 } 1049 1050 static int __sysrq_swap_key_ops(int key, struct sysrq_key_op *insert_op_p, 1051 struct sysrq_key_op *remove_op_p) 1052 { 1053 int retval; 1054 1055 spin_lock(&sysrq_key_table_lock); 1056 if (__sysrq_get_key_op(key) == remove_op_p) { 1057 __sysrq_put_key_op(key, insert_op_p); 1058 retval = 0; 1059 } else { 1060 retval = -1; 1061 } 1062 spin_unlock(&sysrq_key_table_lock); 1063 1064 /* 1065 * A concurrent __handle_sysrq either got the old op or the new op. 1066 * Wait for it to go away before returning, so the code for an old 1067 * op is not freed (eg. on module unload) while it is in use. 1068 */ 1069 synchronize_rcu(); 1070 1071 return retval; 1072 } 1073 1074 int register_sysrq_key(int key, struct sysrq_key_op *op_p) 1075 { 1076 return __sysrq_swap_key_ops(key, op_p, NULL); 1077 } 1078 EXPORT_SYMBOL(register_sysrq_key); 1079 1080 int unregister_sysrq_key(int key, struct sysrq_key_op *op_p) 1081 { 1082 return __sysrq_swap_key_ops(key, NULL, op_p); 1083 } 1084 EXPORT_SYMBOL(unregister_sysrq_key); 1085 1086 #ifdef CONFIG_PROC_FS 1087 /* 1088 * writing 'C' to /proc/sysrq-trigger is like sysrq-C 1089 */ 1090 static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, 1091 size_t count, loff_t *ppos) 1092 { 1093 if (count) { 1094 char c; 1095 1096 if (get_user(c, buf)) 1097 return -EFAULT; 1098 __handle_sysrq(c, false); 1099 } 1100 1101 return count; 1102 } 1103 1104 static const struct file_operations proc_sysrq_trigger_operations = { 1105 .write = write_sysrq_trigger, 1106 .llseek = noop_llseek, 1107 }; 1108 1109 static void sysrq_init_procfs(void) 1110 { 1111 if (!proc_create("sysrq-trigger", S_IWUSR, NULL, 1112 &proc_sysrq_trigger_operations)) 1113 pr_err("Failed to register proc interface\n"); 1114 } 1115 1116 #else 1117 1118 static inline void sysrq_init_procfs(void) 1119 { 1120 } 1121 1122 #endif /* CONFIG_PROC_FS */ 1123 1124 static int __init sysrq_init(void) 1125 { 1126 sysrq_init_procfs(); 1127 1128 if (sysrq_on()) 1129 sysrq_register_handler(); 1130 1131 return 0; 1132 } 1133 device_initcall(sysrq_init); 1134