---- new.orig/savevm.c 2012-09-18 07:20:45.000000000 +0200
-+++ new/savevm.c 2012-09-18 07:36:55.000000000 +0200
-@@ -2223,6 +2223,50 @@
+--- new.orig/savevm.c 2012-09-19 07:17:28.000000000 +0200
++++ new/savevm.c 2012-09-19 12:53:58.000000000 +0200
+@@ -407,6 +407,17 @@
+
+ static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
+ {
++ int ret;
++ int64_t maxlen = bdrv_getlength(opaque);
++ if (pos > maxlen) {
++ return -EIO;
++ }
++ if ((pos + size) > maxlen) {
++ size = maxlen - pos - 1;
++ }
++ if (size == 0) {
++ return 0;
++ }
+ return bdrv_pread(opaque, pos, buf, size);
+ }
+
+@@ -2223,6 +2234,50 @@