* Backport a fix to qemu-kvm to prevent "qemu-img convert" from

creating corrupt VirtualBox images.
  (https://bugs.launchpad.net/qemu/+bug/919242)

svn path=/nixpkgs/trunk/; revision=32560
This commit is contained in:
Eelco Dolstra 2012-02-25 17:34:21 +00:00
parent 5f78cfa108
commit f0197c653e
2 changed files with 28 additions and 1 deletions

View file

@ -11,7 +11,7 @@ stdenv.mkDerivation rec {
sha256 = "0gkk96yid3nq8i4z8xbiarj0r9v7b2zavf5mnh0rc7kclzxa7mmf";
};
patches = [ ./smb-tmpdir.patch ];
patches = [ ./smb-tmpdir.patch ./qemu-img-fix-corrupt-vdi.patch ];
configureFlags = "--audio-drv-list=alsa";

View file

@ -0,0 +1,27 @@
From http://patchwork.ozlabs.org/patch/137186/
diff -ru qemu-kvm-0.15.1-orig/block/vdi.c qemu-kvm-0.15.1/block/vdi.c
--- qemu-kvm-0.15.1-orig/block/vdi.c 2011-10-19 15:54:48.000000000 +0200
+++ qemu-kvm-0.15.1/block/vdi.c 2012-02-25 18:15:36.114574574 +0100
@@ -1,7 +1,7 @@
/*
* Block driver for the Virtual Disk Image (VDI) format
*
- * Copyright (c) 2009 Stefan Weil
+ * Copyright (c) 2009, 2012 Stefan Weil
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -767,8 +767,12 @@
acb->header_modified = 1;
}
acb->bmap_last = block_index;
+ /* Copy data to be written to new block and zero unused parts. */
+ memset(block, 0, sector_in_block * SECTOR_SIZE);
memcpy(block + sector_in_block * SECTOR_SIZE,
acb->buf, n_sectors * SECTOR_SIZE);
+ memset(block + (sector_in_block + n_sectors) * SECTOR_SIZE, 0,
+ (s->block_sectors - n_sectors - sector_in_block) * SECTOR_SIZE);
acb->hd_iov.iov_base = (void *)block;
acb->hd_iov.iov_len = s->block_size;
qemu_iovec_init_external(&acb->hd_qiov, &acb->hd_iov, 1);