]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
fix segfaults in Detail()
authorLukasz Dorau <lukasz.dorau@intel.com>
Thu, 27 Sep 2012 06:58:44 +0000 (16:58 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 27 Sep 2012 06:58:44 +0000 (16:58 +1000)
If disk has been removed, 'st' and 'info' can be NULL. It causes segfault.
'st' and 'info' should be checked against being NULL before being used.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Detail.c

index 85e2b89d2ff235b9d6b567539109bd2023feb069..67ddc800b262b7312f666cb244ac46d1e71f29c3 100644 (file)
--- a/Detail.c
+++ b/Detail.c
@@ -424,7 +424,7 @@ int Detail(char *dev, int brief, int export, int test, char *homehost, char *pre
                }
                free_mdstat(ms);
 
-               if (st->sb && info->reshape_active) {
+               if ((st && st->sb) && (info && info->reshape_active)) {
 #if 0
 This is pretty boring
                        printf("  Reshape pos'n : %llu%s\n", (unsigned long long) info->reshape_progress<<9,
@@ -575,7 +575,8 @@ This is pretty boring
        if (spares && brief && array.raid_disks) printf(" spares=%d", spares);
        if (brief && st && st->sb)
                st->ss->brief_detail_super(st);
-       st->ss->free_super(st);
+       if (st)
+               st->ss->free_super(st);
 
        if (brief > 1 && devices) printf("\n   devices=%s", devices);
        if (brief) printf("\n");