[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 08/13] qcow2: Fix refcount blocks beyond imag
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [PATCH v7 08/13] qcow2: Fix refcount blocks beyond image end |
Date: |
Wed, 22 Oct 2014 11:24:18 +0200 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Am 22.10.2014 um 10:08 hat Max Reitz geschrieben:
> If the qcow2 check function detects a refcount block located beyond the
> image end, grow the image appropriately. This cannot break anything and
> is the logical fix for such a case.
>
> Signed-off-by: Max Reitz <address@hidden>
> ---
> block/qcow2-refcount.c | 63
> ++++++++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 59 insertions(+), 4 deletions(-)
>
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index d484029..3800d3c 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -1544,7 +1544,8 @@ static int check_refblocks(BlockDriverState *bs,
> BdrvCheckResult *res,
> int64_t *nb_clusters)
> {
> BDRVQcowState *s = bs->opaque;
> - int64_t i;
> + int64_t i, size;
> + int ret;
>
> for(i = 0; i < s->refcount_table_size; i++) {
> uint64_t offset, cluster;
> @@ -1560,9 +1561,63 @@ static int check_refblocks(BlockDriverState *bs,
> BdrvCheckResult *res,
> }
>
> if (cluster >= *nb_clusters) {
> - fprintf(stderr, "ERROR refcount block %" PRId64
> - " is outside image\n", i);
> - res->corruptions++;
> + fprintf(stderr, "%s refcount block %" PRId64 " is outside
> image\n",
> + fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i);
> +
> + if (fix & BDRV_FIX_ERRORS) {
> + int64_t old_nb_clusters = *nb_clusters;
> +
> + if (offset + s->cluster_size < offset ||
> + offset > INT64_MAX - s->cluster_size)
Do you still need the first condition with the reworked second one?
> + {
> + ret = -EINVAL;
> + goto resize_fail;
> + }
Kevin
- [Qemu-devel] [PATCH v7 00/13] qcow2: Fix image repairing, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 01/13] block: Add qemu_{, try_}blockalign0(), Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 03/13] qcow2: Fix leaks in dirty images, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 02/13] qcow2: Calculate refcount block entry count, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 04/13] qcow2: Split qcow2_check_refcounts(), Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 05/13] qcow2: Use sizeof(**refcount_table), Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 06/13] qcow2: Pull check_refblocks() up, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 07/13] qcow2: Reuse refcount table in calculate_refcounts(), Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 08/13] qcow2: Fix refcount blocks beyond image end, Max Reitz, 2014/10/22
- Re: [Qemu-devel] [PATCH v7 08/13] qcow2: Fix refcount blocks beyond image end,
Kevin Wolf <=
- [Qemu-devel] [PATCH v7 09/13] qcow2: Do not perform potentially damaging repairs, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 10/13] qcow2: Rebuild refcount structure during check, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 11/13] qcow2: Clean up after refcount rebuild, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 12/13] iotests: Fix test outputs, Max Reitz, 2014/10/22
- [Qemu-devel] [PATCH v7 13/13] iotests: Add test for potentially damaging repairs, Max Reitz, 2014/10/22