@@ -674,7 +674,7 @@ static struct stats dx_show_leaf(struct inode *dir,
674
674
len = de -> name_len ;
675
675
if (!IS_ENCRYPTED (dir )) {
676
676
/* Directory is not encrypted */
677
- ext4fs_dirhash (dir , de -> name ,
677
+ ( void ) ext4fs_dirhash (dir , de -> name ,
678
678
de -> name_len , & h );
679
679
printk ("%*.s:(U)%x.%u " , len ,
680
680
name , h .hash ,
@@ -709,8 +709,9 @@ static struct stats dx_show_leaf(struct inode *dir,
709
709
if (IS_CASEFOLDED (dir ))
710
710
h .hash = EXT4_DIRENT_HASH (de );
711
711
else
712
- ext4fs_dirhash (dir , de -> name ,
713
- de -> name_len , & h );
712
+ (void ) ext4fs_dirhash (dir ,
713
+ de -> name ,
714
+ de -> name_len , & h );
714
715
printk ("%*.s:(E)%x.%u " , len , name ,
715
716
h .hash , (unsigned ) ((char * ) de
716
717
- base ));
@@ -720,7 +721,8 @@ static struct stats dx_show_leaf(struct inode *dir,
720
721
#else
721
722
int len = de -> name_len ;
722
723
char * name = de -> name ;
723
- ext4fs_dirhash (dir , de -> name , de -> name_len , & h );
724
+ (void ) ext4fs_dirhash (dir , de -> name ,
725
+ de -> name_len , & h );
724
726
printk ("%*.s:%x.%u " , len , name , h .hash ,
725
727
(unsigned ) ((char * ) de - base ));
726
728
#endif
@@ -849,8 +851,14 @@ dx_probe(struct ext4_filename *fname, struct inode *dir,
849
851
hinfo -> seed = EXT4_SB (dir -> i_sb )-> s_hash_seed ;
850
852
/* hash is already computed for encrypted casefolded directory */
851
853
if (fname && fname_name (fname ) &&
852
- !(IS_ENCRYPTED (dir ) && IS_CASEFOLDED (dir )))
853
- ext4fs_dirhash (dir , fname_name (fname ), fname_len (fname ), hinfo );
854
+ !(IS_ENCRYPTED (dir ) && IS_CASEFOLDED (dir ))) {
855
+ int ret = ext4fs_dirhash (dir , fname_name (fname ),
856
+ fname_len (fname ), hinfo );
857
+ if (ret < 0 ) {
858
+ ret_err = ERR_PTR (ret );
859
+ goto fail ;
860
+ }
861
+ }
854
862
hash = hinfo -> hash ;
855
863
856
864
if (root -> info .unused_flags & 1 ) {
@@ -1111,7 +1119,12 @@ static int htree_dirblock_to_tree(struct file *dir_file,
1111
1119
hinfo -> minor_hash = 0 ;
1112
1120
}
1113
1121
} else {
1114
- ext4fs_dirhash (dir , de -> name , de -> name_len , hinfo );
1122
+ err = ext4fs_dirhash (dir , de -> name ,
1123
+ de -> name_len , hinfo );
1124
+ if (err < 0 ) {
1125
+ count = err ;
1126
+ goto errout ;
1127
+ }
1115
1128
}
1116
1129
if ((hinfo -> hash < start_hash ) ||
1117
1130
((hinfo -> hash == start_hash ) &&
@@ -1313,8 +1326,12 @@ static int dx_make_map(struct inode *dir, struct buffer_head *bh,
1313
1326
if (de -> name_len && de -> inode ) {
1314
1327
if (ext4_hash_in_dirent (dir ))
1315
1328
h .hash = EXT4_DIRENT_HASH (de );
1316
- else
1317
- ext4fs_dirhash (dir , de -> name , de -> name_len , & h );
1329
+ else {
1330
+ int err = ext4fs_dirhash (dir , de -> name ,
1331
+ de -> name_len , & h );
1332
+ if (err < 0 )
1333
+ return err ;
1334
+ }
1318
1335
map_tail -- ;
1319
1336
map_tail -> hash = h .hash ;
1320
1337
map_tail -> offs = ((char * ) de - base )>>2 ;
@@ -1452,10 +1469,9 @@ int ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname,
1452
1469
hinfo -> hash_version = DX_HASH_SIPHASH ;
1453
1470
hinfo -> seed = NULL ;
1454
1471
if (cf_name -> name )
1455
- ext4fs_dirhash (dir , cf_name -> name , cf_name -> len , hinfo );
1472
+ return ext4fs_dirhash (dir , cf_name -> name , cf_name -> len , hinfo );
1456
1473
else
1457
- ext4fs_dirhash (dir , iname -> name , iname -> len , hinfo );
1458
- return 0 ;
1474
+ return ext4fs_dirhash (dir , iname -> name , iname -> len , hinfo );
1459
1475
}
1460
1476
#endif
1461
1477
@@ -2298,10 +2314,15 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname,
2298
2314
fname -> hinfo .seed = EXT4_SB (dir -> i_sb )-> s_hash_seed ;
2299
2315
2300
2316
/* casefolded encrypted hashes are computed on fname setup */
2301
- if (!ext4_hash_in_dirent (dir ))
2302
- ext4fs_dirhash (dir , fname_name (fname ),
2303
- fname_len (fname ), & fname -> hinfo );
2304
-
2317
+ if (!ext4_hash_in_dirent (dir )) {
2318
+ int err = ext4fs_dirhash (dir , fname_name (fname ),
2319
+ fname_len (fname ), & fname -> hinfo );
2320
+ if (err < 0 ) {
2321
+ brelse (bh2 );
2322
+ brelse (bh );
2323
+ return err ;
2324
+ }
2325
+ }
2305
2326
memset (frames , 0 , sizeof (frames ));
2306
2327
frame = frames ;
2307
2328
frame -> entries = entries ;
0 commit comments