linux/arch/microblaze/kernel
Jamie Garside c2219eda54 microblaze: Fix syscall error recovery for invalid syscall IDs
This patch fixes two bugs in the Microblaze syscall trap handler when an invalid
syscall ID is used.

First, the range check on line 351 only checks for syscall IDs greater than
__NR_syscalls. A negative syscall ID (either passed to `syscall()` or as returned
by `do_syscall_trace_enter()` on error) will still satisfy this test and cause
the Linux kernel to access an invalid memory location and cause a kernel oops.
This has been fixed by also checking for r12 < 0.

Secondly, the current error recovery at line 378 returns using the wrong register
(r15 instead of r14) and does not restore the previous stack state. This has been
fixed by invoking `ret_from_trap` on error, setting r3 to `-ENOSYS`, similar to
what would happen when calling a valid syscall.

Signed-off-by: Jamie Garside <jamie.garside@york.ac.uk>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
2015-03-04 15:12:27 +01:00
..
cpu microblaze: Add target architecture 2015-01-08 08:37:22 +01:00
.gitignore microblaze: Add .gitignore entries for auto-generated files 2013-02-12 11:24:44 +01:00
asm-offsets.c
dma.c microblaze: Fix mmap for cache coherent memory 2014-12-17 12:59:59 +01:00
early_printk.c early_printk: consolidate random copies of identical code 2013-04-29 18:28:13 -07:00
entry-nommu.S microblaze: fix handling of multiple pending signals 2013-02-03 18:16:02 -05:00
entry.S microblaze: Fix syscall error recovery for invalid syscall IDs 2015-03-04 15:12:27 +01:00
exceptions.c microblaze: Do not use module.h in files which are not modules 2013-02-12 11:24:45 +01:00
ftrace.c microblaze: ftrace: Add call to ftrace_graph_is_dead() in function graph code 2014-07-18 13:55:45 -04:00
head.S microblaze: Fix typo in head.S s/substract/subtract/ 2014-06-05 13:02:02 +02:00
heartbeat.c microblaze: Rename global function heartbeat() 2014-03-12 10:10:06 +01:00
hw_exception_handler.S microblaze: Fix compilation error for BS=0 2014-01-27 11:26:33 +01:00
intc.c microblaze: intc: Reformat output 2015-01-08 08:37:24 +01:00
irq.c microblaze: intc: Using irqchip 2013-09-03 11:24:48 +02:00
kgdb.c microblaze: Use unsigned type for "for" loop because of comparison-kgdb.c 2015-01-05 12:36:45 +01:00
Makefile microblaze: Remove unused prom_parse.c 2015-01-05 12:36:41 +01:00
mcount.S microblaze: ftrace: Remove check of obsolete variable function_trace_stop 2014-07-18 13:57:08 -04:00
microblaze_ksyms.c microblaze: Do not use module.h in files which are not modules 2013-02-12 11:24:45 +01:00
misc.S
module.c microblaze: Do not use module.h in files which are not modules 2013-02-12 11:24:45 +01:00
platform.c microblaze: Remove platform folder 2014-04-07 13:45:21 +02:00
process.c microblaze: Fix sparse warning because of missing cpu.h header 2014-04-07 13:45:17 +02:00
prom.c of/fdt: create common debugfs 2014-04-30 00:59:16 -05:00
ptrace.c microblaze: Use unsigned return type in do_syscall_trace_enter 2015-01-05 12:36:43 +01:00
reset.c microblaze: Remove unused prom header from reset.c 2015-01-05 12:36:42 +01:00
setup.c microblaze: remove check for CONFIG_XILINX_CONSOLE 2014-06-04 07:00:00 +02:00
signal.c all arches, signal: move restart_block to struct task_struct 2015-02-12 18:54:12 -08:00
stacktrace.c microblaze: Do not use module.h in files which are not modules 2013-02-12 11:24:45 +01:00
sys_microblaze.c microblaze: Fix bug with mmap2 syscall MB implementation 2013-11-08 15:20:44 +01:00
syscall_table.S microblaze: Wire-up execveat syscall 2015-01-05 12:36:40 +01:00
timer.c microblaze: include the new timecounter header. 2015-01-02 16:47:36 -05:00
traps.c dump_stack: consolidate dump_stack() implementations and unify their behaviors 2013-04-30 17:04:02 -07:00
unwind.c microblaze: Mark get_frame_size as static 2015-01-05 12:36:44 +01:00
vmlinux.lds.S microblaze: Add NOTES section to linker script 2014-01-27 11:25:01 +01:00