diff --git a/[refs] b/[refs] index b269281f7abe..9a6a2c054f0b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 423cf6dc04eb79d441bfda2b127bc4b57134b41d +refs/heads/master: 5fb28aa25ab0b71af2e441d68e63ad257e610a04 diff --git a/trunk/fs/udf/super.c b/trunk/fs/udf/super.c index fe0dafebde71..b9e719de0704 100644 --- a/trunk/fs/udf/super.c +++ b/trunk/fs/udf/super.c @@ -709,14 +709,16 @@ static int udf_check_anchor_block(struct super_block *sb, sector_t block, static sector_t udf_scan_anchors(struct super_block *sb, bool varconv, sector_t lastblock) { - sector_t last[4]; + sector_t last[6]; int i; struct udf_sb_info *sbi = UDF_SB(sb); last[0] = lastblock; - last[1] = last[0] - 2; - last[2] = last[0] - 150; - last[3] = last[0] - 152; + 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; /* according to spec, anchor is in either: * block 256 @@ -727,6 +729,9 @@ static sector_t udf_scan_anchors(struct super_block *sb, bool varconv, for (i = 0; i < ARRAY_SIZE(last); i++) { if (last[i] < 0) continue; + if (last[i] >= sb->s_bdev->bd_inode->i_size >> + sb->s_blocksize_bits) + continue; if (udf_check_anchor_block(sb, last[i], varconv)) { sbi->s_anchor[0] = last[i];