arch/um/kernel/process.c | 2 +- arch/um/kernel/skas/process.c | 26 +++++++++++++------------- arch/um/kernel/skas/syscall_kern.c | 3 ++- arch/um/kernel/trap_user.c | 2 +- arch/um/kernel/tt/syscall_kern.c | 3 ++- arch/um/kernel/tt/uaccess_user.c | 2 +- arch/um/kernel/uaccess_user.c | 2 +- arch/um/link.ld.in | 1 - 8 files changed, 21 insertions(+), 20 deletions(-) Index: linux-2.4.20/arch/um/link.ld.in =================================================================== --- linux-2.4.20.orig/arch/um/link.ld.in 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/link.ld.in 2003-10-25 00:36:02.000000000 +0400 @@ -6,7 +6,6 @@ { . = START() + SIZEOF_HEADERS; - . = ALIGN(4096); __binary_start = .; ifdef(`MODE_TT', ` .thread_private : { Index: linux-2.4.20/arch/um/kernel/process.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/process.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/process.c 2003-10-25 00:36:02.000000000 +0400 @@ -232,7 +232,7 @@ int n; *jmp_ptr = &buf; - n = setjmp(buf); + n = sigsetjmp(buf, 1); if(n != 0) return(n); (*fn)(arg); Index: linux-2.4.20/arch/um/kernel/skas/process.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/skas/process.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/skas/process.c 2003-10-25 00:36:02.000000000 +0400 @@ -59,11 +59,11 @@ int err, syscall_nr, status; syscall_nr = PT_SYSCALL_NR(regs->skas.regs); + UPT_SYSCALL_NR(regs) = syscall_nr; if(syscall_nr < 1){ relay_signal(SIGTRAP, regs); return; } - UPT_SYSCALL_NR(regs) = syscall_nr; err = ptrace(PTRACE_POKEUSER, pid, PT_SYSCALL_NR_OFFSET, __NR_getpid); if(err < 0) @@ -189,7 +189,7 @@ *switch_buf_ptr = &switch_buf; *fork_buf_ptr = &fork_buf; - if(setjmp(fork_buf) == 0) + if(sigsetjmp(fork_buf, 1) == 0) new_thread_proc(stack, handler); remove_sigstack(); @@ -201,8 +201,8 @@ *switch_buf = &buf; fork_buf = fb; - if(setjmp(buf) == 0) - longjmp(*fork_buf, 1); + if(sigsetjmp(buf, 1) == 0) + siglongjmp(*fork_buf, 1); } static int move_registers(int int_op, int fp_op, union uml_pt_regs *regs, @@ -260,8 +260,8 @@ jmp_buf my_buf, **me_ptr = me, *next_buf = next; *me_ptr = &my_buf; - if(setjmp(my_buf) == 0) - longjmp(*next_buf, 1); + if(sigsetjmp(my_buf, 1) == 0) + siglongjmp(*next_buf, 1); } static jmp_buf initial_jmpbuf; @@ -277,14 +277,14 @@ int n; *fork_buf_ptr = &initial_jmpbuf; - n = setjmp(initial_jmpbuf); + n = sigsetjmp(initial_jmpbuf, 1); if(n == 0) new_thread_proc((void *) stack, new_thread_handler); else if(n == 1) remove_sigstack(); else if(n == 2){ (*cb_proc)(cb_arg); - longjmp(*cb_back, 1); + siglongjmp(*cb_back, 1); } else if(n == 3){ kmalloc_ok = 0; @@ -294,7 +294,7 @@ kmalloc_ok = 0; return(1); } - longjmp(**switch_buf, 1); + siglongjmp(**switch_buf, 1); } void remove_sigstack(void) @@ -316,8 +316,8 @@ cb_back = &here; block_signals(); - if(setjmp(here) == 0) - longjmp(initial_jmpbuf, 2); + if(sigsetjmp(here, 1) == 0) + siglongjmp(initial_jmpbuf, 2); unblock_signals(); cb_proc = NULL; @@ -328,13 +328,13 @@ void halt_skas(void) { block_signals(); - longjmp(initial_jmpbuf, 3); + siglongjmp(initial_jmpbuf, 3); } void reboot_skas(void) { block_signals(); - longjmp(initial_jmpbuf, 4); + siglongjmp(initial_jmpbuf, 4); } int new_mm(int from) Index: linux-2.4.20/arch/um/kernel/skas/syscall_kern.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/skas/syscall_kern.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/skas/syscall_kern.c 2003-10-25 00:36:02.000000000 +0400 @@ -23,7 +23,8 @@ nsyscalls++; syscall = UPT_SYSCALL_NR(®s->regs); - if((syscall >= NR_syscalls) || (syscall < 0)) + if((syscall >= NR_syscalls) || (syscall < 0) || + (sys_call_table[syscall] == NULL)) res = -ENOSYS; else res = EXECUTE_SYSCALL(syscall, regs); Index: linux-2.4.20/arch/um/kernel/trap_user.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/trap_user.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/trap_user.c 2003-10-25 00:36:02.000000000 +0400 @@ -125,7 +125,7 @@ { jmp_buf *buf = b; - longjmp(*buf, val); + siglongjmp(*buf, val); } /* Index: linux-2.4.20/arch/um/kernel/tt/syscall_kern.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/tt/syscall_kern.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/tt/syscall_kern.c 2003-10-25 00:36:02.000000000 +0400 @@ -113,7 +113,8 @@ nsyscalls++; syscall = UPT_SYSCALL_NR(®s->regs); - if((syscall >= NR_syscalls) || (syscall < 0)) + if((syscall >= NR_syscalls) || (syscall < 0) || + (sys_call_table[syscall] == NULL)) res = -ENOSYS; else if(honeypot && check_bogosity(regs)) res = -EFAULT; Index: linux-2.4.20/arch/um/kernel/tt/uaccess_user.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/tt/uaccess_user.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/tt/uaccess_user.c 2003-10-25 00:36:02.000000000 +0400 @@ -75,7 +75,7 @@ jmp_buf jbuf; *fault_catcher = &jbuf; - if(setjmp(jbuf) == 0){ + if(sigsetjmp(jbuf, 1) == 0){ ret = strlen(str) + 1; } else { Index: linux-2.4.20/arch/um/kernel/uaccess_user.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/uaccess_user.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/uaccess_user.c 2003-10-25 00:36:02.000000000 +0400 @@ -20,7 +20,7 @@ jmp_buf jbuf; *fault_catcher = &jbuf; - if(setjmp(jbuf) == 0){ + if(sigsetjmp(jbuf, 1) == 0){ (*op)(to, from, n); ret = 0; *faulted_out = 0; Index: linux-2.4.20/arch/um/kernel/tt/ptproxy/sysdep.c =================================================================== --- linux-2.4.20.orig/arch/um/kernel/tt/ptproxy/sysdep.c 2003-10-25 00:35:59.000000000 +0400 +++ linux-2.4.20/arch/um/kernel/tt/ptproxy/sysdep.c 2003-10-25 00:36:23.000000000 +0400 @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include