Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

udf: Propagate errors from udf_advance_blk()

When we spot directory corruption when trying to load next directory
extent, we didn't propagate the error up properly, leading to possibly
indefinite looping on corrupted directories. Fix the problem by
propagating the error properly.

Signed-off-by: Jan Kara <jack@suse.cz>

Jan Kara ee454ad2 3bea4ae1

+6 -2
+6 -2
fs/udf/directory.c
··· 217 217 /* Need to fetch next block to get name? */ 218 218 if (off + udf_dir_entry_len(fi) > blksize) { 219 219 fetch_next: 220 - udf_fiiter_advance_blk(iter); 220 + err = udf_fiiter_advance_blk(iter); 221 + if (err) 222 + goto out_brelse; 221 223 iter->bh[1] = udf_fiiter_bread_blk(iter); 222 224 if (!iter->bh[1]) { 223 225 err = -ENOMEM; ··· 298 296 iter->bh[0] = iter->bh[1]; 299 297 iter->bh[1] = NULL; 300 298 } else { 301 - udf_fiiter_advance_blk(iter); 299 + err = udf_fiiter_advance_blk(iter); 300 + if (err < 0) 301 + return err; 302 302 } 303 303 } 304 304 err = udf_fiiter_load_bhs(iter);