From: Lukasz Dorau Date: Thu, 20 Sep 2012 01:06:25 +0000 (+1000) Subject: fix segfaults in Detail() X-Git-Tag: mdadm-3.3-rc1~224 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=db428d7a2460b92773b565a0b9d27733f36ba1c9;p=thirdparty%2Fmdadm.git fix segfaults in Detail() 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 Signed-off-by: NeilBrown --- diff --git a/Detail.c b/Detail.c index 17aa5162..f633d936 100644 --- a/Detail.c +++ b/Detail.c @@ -430,7 +430,7 @@ int Detail(char *dev, struct context *c) } 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, @@ -596,7 +596,8 @@ This is pretty boring if (spares && c->brief && array.raid_disks) printf(" spares=%d", spares); if (c->brief && st && st->sb) st->ss->brief_detail_super(st); - st->ss->free_super(st); + if (st) + st->ss->free_super(st); if (c->brief > 1 && devices) printf("\n devices=%s", devices); if (c->brief)