@@ -158,38 +158,40 @@ static int ia32_setup_sigcontext(struct sigcontext_32 __user *sc,
158
158
void __user * fpstate ,
159
159
struct pt_regs * regs , unsigned int mask )
160
160
{
161
- int err = 0 ;
162
-
163
- put_user_try {
164
- put_user_ex (get_user_seg (gs ), (unsigned int __user * )& sc -> gs );
165
- put_user_ex (get_user_seg (fs ), (unsigned int __user * )& sc -> fs );
166
- put_user_ex (get_user_seg (ds ), (unsigned int __user * )& sc -> ds );
167
- put_user_ex (get_user_seg (es ), (unsigned int __user * )& sc -> es );
168
-
169
- put_user_ex (regs -> di , & sc -> di );
170
- put_user_ex (regs -> si , & sc -> si );
171
- put_user_ex (regs -> bp , & sc -> bp );
172
- put_user_ex (regs -> sp , & sc -> sp );
173
- put_user_ex (regs -> bx , & sc -> bx );
174
- put_user_ex (regs -> dx , & sc -> dx );
175
- put_user_ex (regs -> cx , & sc -> cx );
176
- put_user_ex (regs -> ax , & sc -> ax );
177
- put_user_ex (current -> thread .trap_nr , & sc -> trapno );
178
- put_user_ex (current -> thread .error_code , & sc -> err );
179
- put_user_ex (regs -> ip , & sc -> ip );
180
- put_user_ex (regs -> cs , (unsigned int __user * )& sc -> cs );
181
- put_user_ex (regs -> flags , & sc -> flags );
182
- put_user_ex (regs -> sp , & sc -> sp_at_signal );
183
- put_user_ex (regs -> ss , (unsigned int __user * )& sc -> ss );
184
-
185
- put_user_ex (ptr_to_compat (fpstate ), & sc -> fpstate );
186
-
187
- /* non-iBCS2 extensions.. */
188
- put_user_ex (mask , & sc -> oldmask );
189
- put_user_ex (current -> thread .cr2 , & sc -> cr2 );
190
- } put_user_catch (err );
161
+ if (!user_access_begin (sc , sizeof (struct sigcontext_32 )))
162
+ return - EFAULT ;
191
163
192
- return err ;
164
+ unsafe_put_user (get_user_seg (gs ), (unsigned int __user * )& sc -> gs , Efault );
165
+ unsafe_put_user (get_user_seg (fs ), (unsigned int __user * )& sc -> fs , Efault );
166
+ unsafe_put_user (get_user_seg (ds ), (unsigned int __user * )& sc -> ds , Efault );
167
+ unsafe_put_user (get_user_seg (es ), (unsigned int __user * )& sc -> es , Efault );
168
+
169
+ unsafe_put_user (regs -> di , & sc -> di , Efault );
170
+ unsafe_put_user (regs -> si , & sc -> si , Efault );
171
+ unsafe_put_user (regs -> bp , & sc -> bp , Efault );
172
+ unsafe_put_user (regs -> sp , & sc -> sp , Efault );
173
+ unsafe_put_user (regs -> bx , & sc -> bx , Efault );
174
+ unsafe_put_user (regs -> dx , & sc -> dx , Efault );
175
+ unsafe_put_user (regs -> cx , & sc -> cx , Efault );
176
+ unsafe_put_user (regs -> ax , & sc -> ax , Efault );
177
+ unsafe_put_user (current -> thread .trap_nr , & sc -> trapno , Efault );
178
+ unsafe_put_user (current -> thread .error_code , & sc -> err , Efault );
179
+ unsafe_put_user (regs -> ip , & sc -> ip , Efault );
180
+ unsafe_put_user (regs -> cs , (unsigned int __user * )& sc -> cs , Efault );
181
+ unsafe_put_user (regs -> flags , & sc -> flags , Efault );
182
+ unsafe_put_user (regs -> sp , & sc -> sp_at_signal , Efault );
183
+ unsafe_put_user (regs -> ss , (unsigned int __user * )& sc -> ss , Efault );
184
+
185
+ unsafe_put_user (ptr_to_compat (fpstate ), & sc -> fpstate , Efault );
186
+
187
+ /* non-iBCS2 extensions.. */
188
+ unsafe_put_user (mask , & sc -> oldmask , Efault );
189
+ unsafe_put_user (current -> thread .cr2 , & sc -> cr2 , Efault );
190
+ user_access_end ();
191
+ return 0 ;
192
+ Efault :
193
+ user_access_end ();
194
+ return - EFAULT ;
193
195
}
194
196
195
197
/*
0 commit comments