summaryrefslogtreecommitdiffstats
path: root/super1.c
diff options
context:
space:
mode:
authormajianpeng <majianpeng@gmail.com>2012-05-29 01:21:51 +0200
committerNeilBrown <neilb@suse.de>2012-05-29 01:21:51 +0200
commit4687f160276a8f7815675ca758c598d881f04fd7 (patch)
treeb46ccbeafb6ae82f0c37a63004a53ed9342d02c3 /super1.c
parentMove setup code to a function and introduce matching cleanup argument (diff)
downloadmdadm-4687f160276a8f7815675ca758c598d881f04fd7.tar.xz
mdadm-4687f160276a8f7815675ca758c598d881f04fd7.zip
mdadm: Fix Segmentation fault.
In function write_init_super1(): If "rv = store_super1(st, di->fd)" return error and the di is the last. Then the di = NULL && rv > 0, so exec: if (rv) fprintf(stderr, Name ": Failed to write metadata to%s\n", di->devname); will be segmentation fault. Signed-off-by: majianpeng <majianpeng@gmail.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'super1.c')
-rw-r--r--super1.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/super1.c b/super1.c
index 4f20cc3d..fbc2e8fa 100644
--- a/super1.c
+++ b/super1.c
@@ -1096,7 +1096,7 @@ static int write_init_super1(struct supertype *st)
unsigned long long dsize, array_size;
unsigned long long sb_offset, headroom;
- for (di = st->info; di && ! rv ; di = di->next) {
+ for (di = st->info; di; di = di->next) {
if (di->disk.state == 1)
continue;
if (di->fd < 0)
@@ -1242,6 +1242,8 @@ static int write_init_super1(struct supertype *st)
rv = st->ss->write_bitmap(st, di->fd);
close(di->fd);
di->fd = -1;
+ if (rv)
+ goto error_out;
}
error_out:
if (rv)