Re: [PATCH] mdadm: Fix Segmentation fault.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


On Fri, 25 May 2012 19:49:40 +0800 "majianpeng" <majianpeng@xxxxxxxxx> wrote:

> 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@xxxxxxxxx>
> ---
>  super1.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/super1.c b/super1.c
> index 4f20cc3..37b7a90 100644
> --- a/super1.c
> +++ b/super1.c
> @@ -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)

Thanks.
This doesn't only go wrong when di is the last.  If di is not the last it
will not crash, but it will report an error for the wrong device.

So thanks for finding this - I've applied you patch and also remove the
'&& ! rv' test from the 'for' loop as it is now pointless.

NeilBrown

Attachment: signature.asc
Description: PGP signature


[ATA RAID]     [Linux SCSI Target Infrastructure]     [Managing RAID on Linux]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device-Mapper]     [Kernel]     [Linux Books]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Photos]     [Yosemite Photos]     [Yosemite News]     [AMD 64]     [Linux Networking]

Add to Google Powered by Linux