]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - arch/x86/lib/getuser.S
x86, smap: Add STAC and CLAC instructions to control user space access
[mirror_ubuntu-artful-kernel.git] / arch / x86 / lib / getuser.S
index b33b1fb1e6d46728ed707f640063306ca99c2ae2..156b9c8046704d7a3119356e12977578f3e3792e 100644 (file)
@@ -33,6 +33,7 @@
 #include <asm/asm-offsets.h>
 #include <asm/thread_info.h>
 #include <asm/asm.h>
+#include <asm/smap.h>
 
        .text
 ENTRY(__get_user_1)
@@ -40,8 +41,10 @@ ENTRY(__get_user_1)
        GET_THREAD_INFO(%_ASM_DX)
        cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
        jae bad_get_user
+       ASM_STAC
 1:     movzb (%_ASM_AX),%edx
        xor %eax,%eax
+       ASM_CLAC
        ret
        CFI_ENDPROC
 ENDPROC(__get_user_1)
@@ -53,8 +56,10 @@ ENTRY(__get_user_2)
        GET_THREAD_INFO(%_ASM_DX)
        cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
        jae bad_get_user
+       ASM_STAC
 2:     movzwl -1(%_ASM_AX),%edx
        xor %eax,%eax
+       ASM_CLAC
        ret
        CFI_ENDPROC
 ENDPROC(__get_user_2)
@@ -66,8 +71,10 @@ ENTRY(__get_user_4)
        GET_THREAD_INFO(%_ASM_DX)
        cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
        jae bad_get_user
+       ASM_STAC
 3:     mov -3(%_ASM_AX),%edx
        xor %eax,%eax
+       ASM_CLAC
        ret
        CFI_ENDPROC
 ENDPROC(__get_user_4)
@@ -80,8 +87,10 @@ ENTRY(__get_user_8)
        GET_THREAD_INFO(%_ASM_DX)
        cmp TI_addr_limit(%_ASM_DX),%_ASM_AX
        jae     bad_get_user
+       ASM_STAC
 4:     movq -7(%_ASM_AX),%_ASM_DX
        xor %eax,%eax
+       ASM_CLAC
        ret
        CFI_ENDPROC
 ENDPROC(__get_user_8)
@@ -91,6 +100,7 @@ bad_get_user:
        CFI_STARTPROC
        xor %edx,%edx
        mov $(-EFAULT),%_ASM_AX
+       ASM_CLAC
        ret
        CFI_ENDPROC
 END(bad_get_user)