* [PATCH] Fix sysenter (%ebp) fault handling
@ 2003-01-06 2:03 Luca Barbieri
0 siblings, 0 replies; only message in thread
From: Luca Barbieri @ 2003-01-06 2:03 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Linux-Kernel ML
[-- Attachment #1: Type: text/plain, Size: 1397 bytes --]
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
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-01-06 2:02 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-01-06 2:03 [PATCH] Fix sysenter (%ebp) fault handling Luca Barbieri
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox