mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 12:03:54 +02:00
die_if_no_fixup() shouldn't use get_user() as it doesn't call set_fs() to indicate that it wants to probe a kernel address. Instead it should use probe_kernel_read(). This fixes the problem of gdb seeing SIGILL rather than SIGTRAP when hitting the KGDB special breakpoint upon SysRq+g being seen. The problem was that die_if_no_fixup() was failing to read the opcode of the instruction that caused the exception, and thus not fixing up the exception. This caused gdb to get a S04 response to the $? request in its remote protocol rather than S05 - which would then cause it to continue with $C04 rather than $c in an attempt to pass the signal onto the inferior process. The kernel, however, does not support $Cnn, and so objects by returning an E22 response, indicating an error. gdb does not expect this and prints: warning: Remote failure reply: E22 and then returns to the gdb command prompt unable to continue. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
||
|---|---|---|
| .. | ||
| boot | ||
| configs | ||
| include/asm | ||
| kernel | ||
| lib | ||
| mm | ||
| oprofile | ||
| proc-mn2ws0050 | ||
| proc-mn103e010 | ||
| unit-asb2303 | ||
| unit-asb2305 | ||
| unit-asb2364 | ||
| Kconfig | ||
| Kconfig.debug | ||
| Makefile | ||