@@ -157,17 +157,18 @@ static int fillonedir(struct dir_context *ctx, const char *name, int namlen,
157
157
}
158
158
buf -> result ++ ;
159
159
dirent = buf -> dirent ;
160
- if (!access_ok (dirent ,
160
+ if (!user_write_access_begin (dirent ,
161
161
(unsigned long )(dirent -> d_name + namlen + 1 ) -
162
162
(unsigned long )dirent ))
163
163
goto efault ;
164
- if ( __put_user (d_ino , & dirent -> d_ino ) ||
165
- __put_user (offset , & dirent -> d_offset ) ||
166
- __put_user (namlen , & dirent -> d_namlen ) ||
167
- __copy_to_user (dirent -> d_name , name , namlen ) ||
168
- __put_user (0 , dirent -> d_name + namlen ))
169
- goto efault ;
164
+ unsafe_put_user (d_ino , & dirent -> d_ino , efault_end );
165
+ unsafe_put_user (offset , & dirent -> d_offset , efault_end );
166
+ unsafe_put_user (namlen , & dirent -> d_namlen , efault_end );
167
+ unsafe_copy_dirent_name (dirent -> d_name , name , namlen , efault_end );
168
+ user_write_access_end ();
170
169
return 0 ;
170
+ efault_end :
171
+ user_write_access_end ();
171
172
efault :
172
173
buf -> result = - EFAULT ;
173
174
return - EFAULT ;
@@ -424,17 +425,18 @@ static int compat_fillonedir(struct dir_context *ctx, const char *name,
424
425
}
425
426
buf -> result ++ ;
426
427
dirent = buf -> dirent ;
427
- if (!access_ok (dirent ,
428
+ if (!user_write_access_begin (dirent ,
428
429
(unsigned long )(dirent -> d_name + namlen + 1 ) -
429
430
(unsigned long )dirent ))
430
431
goto efault ;
431
- if ( __put_user (d_ino , & dirent -> d_ino ) ||
432
- __put_user (offset , & dirent -> d_offset ) ||
433
- __put_user (namlen , & dirent -> d_namlen ) ||
434
- __copy_to_user (dirent -> d_name , name , namlen ) ||
435
- __put_user (0 , dirent -> d_name + namlen ))
436
- goto efault ;
432
+ unsafe_put_user (d_ino , & dirent -> d_ino , efault_end );
433
+ unsafe_put_user (offset , & dirent -> d_offset , efault_end );
434
+ unsafe_put_user (namlen , & dirent -> d_namlen , efault_end );
435
+ unsafe_copy_dirent_name (dirent -> d_name , name , namlen , efault_end );
436
+ user_write_access_end ();
437
437
return 0 ;
438
+ efault_end :
439
+ user_write_access_end ();
438
440
efault :
439
441
buf -> result = - EFAULT ;
440
442
return - EFAULT ;
0 commit comments