[snip] > +static int exfat_verify_boot_region(struct super_block *sb) { > + struct buffer_head *bh = NULL; > + u32 chksum = 0, *p_sig, *p_chksum; > + int sn, i; > + > + /* read boot sector sub-regions */ > + for (sn = 0; sn < 11; sn++) { > + bh = sb_bread(sb, sn); > + if (!bh) > + return -EIO; > + > + if (sn != 0 && sn <= 8) { > + /* extended boot sector sub-regions */ > + p_sig = (u32 *)&bh->b_data[sb->s_blocksize - 4]; > + if (le32_to_cpu(*p_sig) != EXBOOT_SIGNATURE) { > + exfat_err(sb, "no exboot-signature"); exfat_warn(sb, "Invalid exboot-signature(sector = %d): 0x%08x", sn, *p_sig); > + brelse(bh); > + return -EINVAL; Don't make mount error, Just print warning message. > + } > + } > + > + chksum = exfat_calc_chksum32(bh->b_data, sb->s_blocksize, > + chksum, sn ? CS_DEFAULT : CS_BOOT_SECTOR); > + brelse(bh); > + } > + > + /* boot checksum sub-regions */ > + bh = sb_bread(sb, sn); > + if (!bh) > + return -EIO; > + > + for (i = 0; i < sb->s_blocksize; i += sizeof(u32)) { > + p_chksum = (u32 *)&bh->b_data[i]; > + if (le32_to_cpu(*p_chksum) != chksum) { > + exfat_err(sb, "mismatch checksum"); Print invalid checksum value also. > + brelse(bh); > + return -EINVAL; > + } > + } > + brelse(bh); > + return 0; > +} > + > /* mount the file system volume */ > static int __exfat_fill_super(struct super_block *sb) { @@ -498,6 +542,12 @@ static int > __exfat_fill_super(struct super_block *sb) > goto free_bh; > } > > + ret = exfat_verify_boot_region(sb); > + if (ret) { > + exfat_err(sb, "invalid boot region"); > + goto free_bh; > + } > + > ret = exfat_create_upcase_table(sb); > if (ret) { > exfat_err(sb, "failed to load upcase table"); > -- > 2.25.1