mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +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:
parent
273bebdba6
commit
ac77e95948
@ -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)
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user