Commit ee454ad2 authored by Jan Kara's avatar Jan Kara

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: default avatarJan Kara <jack@suse.cz>
parent 3bea4ae1
...@@ -217,7 +217,9 @@ static int udf_fiiter_load_bhs(struct udf_fileident_iter *iter) ...@@ -217,7 +217,9 @@ static int udf_fiiter_load_bhs(struct udf_fileident_iter *iter)
/* Need to fetch next block to get name? */ /* Need to fetch next block to get name? */
if (off + udf_dir_entry_len(fi) > blksize) { if (off + udf_dir_entry_len(fi) > blksize) {
fetch_next: fetch_next:
udf_fiiter_advance_blk(iter); err = udf_fiiter_advance_blk(iter);
if (err)
goto out_brelse;
iter->bh[1] = udf_fiiter_bread_blk(iter); iter->bh[1] = udf_fiiter_bread_blk(iter);
if (!iter->bh[1]) { if (!iter->bh[1]) {
err = -ENOMEM; err = -ENOMEM;
...@@ -296,7 +298,9 @@ int udf_fiiter_advance(struct udf_fileident_iter *iter) ...@@ -296,7 +298,9 @@ int udf_fiiter_advance(struct udf_fileident_iter *iter)
iter->bh[0] = iter->bh[1]; iter->bh[0] = iter->bh[1];
iter->bh[1] = NULL; iter->bh[1] = NULL;
} else { } else {
udf_fiiter_advance_blk(iter); err = udf_fiiter_advance_blk(iter);
if (err < 0)
return err;
} }
} }
err = udf_fiiter_load_bhs(iter); err = udf_fiiter_load_bhs(iter);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment