diff options
author | Jan Kara <jack@suse.cz> | 2023-01-25 11:43:03 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-12-27 13:53:01 +0100 |
commit | 6c450489f9c86cc9bde7d39d941c5ae6d05051e8 (patch) | |
tree | 3fbbb3d2d47126f0738af1fc8da9a4a1ad03cf97 | |
parent | 91542d131b41e824d0481aff4c9068500602dbf6 (diff) |
udf: Fix directory iteration for longer tail extents
commit 1ea1cd11c72d1405a6b98440a9d5ea82dfa07166 upstream.
When directory's last extent has more that one block and its length is
not multiple of a block side, the code wrongly decided to move to the
next extent instead of processing the last partial block. This led to
directory corruption. Fix the rounding issue.
Signed-off-by: Jan Kara <jack@suse.cz>
Cc: Shreenidhi Shedi <yesshedi@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | fs/udf/directory.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/udf/directory.c b/fs/udf/directory.c index 04169e428fdf..76dd2e35e098 100644 --- a/fs/udf/directory.c +++ b/fs/udf/directory.c @@ -170,7 +170,7 @@ static struct buffer_head *udf_fiiter_bread_blk(struct udf_fileident_iter *iter) static int udf_fiiter_advance_blk(struct udf_fileident_iter *iter) { iter->loffset++; - if (iter->loffset < iter->elen >> iter->dir->i_blkbits) + if (iter->loffset < DIV_ROUND_UP(iter->elen, 1<<iter->dir->i_blkbits)) return 0; iter->loffset = 0; |