Unverified Commit 801f614b authored by Konstantin Komarov's avatar Konstantin Komarov
Browse files

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: 736fc7bf ("fs: ntfs3: Fix integer overflow in run_unpack()")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
parent a846cd0d
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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. */