From db428d7a2460b92773b565a0b9d27733f36ba1c9 Mon Sep 17 00:00:00 2001 From: Lukasz Dorau Date: Thu, 20 Sep 2012 11:06:25 +1000 Subject: [PATCH] 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 --- Detail.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Detail.c b/Detail.c index 17aa516..f633d93 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)