[PATCH] Fix sysenter (%ebp) fault handling

From: Luca Barbieri (ldb@ldb.ods.org)
Date: Sun Jan 05 2003 - 21:03:51 EST


Currently syscall_badsys is called to handle faults when reading the
sixth parameter in sysenter; however that routine assumes that
registers have already been pushed on the stack, and this is not the
case (in other words, it will currently try to pop beyond the end of
the thread stack).

This patch adds a new "function", syscall_fault, that saves register
and returns.

The return value is changed to EFAULT, which seems more appropriate
than ENOSYS.

diff --exclude-from=/home/ldb/src/exclude -urNdp --exclude='speedtouch.*' --exclude='atmsar.*' linux-2.5.54/arch/i386/kernel/entry.S linux-2.5.54-ldb/arch/i386/kernel/entry.S
--- linux-2.5.54/arch/i386/kernel/entry.S 2003-01-02 04:21:27.000000000 +0100
+++ linux-2.5.54-ldb/arch/i386/kernel/entry.S 2003-01-04 19:06:07.000000000 +0100
@@ -253,11 +253,11 @@ ENTRY(sysenter_entry)
  * Careful about security.
  */
         cmpl $__PAGE_OFFSET-3,%ebp
- jae syscall_badsys
+ jae syscall_fault
 1: movl (%ebp),%ebp
 .section __ex_table,"a"
         .align 4
- .long 1b,syscall_badsys
+ .long 1b,syscall_fault
 .previous
 
         pushl %eax
@@ -367,6 +373,14 @@ syscall_exit_work:
         jmp resume_userspace
 
         ALIGN
+syscall_fault:
+ pushl %eax # save orig_eax
+ SAVE_ALL
+ GET_THREAD_INFO(%ebx)
+ movl $-EFAULT,EAX(%esp)
+ jmp resume_userspace
+
+ ALIGN
 syscall_badsys:
         movl $-ENOSYS,EAX(%esp)
         jmp resume_userspace



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Jan 07 2003 - 22:00:30 EST