mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 03:24:19 +02:00
fs/ntfs3: fix mount failure for sparse runs in run_unpack()
Some NTFS volumes failed to mount because sparse data runs were not
handled correctly during runlist unpacking. The code performed arithmetic
on the special SPARSE_LCN64 marker, leading to invalid LCN values and
mount errors.
Add an explicit check for the case described above, marking the run as
sparse without applying arithmetic.
Fixes: 736fc7bf5f ("fs: ntfs3: Fix integer overflow in run_unpack()")
Cc: stable@vger.kernel.org
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
parent
a846cd0d0a
commit
801f614ba2
|
|
@ -984,8 +984,12 @@ int run_unpack(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino,
|
|||
if (!dlcn)
|
||||
return -EINVAL;
|
||||
|
||||
if (check_add_overflow(prev_lcn, dlcn, &lcn))
|
||||
/* Check special combination: 0 + SPARSE_LCN64. */
|
||||
if (!prev_lcn && dlcn == SPARSE_LCN64) {
|
||||
lcn = SPARSE_LCN64;
|
||||
} else if (check_add_overflow(prev_lcn, dlcn, &lcn)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
prev_lcn = lcn;
|
||||
} else {
|
||||
/* The size of 'dlcn' can't be > 8. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user