hurd: Fix stack pointer corruption in syscall
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Thu, 22 Sep 2016 00:43:39 +0000 (02:43 +0200)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Thu, 22 Sep 2016 00:43:39 +0000 (02:43 +0200)
Thanks Justus Winter for the report.

* sysdeps/mach/i386/syscall.S (syscall): Push back syscall number.

ChangeLog
sysdeps/mach/i386/syscall.S

index b2add6a..abd6995 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -14,6 +14,7 @@
        _hurd_malloc_fork_prepare after that. Call _hurd_malloc_fork_parent
        before __malloc_fork_unlock_parent and _hurd_malloc_fork_child before
        __malloc_fork_unlock_child.
+       * sysdeps/mach/i386/syscall.S (syscall): Push back syscall number.
 
 2016-09-21  James Greenhalgh  <james.greenhalgh@arm.com>
 
index adb7716..643cddc 100644 (file)
@@ -22,5 +22,8 @@ ENTRY (syscall)
        popl %eax               /* Pop syscall number into %eax.  */
        pushl %ecx              /* Push back return address.  */
        .byte 0x9a, 0, 0, 0, 0, 7, 0 /* lcall $7, $0 -- gas bug */
+       popl %ecx               /* Pop return address into %ecx.  */
+       pushl $0                /* Push back dumb syscall number.  */
+       pushl %ecx              /* Push back return address.  */
        ret
 END (syscall)