44
44
or %rdx , %rax
45
45
.else
46
46
cmp $TASK_SIZE_MAX-\size+1 , %eax
47
- .if \size != 8
48
47
jae .Lbad_get_user
49
- .else
50
- jae .Lbad_get_user_8
51
- .endif
52
48
sbb %edx , %edx /* array_index_mask_nospec() */
53
49
and %edx , %eax
54
50
.endif
55
51
.endm
56
52
53
+ .macro UACCESS op src dst
54
+ 1: \op \src,\dst
55
+ _ASM_EXTABLE_UA(1b, __get_user_handle_exception)
56
+ .endm
57
+
58
+
57
59
.text
58
60
SYM_FUNC_START(__get_user_1)
59
61
check_range size =1
60
62
ASM_STAC
61
- 1: movzbl (%_ASM_AX),%edx
63
+ UACCESS movzbl (%_ASM_AX),%edx
62
64
xor %eax ,%eax
63
65
ASM_CLAC
64
66
RET
@@ -68,7 +70,7 @@ EXPORT_SYMBOL(__get_user_1)
68
70
SYM_FUNC_START(__get_user_2)
69
71
check_range size =2
70
72
ASM_STAC
71
- 2: movzwl (%_ASM_AX),%edx
73
+ UACCESS movzwl (%_ASM_AX),%edx
72
74
xor %eax ,%eax
73
75
ASM_CLAC
74
76
RET
@@ -78,7 +80,7 @@ EXPORT_SYMBOL(__get_user_2)
78
80
SYM_FUNC_START(__get_user_4)
79
81
check_range size =4
80
82
ASM_STAC
81
- 3: movl (%_ASM_AX),%edx
83
+ UACCESS movl (%_ASM_AX),%edx
82
84
xor %eax ,%eax
83
85
ASM_CLAC
84
86
RET
@@ -89,10 +91,11 @@ SYM_FUNC_START(__get_user_8)
89
91
check_range size =8
90
92
ASM_STAC
91
93
#ifdef CONFIG_X86_64
92
- 4: movq (%_ASM_AX),%rdx
94
+ UACCESS movq (%_ASM_AX),%rdx
93
95
#else
94
- 4: movl (%_ASM_AX),%edx
95
- 5: movl 4 (%_ASM_AX),%ecx
96
+ xor %ecx ,%ecx
97
+ UACCESS movl (%_ASM_AX),%edx
98
+ UACCESS movl 4 (%_ASM_AX),%ecx
96
99
#endif
97
100
xor %eax ,%eax
98
101
ASM_CLAC
@@ -104,7 +107,7 @@ EXPORT_SYMBOL(__get_user_8)
104
107
SYM_FUNC_START(__get_user_nocheck_1)
105
108
ASM_STAC
106
109
ASM_BARRIER_NOSPEC
107
- 6: movzbl (%_ASM_AX),%edx
110
+ UACCESS movzbl (%_ASM_AX),%edx
108
111
xor %eax ,%eax
109
112
ASM_CLAC
110
113
RET
@@ -114,7 +117,7 @@ EXPORT_SYMBOL(__get_user_nocheck_1)
114
117
SYM_FUNC_START(__get_user_nocheck_2)
115
118
ASM_STAC
116
119
ASM_BARRIER_NOSPEC
117
- 7: movzwl (%_ASM_AX),%edx
120
+ UACCESS movzwl (%_ASM_AX),%edx
118
121
xor %eax ,%eax
119
122
ASM_CLAC
120
123
RET
@@ -124,7 +127,7 @@ EXPORT_SYMBOL(__get_user_nocheck_2)
124
127
SYM_FUNC_START(__get_user_nocheck_4)
125
128
ASM_STAC
126
129
ASM_BARRIER_NOSPEC
127
- 8: movl (%_ASM_AX),%edx
130
+ UACCESS movl (%_ASM_AX),%edx
128
131
xor %eax ,%eax
129
132
ASM_CLAC
130
133
RET
@@ -135,10 +138,11 @@ SYM_FUNC_START(__get_user_nocheck_8)
135
138
ASM_STAC
136
139
ASM_BARRIER_NOSPEC
137
140
#ifdef CONFIG_X86_64
138
- 9: movq (%_ASM_AX),%rdx
141
+ UACCESS movq (%_ASM_AX),%rdx
139
142
#else
140
- 9: movl (%_ASM_AX),%edx
141
- 10: movl 4 (%_ASM_AX),%ecx
143
+ xor %ecx ,%ecx
144
+ UACCESS movl (%_ASM_AX),%edx
145
+ UACCESS movl 4 (%_ASM_AX),%ecx
142
146
#endif
143
147
xor %eax ,%eax
144
148
ASM_CLAC
@@ -154,36 +158,3 @@ SYM_CODE_START_LOCAL(__get_user_handle_exception)
154
158
mov $(-EFAULT),%_ASM_AX
155
159
RET
156
160
SYM_CODE_END(__get_user_handle_exception)
157
-
158
- #ifdef CONFIG_X86_32
159
- SYM_CODE_START_LOCAL (__get_user_8_handle_exception)
160
- ASM_CLAC
161
- .Lbad_get_user_8:
162
- xor %edx ,%edx
163
- xor %ecx ,%ecx
164
- mov $(-EFAULT),%_ASM_AX
165
- RET
166
- SYM_CODE_END(__get_user_8_handle_exception)
167
- #endif
168
-
169
- /* get_user */
170
- _ASM_EXTABLE_UA(1b, __get_user_handle_exception)
171
- _ASM_EXTABLE_UA(2b, __get_user_handle_exception)
172
- _ASM_EXTABLE_UA(3b, __get_user_handle_exception)
173
- #ifdef CONFIG_X86_64
174
- _ASM_EXTABLE_UA(4b, __get_user_handle_exception)
175
- #else
176
- _ASM_EXTABLE_UA(4b, __get_user_8_handle_exception)
177
- _ASM_EXTABLE_UA(5b, __get_user_8_handle_exception)
178
- #endif
179
-
180
- /* __get_user */
181
- _ASM_EXTABLE_UA(6b, __get_user_handle_exception)
182
- _ASM_EXTABLE_UA(7b, __get_user_handle_exception)
183
- _ASM_EXTABLE_UA(8b, __get_user_handle_exception)
184
- #ifdef CONFIG_X86_64
185
- _ASM_EXTABLE_UA(9b, __get_user_handle_exception)
186
- #else
187
- _ASM_EXTABLE_UA(9b, __get_user_8_handle_exception)
188
- _ASM_EXTABLE_UA(10b, __get_user_8_handle_exception)
189
- #endif
0 commit comments