aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/xen-blkback/blkback.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/xen-blkback/blkback.c')
-rw-r--r--drivers/block/xen-blkback/blkback.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
index dba55e3a4a86..c73910cc28c9 100644
--- a/drivers/block/xen-blkback/blkback.c
+++ b/drivers/block/xen-blkback/blkback.c
@@ -175,8 +175,14 @@ static int xen_vbd_translate(struct phys_req *req, struct xen_blkif *blkif,
175 if ((operation != READ) && vbd->readonly) 175 if ((operation != READ) && vbd->readonly)
176 goto out; 176 goto out;
177 177
178 if (unlikely((req->sector_number + req->nr_sects) > vbd_sz(vbd))) 178 if (likely(req->nr_sects)) {
179 goto out; 179 blkif_sector_t end = req->sector_number + req->nr_sects;
180
181 if (unlikely(end < req->sector_number))
182 goto out;
183 if (unlikely(end > vbd_sz(vbd)))
184 goto out;
185 }
180 186
181 req->dev = vbd->pdevice; 187 req->dev = vbd->pdevice;
182 req->bdev = vbd->bdev; 188 req->bdev = vbd->bdev;
@@ -538,11 +544,6 @@ static int dispatch_rw_block_io(struct xen_blkif *blkif,
538 case BLKIF_OP_FLUSH_DISKCACHE: 544 case BLKIF_OP_FLUSH_DISKCACHE:
539 blkif->st_f_req++; 545 blkif->st_f_req++;
540 operation = WRITE_FLUSH; 546 operation = WRITE_FLUSH;
541 /*
542 * The frontend likes to set this to -1, which xen_vbd_translate
543 * is alergic too.
544 */
545 req->u.rw.sector_number = 0;
546 break; 547 break;
547 case BLKIF_OP_WRITE_BARRIER: 548 case BLKIF_OP_WRITE_BARRIER:
548 default: 549 default: