]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
Avoid NULL reference calling free_super and elsewhere.
authorNeil Brown <neilb@suse.de>
Tue, 27 May 2008 07:23:16 +0000 (17:23 +1000)
committerNeil Brown <neilb@suse.de>
Tue, 27 May 2008 07:23:16 +0000 (17:23 +1000)
Since we made free_super a superswitch call, we need to be careful
that st is non NULL before calling st->ss->free_super(st).
Also when updating byteorder there is a chance of a similar NULL
deref.

Assemble.c

index 5ed2dc1c8a3b7e8b57846c1ae4f0cc92db1ff6b2..36b230435851b9449d78f02fa4952736717007cd 100644 (file)
@@ -367,7 +367,8 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
                tmpdev->used = 1;
 
        loop:
-               tst->ss->free_super(tst);
+               if (tst)
+                       tst->ss->free_super(tst);
        }
 
        if (mdfd < 0) {
@@ -568,17 +569,18 @@ int Assemble(struct supertype *st, char *mddev, int mdfd,
                devcnt++;
        }
 
-       if (update && strcmp(update, "byteorder")==0)
-               st->minor_version = 90;
-
        if (devcnt == 0) {
                fprintf(stderr, Name ": no devices found for %s\n",
                        mddev);
-               st->ss->free_super(st);
+               if (st)
+                       st->ss->free_super(st);
                if (must_close) close(mdfd);
                return 1;
        }
 
+       if (update && strcmp(update, "byteorder")==0)
+               st->minor_version = 90;
+
        st->ss->getinfo_super(st, &info);
        clean = info.array.state & 1;