diff options
author | Bodo Stroesser <bstroesser@fujitsu-siemens.com> | 2005-09-03 18:57:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-05 03:06:24 -0400 |
commit | 07bf731e4b95d7c9ea9dbacd1fc4a041120dfffb (patch) | |
tree | 25ae7f2000421d45e484abac0b7252809476c0d0 /arch/um/kernel/skas/include | |
parent | 8b51304ed3184826fb262c1e9d3e58b0b00fd083 (diff) |
[PATCH] uml: skas0 stubs now check system call return values
Change syscall-stub's data to include a "expected retval".
Stub now checks syscalls retval and aborts execution of syscall list, if
retval != expected retval.
run_syscall_stub prints the data of the failed syscall, using the data pointer
and retval written by the stub to the beginning of the stack.
one_syscall_stub is removed, to simplify code, because only some instructions
are saved by one_syscall_stub, no host-syscall.
Using the stub with additional data (modify_ldt via stub)
is prepared also.
Signed-off-by: Bodo Stroesser <bstroesser@fujitsu-siemens.com>
Signed-off-by: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um/kernel/skas/include')
-rw-r--r-- | arch/um/kernel/skas/include/skas.h | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/arch/um/kernel/skas/include/skas.h b/arch/um/kernel/skas/include/skas.h index 03c9d99e15e4..060934740f9f 100644 --- a/arch/um/kernel/skas/include/skas.h +++ b/arch/um/kernel/skas/include/skas.h | |||
@@ -24,14 +24,14 @@ extern void new_thread_proc(void *stack, void (*handler)(int sig)); | |||
24 | extern void remove_sigstack(void); | 24 | extern void remove_sigstack(void); |
25 | extern void new_thread_handler(int sig); | 25 | extern void new_thread_handler(int sig); |
26 | extern void handle_syscall(union uml_pt_regs *regs); | 26 | extern void handle_syscall(union uml_pt_regs *regs); |
27 | extern void *map(struct mm_id * mm_idp, unsigned long virt, | 27 | extern int map(struct mm_id * mm_idp, unsigned long virt, |
28 | unsigned long len, int r, int w, int x, int phys_fd, | 28 | unsigned long len, int r, int w, int x, int phys_fd, |
29 | unsigned long long offset, int done, void *data); | 29 | unsigned long long offset, int done, void **data); |
30 | extern void *unmap(struct mm_id * mm_idp, void *addr, | 30 | extern int unmap(struct mm_id * mm_idp, void *addr, unsigned long len, |
31 | unsigned long len, int done, void *data); | 31 | int done, void **data); |
32 | extern void *protect(struct mm_id * mm_idp, unsigned long addr, | 32 | extern int protect(struct mm_id * mm_idp, unsigned long addr, |
33 | unsigned long len, int r, int w, int x, int done, | 33 | unsigned long len, int r, int w, int x, int done, |
34 | void *data); | 34 | void **data); |
35 | extern void user_signal(int sig, union uml_pt_regs *regs, int pid); | 35 | extern void user_signal(int sig, union uml_pt_regs *regs, int pid); |
36 | extern int new_mm(int from, unsigned long stack); | 36 | extern int new_mm(int from, unsigned long stack); |
37 | extern int start_userspace(unsigned long stub_stack); | 37 | extern int start_userspace(unsigned long stub_stack); |
@@ -39,16 +39,11 @@ extern int copy_context_skas0(unsigned long stack, int pid); | |||
39 | extern void get_skas_faultinfo(int pid, struct faultinfo * fi); | 39 | extern void get_skas_faultinfo(int pid, struct faultinfo * fi); |
40 | extern long execute_syscall_skas(void *r); | 40 | extern long execute_syscall_skas(void *r); |
41 | extern unsigned long current_stub_stack(void); | 41 | extern unsigned long current_stub_stack(void); |
42 | extern long run_syscall_stub(struct mm_id * mm_idp, | ||
43 | int syscall, unsigned long *args, long expected, | ||
44 | void **addr, int done); | ||
45 | extern long syscall_stub_data(struct mm_id * mm_idp, | ||
46 | unsigned long *data, int data_count, | ||
47 | void **addr, void **stub_addr); | ||
42 | 48 | ||
43 | #endif | 49 | #endif |
44 | |||
45 | /* | ||
46 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
47 | * Emacs will notice this stuff at the end of the file and automatically | ||
48 | * adjust the settings for this buffer only. This must remain at the end | ||
49 | * of the file. | ||
50 | * --------------------------------------------------------------------------- | ||
51 | * Local variables: | ||
52 | * c-file-style: "linux" | ||
53 | * End: | ||
54 | */ | ||