Please find attach a proposed debdiff for fixing the issue in Ubuntu
Trusty by backporting the fix which is now in Wily.

** Description changed:

+ [Impact]
+ A race condition in the VDI block driver of Qemu leads to image (and thus 
file system) corruption under certain circumstances.
+ This makes Qemu tools usage for VDI formatted images particularly dangerous 
(qemu-img, qemu-nbd).
+ The bug fix introduces locks to prevent such race condition.
+ 
+ 
+ [Test Case]
+ A simple test case was provided in comment #5 
(https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1422307/comments/5):
+ 
+ $ ./qemu-img create -f vdi test.vdi 2G
+ Formatting 'test.vdi', fmt=vdi size=2147483648 static=off
+ $ ./qemu-img create -f raw test.raw 2G
+ Formatting 'test.raw', fmt=raw size=2147483648
+ $ x86_64-softmmu/qemu-system-x86_64 -enable-kvm -drive 
if=virtio,file=blkverify:test.raw:test.vdi,format=raw -drive 
if=virtio,file=data.img,format=raw,format=raw -cdrom ~/tmp/arch.iso -m 512 
-boot d
+ blkverify: read sector_num=810976 nb_sectors=256 contents mismatch in sector 
811008
+ 
+ Operations in the guest:
+ $ dd if=/dev/vdb of=/dev/vda
+ $ dd if=/dev/vda of=/dev/null
+ 
+ [Regression Potential]
+ In case of bugs affecting the way locks are used, deadlocks could be a 
regression, but they would only affect VDI images.
+ 
+ 
+ Original bug report:
  Dear all,
  
  On Trusty, in certain situations, try to copy files over a qemu-nbd
  mounted file system leads to write errors (and thus, file corruption).
  
  Here is the last example I tried:
  -> virtual disk is a VDI disk
  -> It has only one partition, in FAT
  
  Here is my mount process:
  # modprobe nbd max_part=63
  # qemu-nbd -c /dev/nbd0 "virtual_disk.vdi"
  # partprobe /dev/nbd0
  # mount /dev/nbd0p1 /tmp/mnt/
  
  Partition is properly mounted at that point:
  /dev/nbd0p1 on /tmp/mnt type vfat (rw)
  
  Now, when I copy a file (rather big, ~28MB):
  # cp file_to_copy /tmp/mnt/ ; sync
  # md5sum /tmp/mnt/file_to_copy
  2efc9f32e4267782b11d63d2f128a363  /tmp/mnt/file_to_copy
- # umount /tmp/mnt 
+ # umount /tmp/mnt
  # mount /dev/nbd0p1 /tmp/mnt/
  # md5sum /tmp/mnt/file_to_copy
  42b0a3bf73f704d03ce301716d7654de  /tmp/mnt/file_to_copy
  
  The first hash was obviously the right one.
  
  On a previous attempt I did, I spotted thanks to vbindiff that parts of the 
file were just filed with 0s instead of actual data.
  It will randomly work after several attempts to write.
  
  Version information:
  # qemu-nbd --version
  qemu-nbd version 0.0.1
  Written by Anthony Liguori.
  
  Cheers,

** Patch added: "qemu_2.0.0+dfsg-2ubuntu1.17.diff"
   
https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1422307/+attachment/4448189/+files/qemu_2.0.0%2Bdfsg-2ubuntu1.17.diff

-- 
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to qemu in Ubuntu.
https://bugs.launchpad.net/bugs/1422307

Title:
  qemu-nbd corrupts files

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1422307/+subscriptions

-- 
Ubuntu-server-bugs mailing list
Ubuntu-server-bugs@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-server-bugs

Reply via email to