]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdadm: Fix Segmentation fault.
authormajianpeng <majianpeng@gmail.com>
Mon, 28 May 2012 23:21:51 +0000 (09:21 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 27 Sep 2012 06:49:54 +0000 (16:49 +1000)
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>
super1.c

index 4f20cc3ddc29b67bf631bc4dae4e608bf44074c1..fbc2e8fa84a6b82138bd65a04ccb222c377b0f0c 100644 (file)
--- 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)