mirror of
https://github.com/AuxXxilium/eudev.git
synced 2025-03-06 12:37:46 +07:00
libvolume_id: fix weird fat volume recognition
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
This commit is contained in:
parent
8813e55c74
commit
cfd0fc6605
@ -161,32 +161,38 @@ int volume_id_probe_vfat(struct volume_id *id, uint64_t off)
|
||||
return -1;
|
||||
|
||||
if (memcmp(vs->type.fat32.magic, "MSWIN", 5) == 0)
|
||||
goto valid;
|
||||
goto magic;
|
||||
|
||||
if (memcmp(vs->type.fat32.magic, "FAT32 ", 8) == 0)
|
||||
goto valid;
|
||||
goto magic;
|
||||
|
||||
if (memcmp(vs->type.fat.magic, "FAT16 ", 8) == 0)
|
||||
goto valid;
|
||||
goto magic;
|
||||
|
||||
if (memcmp(vs->type.fat.magic, "MSDOS", 5) == 0)
|
||||
goto valid;
|
||||
goto magic;
|
||||
|
||||
if (memcmp(vs->type.fat.magic, "FAT12 ", 8) == 0)
|
||||
goto valid;
|
||||
goto magic;
|
||||
|
||||
/*
|
||||
* There are old floppies out there without a magic, so we check
|
||||
* for well known values and guess if it's a fat volume
|
||||
*/
|
||||
/* some old floppies don't have a magic, so we expect the boot code to match */
|
||||
|
||||
/* boot jump address check */
|
||||
if ((vs->boot_jump[0] != 0xeb || vs->boot_jump[2] != 0x90) &&
|
||||
vs->boot_jump[0] != 0xe9)
|
||||
return -1;
|
||||
|
||||
/* heads check */
|
||||
if (vs->heads == 0)
|
||||
magic:
|
||||
/* reserverd sector count */
|
||||
if (!vs->reserved)
|
||||
return -1;
|
||||
|
||||
/* fat count*/
|
||||
if (!vs->fats)
|
||||
return -1;
|
||||
|
||||
/* media check */
|
||||
if (vs->media < 0xf8 && vs->media != 0xf0)
|
||||
return -1;
|
||||
|
||||
/* cluster size check*/
|
||||
@ -194,15 +200,6 @@ int volume_id_probe_vfat(struct volume_id *id, uint64_t off)
|
||||
(vs->sectors_per_cluster & (vs->sectors_per_cluster-1)))
|
||||
return -1;
|
||||
|
||||
/* media check */
|
||||
if (vs->media < 0xf8 && vs->media != 0xf0)
|
||||
return -1;
|
||||
|
||||
/* fat count*/
|
||||
if (vs->fats != 2)
|
||||
return -1;
|
||||
|
||||
valid:
|
||||
/* sector size check */
|
||||
sector_size = le16_to_cpu(vs->sector_size);
|
||||
if (sector_size != 0x200 && sector_size != 0x400 &&
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#define VOLUME_ID_VERSION 54
|
||||
#define VOLUME_ID_VERSION 55
|
||||
|
||||
#define VOLUME_ID_LABEL_SIZE 64
|
||||
#define VOLUME_ID_UUID_SIZE 36
|
||||
|
Loading…
Reference in New Issue
Block a user