aboutsummaryrefslogtreecommitdiff
path: root/dump/dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'dump/dump.c')
-rw-r--r--dump/dump.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/dump/dump.c b/dump/dump.c
index 85d5101..3d77bb9 100644
--- a/dump/dump.c
+++ b/dump/dump.c
@@ -76,20 +76,26 @@ static int exfat_show_ondisk_all_info(struct exfat_blk_dev *bd)
unsigned char *bitmap;
char *volume_label;
- ppbr = malloc(bd->sector_size);
+ ppbr = malloc(EXFAT_MAX_SECTOR_SIZE);
if (!ppbr) {
exfat_err("Cannot allocate pbr: out of memory\n");
return -ENOMEM;
}
/* read main boot sector */
- ret = exfat_read_sector(bd, (char *)ppbr, BOOT_SEC_IDX);
- if (ret < 0) {
+ if (exfat_read(bd->dev_fd, (char *)ppbr, EXFAT_MAX_SECTOR_SIZE,
+ 0) != (ssize_t)EXFAT_MAX_SECTOR_SIZE) {
exfat_err("main boot sector read failed\n");
ret = -EIO;
goto free_ppbr;
}
+ if (memcmp(ppbr->bpb.oem_name, "EXFAT ", 8) != 0) {
+ exfat_err("Bad fs_name in boot sector, which does not describe a valid exfat filesystem\n");
+ ret = -EINVAL;
+ goto free_ppbr;
+ }
+
pbsx = &ppbr->bsx;
if (pbsx->sect_size_bits < EXFAT_MIN_SECT_SIZE_BITS ||
@@ -107,12 +113,8 @@ static int exfat_show_ondisk_all_info(struct exfat_blk_dev *bd)
goto free_ppbr;
}
- if (bd->sector_size != 1 << pbsx->sect_size_bits) {
- exfat_err("bogus sector size : %u (sector size bits : %u)\n",
- bd->sector_size, pbsx->sect_size_bits);
- ret = -EINVAL;
- goto free_ppbr;
- }
+ bd->sector_size_bits = pbsx->sect_size_bits;
+ bd->sector_size = 1 << pbsx->sect_size_bits;
clu_offset = le32_to_cpu(pbsx->clu_offset);
total_clus = le32_to_cpu(pbsx->clu_count);