]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Fix byte-order conversion in update_super1("assemble")
authorNeilBrown <neilb@suse.de>
Thu, 16 Sep 2010 10:58:31 +0000 (20:58 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 16 Sep 2010 10:58:31 +0000 (20:58 +1000)
This code is wrong is several ways, and failed on big-endian machines.
Put in correct endian coversions: 'want' is cpu-order, dev_roles[] is little-endian,
16 bit.

Reported-by: Doug Nazar <nazard.michi@gmail.com>
Signed-off-by: NeilBrown <neilb@suse.de>
super1.c

index 01473d14e68897666d0ef536df01d32ebf1aac30..0eb03230a79fd4b8bf791f2b5057be5ee0db83be 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -673,11 +673,11 @@ static int update_super1(struct supertype *st, struct mdinfo *info,
                int d = info->disk.number;
                int want;
                if (info->disk.state == 6)
-                       want = __cpu_to_le32(info->disk.raid_disk);
+                       want = info->disk.raid_disk;
                else
                        want = 0xFFFF;
-               if (sb->dev_roles[d] != want) {
-                       sb->dev_roles[d] = want;
+               if (sb->dev_roles[d] != __cpu_to_le16(want)) {
+                       sb->dev_roles[d] = __cpu_to_le16(want);
                        rv = 1;
                }
        }