]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdadm: force a uuid swap on big endian
authorNigel Croxon <ncroxon@redhat.com>
Tue, 24 Sep 2019 15:39:24 +0000 (11:39 -0400)
committerJes Sorensen <jsorensen@fb.com>
Mon, 30 Sep 2019 19:14:44 +0000 (15:14 -0400)
The code path for metadata 0.90 calls a common routine
fname_from_uuid that uses metadata 1.2. The code expects member
swapuuid to be setup and usable. But it is only setup when using
metadata 1.2. Since the metadata 0.90 did not create swapuuid
and set it. The test (st->ss == &super1) ? 1 : st->ss->swapuuid
fails. The swapuuid is set at compile time based on byte order.
Any call based on metadata 0.90 and on big endian processors,
the --export uuid will be incorrect.

Signed-Off-by: Nigel Croxon <ncroxon@redhat.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
util.c

diff --git a/util.c b/util.c
index c26cf5f3f78b41662d988025a13ecc24a0ba54b2..64dd409c4d5576a97c83ad2fa7d4fc90f5ed6cd4 100644 (file)
--- a/util.c
+++ b/util.c
@@ -685,8 +685,12 @@ char *fname_from_uuid(struct supertype *st, struct mdinfo *info,
        // work, but can't have it set if we want this printout to match
        // all the other uuid printouts in super1.c, so we force swapuuid
        // to 1 to make our printout match the rest of super1
+#if __BYTE_ORDER == BIG_ENDIAN
+       return __fname_from_uuid(info->uuid, 1, buf, sep);
+#else
        return __fname_from_uuid(info->uuid, (st->ss == &super1) ? 1 :
                                 st->ss->swapuuid, buf, sep);
+#endif
 }
 
 int check_ext2(int fd, char *name)