1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-28 03:25:31 +03:00

volume_id: really fix endianess bug in linux_raid detection

Seems we find the md signature in cpu-order on the disk. Let's
look for both endian encodings ...

Thanks to Michael Prokop for his help finding the bug.
This commit is contained in:
Kay Sievers 2007-02-03 01:12:34 +01:00
parent 273bebdba6
commit ac77e95948
2 changed files with 5 additions and 3 deletions

View File

@ -13,7 +13,7 @@ INSTALL_DATA = ${INSTALL} -m 644
INSTALL_LIB = ${INSTALL} -m 755
SHLIB_CUR = 0
SHLIB_REV = 74
SHLIB_REV = 75
SHLIB_AGE = 0
SHLIB = libvolume_id.so.$(SHLIB_CUR).$(SHLIB_REV).$(SHLIB_AGE)

View File

@ -46,7 +46,8 @@ static struct mdp_super_block {
} PACKED *mdp;
#define MD_RESERVED_BYTES 0x10000
#define MD_MAGIC "\xa9\x2b\x4e\xfc"
#define MD_MAGIC "\xfc\x4e\x2b\xa9"
#define MD_MAGIC_SWAP "\xa9\x2b\x4e\xfc"
int volume_id_probe_linux_raid(struct volume_id *id, uint64_t off, uint64_t size)
{
@ -65,7 +66,8 @@ int volume_id_probe_linux_raid(struct volume_id *id, uint64_t off, uint64_t size
return -1;
mdp = (struct mdp_super_block *) buf;
if (memcmp(mdp->md_magic, MD_MAGIC, 4) != 0)
if ((memcmp(mdp->md_magic, MD_MAGIC, 4) != 0) &&
(memcmp(mdp->md_magic, MD_MAGIC_SWAP, 4) != 0))
return -1;
memcpy(uuid, &mdp->set_uuid0, 4);