Skip to content

Commit

Permalink
xen/blkback: don't fail empty barrier requests
Browse files Browse the repository at this point in the history
The sector number on empty barrier requests may (will?) be -1, which,
given that it's being treated as unsigned 64-bit quantity, will almost
always exceed the actual (virtual) disk's size.

Inspired by Konrad's "When writting barriers set the sector number to
zero...".

While at it also add overflow checking to the math in vbd_translate().

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  • Loading branch information
Jan Beulich authored and Konrad Rzeszutek Wilk committed May 18, 2011
1 parent 496b318 commit 8ab5215
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions drivers/block/xen-blkback/blkback.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,14 @@ static int xen_vbd_translate(struct phys_req *req, struct xen_blkif *blkif,
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;
Expand Down Expand Up @@ -538,11 +544,6 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
case BLKIF_OP_FLUSH_DISKCACHE:
blkif->st_f_req++;
operation = WRITE_FLUSH;
/*
* The frontend likes to set this to -1, which xen_vbd_translate
* is alergic too.
*/
req->u.rw.sector_number = 0;
break;
case BLKIF_OP_WRITE_BARRIER:
default:
Expand Down

0 comments on commit 8ab5215

Please sign in to comment.