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

Re: [Xen-devel] [PATCH] linux-2.6.18/blkback: don't fail empty barrier requests



On Thu, May 26, 2011 at 10:47:58AM +0100, Jan Beulich wrote:
> The sector number on empty barrier requests may (will?) be
> uninitialized (neither bio_init() nor rq_init() set the respective
> fields), which allows for exceeding the actual (virtual) disk's size.
> 
> Inspired by Konrad's "When writting barriers set the sector number to
> zero...", but instead of zapping the sector number (which is wrong for
> non-empty ones) just ignore the sector number when the sector count is
> zero.
> 
> While at it also add overflow checking to the math in vbd_translate().
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>

Acked-by.
> 
> --- a/drivers/xen/blkback/vbd.c
> +++ b/drivers/xen/blkback/vbd.c
> @@ -108,8 +108,14 @@ int vbd_translate(struct phys_req *req, 
>       if ((operation != READ) && vbd->readonly)
>               goto out;
>  
> -     if (unlikely((req->sector_number + req->nr_sects) > vbd_sz(vbd)))
> -             goto out;
> +     if (likely(req->nr_sects)) {
> +             blkif_sector_t end = req->sector_number + req->nr_sects;
> +
> +             if (unlikely(end < req->sector_number))
> +                     goto out;
> +             if (unlikely(end > vbd_sz(vbd)))
> +                     goto out;
> +     }
>  
>       req->dev  = vbd->pdevice;
>       req->bdev = vbd->bdev;
> 
> 
> 

> Subject: xen/blkback: don't fail empty barrier requests
> 
> The sector number on empty barrier requests may (will?) be
> uninitialized (neither bio_init() nor rq_init() set the respective
> fields), which allows for exceeding the actual (virtual) disk's size.
> 
> Inspired by Konrad's "When writting barriers set the sector number to
> zero...", but instead of zapping the sector number (which is wrong for
> non-empty ones) just ignore the sector number when the sector count is
> zero.
> 
> While at it also add overflow checking to the math in vbd_translate().
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> 
> --- a/drivers/xen/blkback/vbd.c
> +++ b/drivers/xen/blkback/vbd.c
> @@ -108,8 +108,14 @@ int vbd_translate(struct phys_req *req, 
>       if ((operation != READ) && vbd->readonly)
>               goto out;
>  
> -     if (unlikely((req->sector_number + req->nr_sects) > vbd_sz(vbd)))
> -             goto out;
> +     if (likely(req->nr_sects)) {
> +             blkif_sector_t end = req->sector_number + req->nr_sects;
> +
> +             if (unlikely(end < req->sector_number))
> +                     goto out;
> +             if (unlikely(end > vbd_sz(vbd)))
> +                     goto out;
> +     }
>  
>       req->dev  = vbd->pdevice;
>       req->bdev = vbd->bdev;

> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.