Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f90981fe authored by Jan Kara's avatar Jan Kara
Browse files

udf: Add checks to not underflow sector_t



Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 87bc730c
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -731,13 +731,18 @@ static sector_t udf_scan_anchors(struct super_block *sb, sector_t lastblock)
	sector_t last[6];
	int i;
	struct udf_sb_info *sbi = UDF_SB(sb);

	last[0] = lastblock;
	last[1] = last[0] - 1;
	last[2] = last[0] + 1;
	last[3] = last[0] - 2;
	last[4] = last[0] - 150;
	last[5] = last[0] - 152;
	int last_count = 0;

	last[last_count++] = lastblock;
	if (lastblock >= 1)
		last[last_count++] = lastblock - 1;
	last[last_count++] = lastblock + 1;
	if (lastblock >= 2)
		last[last_count++] = lastblock - 2;
	if (lastblock >= 150)
		last[last_count++] = lastblock - 150;
	if (lastblock >= 152)
		last[last_count++] = lastblock - 152;

	/*  according to spec, anchor is in either:
	 *     block 256
@@ -745,7 +750,7 @@ static sector_t udf_scan_anchors(struct super_block *sb, sector_t lastblock)
	 *     lastblock
	 *  however, if the disc isn't closed, it could be 512 */

	for (i = 0; i < ARRAY_SIZE(last); i++) {
	for (i = 0; i < last_count; i++) {
		if (last[i] >= sb->s_bdev->bd_inode->i_size >>
				sb->s_blocksize_bits)
			continue;