Commit fbb7b4e0804d2168f24142eebf7552adde1968dc
Committed by
Anthony Liguori
1 parent
989cebff
Improve block range checks
This patch makes the range checks for block requests more strict: It fixes a potential integer overflow and checks for negative offsets. Also, it adds the check for compressed writes. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
1 changed file
with
6 additions
and
1 deletions
block.c
... | ... | @@ -578,7 +578,10 @@ static int bdrv_check_byte_request(BlockDriverState *bs, int64_t offset, |
578 | 578 | |
579 | 579 | len = bdrv_getlength(bs); |
580 | 580 | |
581 | - if ((offset + size) > len) | |
581 | + if (offset < 0) | |
582 | + return -EIO; | |
583 | + | |
584 | + if ((offset > len) || (len - offset < size)) | |
582 | 585 | return -EIO; |
583 | 586 | |
584 | 587 | return 0; |
... | ... | @@ -1150,6 +1153,8 @@ int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num, |
1150 | 1153 | return -ENOMEDIUM; |
1151 | 1154 | if (!drv->bdrv_write_compressed) |
1152 | 1155 | return -ENOTSUP; |
1156 | + if (bdrv_check_request(bs, sector_num, nb_sectors)) | |
1157 | + return -EIO; | |
1153 | 1158 | return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors); |
1154 | 1159 | } |
1155 | 1160 | ... | ... |