@@ -1270,6 +1270,7 @@ static int
1270
1270
echo_copyout_lsm (struct lov_stripe_md * lsm , void * _ulsm , int ulsm_nob )
1271
1271
{
1272
1272
struct lov_stripe_md * ulsm = _ulsm ;
1273
+ struct lov_oinfo * * p ;
1273
1274
int nob , i ;
1274
1275
1275
1276
nob = offsetof(struct lov_stripe_md , lsm_oinfo [lsm -> lsm_stripe_count ]);
@@ -1279,19 +1280,21 @@ echo_copyout_lsm(struct lov_stripe_md *lsm, void *_ulsm, int ulsm_nob)
1279
1280
if (copy_to_user (ulsm , lsm , sizeof (* ulsm )))
1280
1281
return - EFAULT ;
1281
1282
1282
- for (i = 0 ; i < lsm -> lsm_stripe_count ; i ++ ) {
1283
- if (copy_to_user (ulsm -> lsm_oinfo [i ], lsm -> lsm_oinfo [i ],
1284
- sizeof (lsm -> lsm_oinfo [0 ])))
1283
+ for (i = 0 , p = lsm -> lsm_oinfo ; i < lsm -> lsm_stripe_count ; i ++ , p ++ ) {
1284
+ struct lov_oinfo __user * up ;
1285
+ if (get_user (up , ulsm -> lsm_oinfo + i ) ||
1286
+ copy_to_user (up , * p , sizeof (struct lov_oinfo )))
1285
1287
return - EFAULT ;
1286
1288
}
1287
1289
return 0 ;
1288
1290
}
1289
1291
1290
1292
static int
1291
1293
echo_copyin_lsm (struct echo_device * ed , struct lov_stripe_md * lsm ,
1292
- void * ulsm , int ulsm_nob )
1294
+ struct lov_stripe_md __user * ulsm , int ulsm_nob )
1293
1295
{
1294
1296
struct echo_client_obd * ec = ed -> ed_ec ;
1297
+ struct lov_oinfo * * p ;
1295
1298
int i ;
1296
1299
1297
1300
if (ulsm_nob < sizeof (* lsm ))
@@ -1306,11 +1309,10 @@ echo_copyin_lsm(struct echo_device *ed, struct lov_stripe_md *lsm,
1306
1309
((__u64 )lsm -> lsm_stripe_size * lsm -> lsm_stripe_count > ~0UL ))
1307
1310
return - EINVAL ;
1308
1311
1309
- for (i = 0 ; i < lsm -> lsm_stripe_count ; i ++ ) {
1310
- if (copy_from_user (lsm -> lsm_oinfo [i ],
1311
- ((struct lov_stripe_md * )ulsm )-> \
1312
- lsm_oinfo [i ],
1313
- sizeof (lsm -> lsm_oinfo [0 ])))
1312
+ for (i = 0 , p = lsm -> lsm_oinfo ; i < lsm -> lsm_stripe_count ; i ++ , p ++ ) {
1313
+ struct lov_oinfo __user * up ;
1314
+ if (get_user (up , ulsm -> lsm_oinfo + i ) ||
1315
+ copy_from_user (* p , up , sizeof (struct lov_oinfo )))
1314
1316
return - EFAULT ;
1315
1317
}
1316
1318
return 0 ;
0 commit comments