]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - arch/x86_64/ia32/ia32entry.S
x86_64: Zero extend all registers after ptrace in 32bit entry path.
[mirror_ubuntu-zesty-kernel.git] / arch / x86_64 / ia32 / ia32entry.S
index f21068378272f0b8dbce0ce1d7f8b29ccfa0b286..18b23181090808b953f91568d6183345b8028fd1 100644 (file)
        movq    %rax,R8(%rsp)
        .endm
 
+       .macro LOAD_ARGS32 offset
+       movl \offset(%rsp),%r11d
+       movl \offset+8(%rsp),%r10d
+       movl \offset+16(%rsp),%r9d
+       movl \offset+24(%rsp),%r8d
+       movl \offset+40(%rsp),%ecx
+       movl \offset+48(%rsp),%edx
+       movl \offset+56(%rsp),%esi
+       movl \offset+64(%rsp),%edi
+       movl \offset+72(%rsp),%eax
+       .endm
+       
        .macro CFI_STARTPROC32 simple
        CFI_STARTPROC   \simple
        CFI_UNDEFINED   r8
@@ -104,7 +116,7 @@ ENTRY(ia32_sysenter_target)
        pushq   %rax
        CFI_ADJUST_CFA_OFFSET 8
        cld
-       SAVE_ARGS 0,0,0
+       SAVE_ARGS 0,0,1
        /* no need to do an access_ok check here because rbp has been
           32bit zero extended */ 
 1:     movl    (%rbp),%r9d
@@ -152,7 +164,7 @@ sysenter_tracesys:
        movq    $-ENOSYS,RAX(%rsp)      /* really needed? */
        movq    %rsp,%rdi        /* &pt_regs -> arg1 */
        call    syscall_trace_enter
-       LOAD_ARGS ARGOFFSET  /* reload args from stack in case ptrace changed it */
+       LOAD_ARGS32 ARGOFFSET  /* reload args from stack in case ptrace changed it */
        RESTORE_REST
        movl    %ebp, %ebp
        /* no need to do an access_ok check here because rbp has been
@@ -255,7 +267,7 @@ cstar_tracesys:
        movq $-ENOSYS,RAX(%rsp) /* really needed? */
        movq %rsp,%rdi        /* &pt_regs -> arg1 */
        call syscall_trace_enter
-       LOAD_ARGS ARGOFFSET  /* reload args from stack in case ptrace changed it */
+       LOAD_ARGS32 ARGOFFSET  /* reload args from stack in case ptrace changed it */
        RESTORE_REST
        movl RSP-ARGOFFSET(%rsp), %r8d
        /* no need to do an access_ok check here because r8 has been
@@ -294,7 +306,7 @@ ia32_badarg:
  */                            
 
 ENTRY(ia32_syscall)
-       CFI_STARTPROC   simple
+       CFI_STARTPROC32 simple
        CFI_SIGNAL_FRAME
        CFI_DEF_CFA     rsp,SS+8-RIP
        /*CFI_REL_OFFSET        ss,SS-RIP*/
@@ -330,10 +342,11 @@ ia32_sysret:
 
 ia32_tracesys:                  
        SAVE_REST
+       CLEAR_RREGS
        movq $-ENOSYS,RAX(%rsp) /* really needed? */
        movq %rsp,%rdi        /* &pt_regs -> arg1 */
        call syscall_trace_enter
-       LOAD_ARGS ARGOFFSET  /* reload args from stack in case ptrace changed it */
+       LOAD_ARGS32 ARGOFFSET  /* reload args from stack in case ptrace changed it */
        RESTORE_REST
        jmp ia32_do_syscall
 END(ia32_syscall)
@@ -526,7 +539,7 @@ ia32_sys_call_table:
        .quad sys_init_module
        .quad sys_delete_module
        .quad quiet_ni_syscall          /* 130  get_kernel_syms */
-       .quad sys_quotactl
+       .quad sys32_quotactl
        .quad sys_getpgid
        .quad sys_fchdir
        .quad quiet_ni_syscall  /* bdflush */
@@ -620,7 +633,7 @@ ia32_sys_call_table:
        .quad quiet_ni_syscall          /* tux */
        .quad quiet_ni_syscall          /* security */
        .quad sys_gettid        
-       .quad sys_readahead     /* 225 */
+       .quad sys32_readahead   /* 225 */
        .quad sys_setxattr
        .quad sys_lsetxattr
        .quad sys_fsetxattr
@@ -645,7 +658,7 @@ ia32_sys_call_table:
        .quad compat_sys_io_getevents
        .quad compat_sys_io_submit
        .quad sys_io_cancel
-       .quad sys_fadvise64             /* 250 */
+       .quad sys32_fadvise64           /* 250 */
        .quad quiet_ni_syscall  /* free_huge_pages */
        .quad sys_exit_group
        .quad sys32_lookup_dcookie
@@ -709,11 +722,15 @@ ia32_sys_call_table:
        .quad compat_sys_set_robust_list
        .quad compat_sys_get_robust_list
        .quad sys_splice
-       .quad sys_sync_file_range
+       .quad sys32_sync_file_range
        .quad sys_tee                   /* 315 */
        .quad compat_sys_vmsplice
        .quad compat_sys_move_pages
        .quad sys_getcpu
        .quad sys_epoll_pwait
        .quad compat_sys_utimensat      /* 320 */
-ia32_syscall_end:              
+       .quad compat_sys_signalfd
+       .quad compat_sys_timerfd
+       .quad sys_eventfd
+       .quad sys32_fallocate
+ia32_syscall_end: