From: Pekka Enberg Date: Wed, 20 Jul 2011 13:28:31 +0000 (+0300) Subject: kvm tools, qcow: Fix copy-on-write image corruption X-Git-Tag: next-20110824~3^2~86 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=4839bcd6b04a1b628f0f00d535ddca2ee872e9fa;p=karo-tx-linux.git kvm tools, qcow: Fix copy-on-write image corruption We don't handle refcount table properly so make sure we only write to clusters that have the "copied" flag set. Cc: Kevin Wolf Cc: Sasha Levin Signed-off-by: Pekka Enberg --- diff --git a/tools/kvm/disk/qcow.c b/tools/kvm/disk/qcow.c index bf0ac33a47aa..bffd4b63401a 100644 --- a/tools/kvm/disk/qcow.c +++ b/tools/kvm/disk/qcow.c @@ -429,7 +429,11 @@ static ssize_t qcow_write_cluster(struct qcow *q, u64 offset, void *buf, u32 src l2t_off = be64_to_cpu(table->l1_table[l1t_idx]); if (l2t_off & QCOW_OFLAG_COMPRESSED) { - pr_warning("compressed sectors are not supported"); + pr_warning("compressed clusters are not supported"); + goto error; + } + if (!(l2t_off & QCOW_OFLAG_COPIED)) { + pr_warning("copy-on-write clusters are not supported"); goto error; } @@ -472,7 +476,11 @@ static ssize_t qcow_write_cluster(struct qcow *q, u64 offset, void *buf, u32 src clust_start = be64_to_cpu(l2t->table[l2t_idx]); if (clust_start & QCOW_OFLAG_COMPRESSED) { - pr_warning("compressed sectors are not supported"); + pr_warning("compressed clusters are not supported"); + goto error; + } + if (!(clust_start & QCOW_OFLAG_COPIED)) { + pr_warning("copy-on-write clusters are not supported"); goto error; }