[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] block/vhdx: add check for truncated image files
From: |
Peter Lieven |
Subject: |
[Qemu-devel] [PATCH] block/vhdx: add check for truncated image files |
Date: |
Thu, 29 Aug 2019 15:36:15 +0200 |
qemu is currently not able to detect truncated vhdx image files.
Add a basic check if all allocated blocks are reachable to vhdx_co_check.
Signed-off-by: Jan-Hendrik Frintrop <address@hidden>
Signed-off-by: Peter Lieven <address@hidden>
---
block/vhdx.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/block/vhdx.c b/block/vhdx.c
index 6a09d0a55c..4382b1375d 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -2068,10 +2068,29 @@ static int coroutine_fn vhdx_co_check(BlockDriverState
*bs,
BdrvCheckMode fix)
{
BDRVVHDXState *s = bs->opaque;
+ VHDXSectorInfo sinfo;
+ int64_t file_size = bdrv_get_allocated_file_size(bs);
+ int64_t sector_num;
if (s->log_replayed_on_open) {
result->corruptions_fixed++;
}
+
+ for (sector_num = 0; sector_num < bs->total_sectors;
+ sector_num += s->block_size / BDRV_SECTOR_SIZE) {
+ int nb_sectors = MIN(bs->total_sectors - sector_num,
+ s->block_size / BDRV_SECTOR_SIZE);
+ vhdx_block_translate(s, sector_num, nb_sectors, &sinfo);
+ if ((s->bat[sinfo.bat_idx] & VHDX_BAT_STATE_BIT_MASK) ==
+ PAYLOAD_BLOCK_FULLY_PRESENT) {
+ if (sinfo.file_offset +
+ sinfo.sectors_avail * BDRV_SECTOR_SIZE > file_size) {
+ /* block is past the end of file, image has been truncated. */
+ result->corruptions++;
+ }
+ }
+ }
+
return 0;
}
--
2.17.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [PATCH] block/vhdx: add check for truncated image files,
Peter Lieven <=