mirror of https://github.com/xemu-project/xemu.git
qcow2: Fix corruption after error in update_refcount
After it is done with updating refcounts in the cache, update_refcount writes all changed entries to disk. If a refcount block allocation fails, however, there was no change yet and therefore first_index = last_index = -1. Don't treat -1 as a normal sector index (resulting in a 512 byte write!) but return without updating anything in this case. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
25408c0950
commit
86fa8da837
|
@ -417,6 +417,10 @@ static int write_refcount_block_entries(BlockDriverState *bs,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (first_index < 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
first_index &= ~(REFCOUNTS_PER_SECTOR - 1);
|
first_index &= ~(REFCOUNTS_PER_SECTOR - 1);
|
||||||
last_index = (last_index + REFCOUNTS_PER_SECTOR)
|
last_index = (last_index + REFCOUNTS_PER_SECTOR)
|
||||||
& ~(REFCOUNTS_PER_SECTOR - 1);
|
& ~(REFCOUNTS_PER_SECTOR - 1);
|
||||||
|
|
Loading…
Reference in New Issue