rpms/kvm/F-9 kvm-62-block-rw-range-check.patch,1.1.8.1,1.1.8.2
Juan Quintela
quintela at fedoraproject.org
Tue Oct 21 16:38:40 UTC 2008
- Previous message (by thread): rpms/kvm/F-9 kvm-62-block-rw-range-check.patch, 1.1, NONE kvm-62-e1000-default.patch, 1.1, NONE kvm-63-defaults.patch, 1.1, NONE kvm-65-cirrus.patch, 1.1, NONE kvm-65-kernel-virtio-boot.patch, 1.1, NONE kvm-65-pty-rawmode.patch, 1.1, NONE kvm-acpi-do-not-ovflw.patch, 1.2, NONE kvm-acpi-do-not-wrap.patch, 1.2, NONE kvm-bootmenu.patch, 1.1, NONE kvm-cirrus-bitblt-overflow.patch, 1.1, NONE kvm-extboot.patch, 1.2, NONE kvm-sysenter32.patch, 1.1, NONE
- Next message (by thread): rpms/pnp4nagios/devel .cvsignore, 1.2, 1.3 pnp4nagios.spec, 1.3, 1.4 sources, 1.2, 1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: quintela
Update of /cvs/pkgs/rpms/kvm/F-9
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv29839
Added Files:
Tag: private-quintela-kvm-77-branch
kvm-62-block-rw-range-check.patch
Log Message:
New patch needed for kvm-77 update
kvm-62-block-rw-range-check.patch:
Index: kvm-62-block-rw-range-check.patch
===================================================================
RCS file: kvm-62-block-rw-range-check.patch
diff -N kvm-62-block-rw-range-check.patch
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ kvm-62-block-rw-range-check.patch 21 Oct 2008 16:38:09 -0000 1.1.8.2
@@ -0,0 +1,217 @@
+diff --git a/qemu/block-qcow.c b/qemu/block-qcow.c
+index 1fecf30..919dd51 100644
+--- a/qemu/block-qcow.c
++++ b/qemu/block-qcow.c
+@@ -95,7 +95,7 @@ static int qcow_open(BlockDriverState *bs, const char *filename, int flags)
+ int len, i, shift, ret;
+ QCowHeader header;
+
+- ret = bdrv_file_open(&s->hd, filename, flags);
++ ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW);
+ if (ret < 0)
+ return ret;
+ if (bdrv_pread(s->hd, 0, &header, sizeof(header)) != sizeof(header))
+diff --git a/qemu/block-qcow2.c b/qemu/block-qcow2.c
+index b9f1688..31e2726 100644
+--- a/qemu/block-qcow2.c
++++ b/qemu/block-qcow2.c
+@@ -193,7 +193,7 @@ static int qcow_open(BlockDriverState *bs, const char *filename, int flags)
+ int len, i, shift, ret;
+ QCowHeader header;
+
+- ret = bdrv_file_open(&s->hd, filename, flags);
++ ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW);
+ if (ret < 0)
+ return ret;
+ if (bdrv_pread(s->hd, 0, &header, sizeof(header)) != sizeof(header))
+diff --git a/qemu/block-vmdk.c b/qemu/block-vmdk.c
+index 305463f..99234c1 100644
+--- a/qemu/block-vmdk.c
++++ b/qemu/block-vmdk.c
+@@ -376,7 +376,7 @@ static int vmdk_open(BlockDriverState *bs, const char *filename, int flags)
+ // Parent must be opened as RO.
+ flags = BDRV_O_RDONLY;
+
+- ret = bdrv_file_open(&s->hd, filename, flags);
++ ret = bdrv_file_open(&s->hd, filename, flags | BDRV_O_AUTOGROW);
+ if (ret < 0)
+ return ret;
+ if (bdrv_pread(s->hd, 0, &magic, sizeof(magic)) != sizeof(magic))
+diff --git a/qemu/block.c b/qemu/block.c
+index f4f9c97..f9f8c2d 100644
+--- a/qemu/block.c
++++ b/qemu/block.c
+@@ -124,6 +124,60 @@ void path_combine(char *dest, int dest_size,
+ }
+ }
+
++static int bdrv_rd_badreq_sectors(BlockDriverState *bs,
++ int64_t sector_num, int nb_sectors)
++{
++ return
++ nb_sectors < 0 ||
++ sector_num < 0 ||
++ nb_sectors > bs->total_sectors ||
++ sector_num > bs->total_sectors - nb_sectors;
++}
++
++static int bdrv_rd_badreq_bytes(BlockDriverState *bs,
++ int64_t offset, int count)
++{
++ int64_t size = bs->total_sectors << SECTOR_BITS;
++ return
++ count < 0 ||
++ size < 0 ||
++ count > size ||
++ offset > size - count;
++}
++
++static int bdrv_wr_badreq_sectors(BlockDriverState *bs,
++ int64_t sector_num, int nb_sectors)
++{
++ if (sector_num < 0 ||
++ nb_sectors < 0)
++ return 1;
++
++ if (sector_num > bs->total_sectors - nb_sectors) {
++ if (bs->autogrow)
++ bs->total_sectors = sector_num + nb_sectors;
++ else
++ return 1;
++ }
++ return 0;
++}
++
++static int bdrv_wr_badreq_bytes(BlockDriverState *bs,
++ int64_t offset, int count)
++{
++ int64_t size = bs->total_sectors << SECTOR_BITS;
++ if (count < 0 ||
++ offset < 0)
++ return 1;
++
++ if (offset > size - count) {
++ if (bs->autogrow)
++ bs->total_sectors = (offset + count + SECTOR_SIZE - 1) >> SECTOR_BITS;
++ else
++ return 1;
++ }
++ return 0;
++}
++
+
+ static void bdrv_register(BlockDriver *bdrv)
+ {
+@@ -336,6 +390,10 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
+ bs->read_only = 0;
+ bs->is_temporary = 0;
+ bs->encrypted = 0;
++ bs->autogrow = 0;
++
++ if (flags & BDRV_O_AUTOGROW)
++ bs->autogrow = 1;
+
+ if (flags & BDRV_O_SNAPSHOT) {
+ BlockDriverState *bs1;
+@@ -380,6 +438,7 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
+ }
+ bs->drv = drv;
+ bs->opaque = qemu_mallocz(drv->instance_size);
++ bs->total_sectors = 0; /* driver will set if it does not do getlength */
+ if (bs->opaque == NULL && drv->instance_size > 0)
+ return -1;
+ /* Note: for compatibility, we open disk image files as RDWR, and
+@@ -445,6 +504,7 @@ void bdrv_close(BlockDriverState *bs)
+ bs->drv = NULL;
+
+ /* call the change callback */
++ bs->total_sectors = 0;
+ bs->media_changed = 1;
+ if (bs->change_cb)
+ bs->change_cb(bs->change_opaque);
+@@ -517,6 +577,8 @@ int bdrv_read(BlockDriverState *bs, int64_t sector_num,
+ if (!drv)
+ return -ENOMEDIUM;
+
++ if (bdrv_rd_badreq_sectors(bs, sector_num, nb_sectors))
++ return -EDOM;
+ if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
+ memcpy(buf, bs->boot_sector_data, 512);
+ sector_num++;
+@@ -557,6 +619,8 @@ int bdrv_write(BlockDriverState *bs, int64_t sector_num,
+ return -ENOMEDIUM;
+ if (bs->read_only)
+ return -EACCES;
++ if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors))
++ return -EDOM;
+ if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
+ memcpy(bs->boot_sector_data, buf, 512);
+ }
+@@ -682,6 +746,8 @@ int bdrv_pread(BlockDriverState *bs, int64_t offset,
+ return -ENOMEDIUM;
+ if (!drv->bdrv_pread)
+ return bdrv_pread_em(bs, offset, buf1, count1);
++ if (bdrv_rd_badreq_bytes(bs, offset, count1))
++ return -EDOM;
+ return drv->bdrv_pread(bs, offset, buf1, count1);
+ }
+
+@@ -697,6 +763,8 @@ int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
+ return -ENOMEDIUM;
+ if (!drv->bdrv_pwrite)
+ return bdrv_pwrite_em(bs, offset, buf1, count1);
++ if (bdrv_wr_badreq_bytes(bs, offset, count1))
++ return -EDOM;
+ return drv->bdrv_pwrite(bs, offset, buf1, count1);
+ }
+
+@@ -1129,6 +1197,8 @@ int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
+ return -ENOMEDIUM;
+ if (!drv->bdrv_write_compressed)
+ return -ENOTSUP;
++ if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors))
++ return -EDOM;
+ return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors);
+ }
+
+@@ -1275,6 +1345,8 @@ BlockDriverAIOCB *bdrv_aio_read(BlockDriverState *bs, int64_t sector_num,
+
+ if (!drv)
+ return NULL;
++ if (bdrv_rd_badreq_sectors(bs, sector_num, nb_sectors))
++ return NULL;
+
+ /* XXX: we assume that nb_sectors == 0 is suppored by the async read */
+ if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
+@@ -1306,6 +1378,8 @@ BlockDriverAIOCB *bdrv_aio_write(BlockDriverState *bs, int64_t sector_num,
+ return NULL;
+ if (bs->read_only)
+ return NULL;
++ if (bdrv_wr_badreq_sectors(bs, sector_num, nb_sectors))
++ return NULL;
+ if (sector_num == 0 && bs->boot_sector_enabled && nb_sectors > 0) {
+ memcpy(bs->boot_sector_data, buf, 512);
+ }
+diff -uNp kvm-76/qemu/block.h.orig kvm-76/qemu/block.h
+--- kvm-76/qemu/block.h.orig 2008-09-28 17:13:28.000000000 +0200
++++ kvm-76/qemu/block.h 2008-10-10 16:02:17.000000000 +0200
+@@ -48,6 +48,7 @@ typedef struct QEMUSnapshotInfo {
+ it (default for
+ bdrv_file_open()) */
+ #define BDRV_O_DIRECT 0x0020
++#define BDRV_O_AUTOGROW 0x0040 /* Allow backing file to extend when writing past end of file */
+
+ void bdrv_info(void);
+ void bdrv_info_stats(void);
+diff --git a/qemu/block_int.h b/qemu/block_int.h
+index 2d70cf1..efd7516 100644
+--- a/qemu/block_int.h
++++ b/qemu/block_int.h
+@@ -97,6 +97,7 @@ struct BlockDriverState {
+ int locked; /* if true, the media cannot temporarily be ejected */
+ int encrypted; /* if true, the media is encrypted */
+ int sg; /* if true, the device is a /dev/sg* */
++ int autogrow; /* if true, the backing store can auto-extend to allocate new extents */
+ /* event callback when inserting/removing */
+ void (*change_cb)(void *opaque);
+ void *change_opaque;
- Previous message (by thread): rpms/kvm/F-9 kvm-62-block-rw-range-check.patch, 1.1, NONE kvm-62-e1000-default.patch, 1.1, NONE kvm-63-defaults.patch, 1.1, NONE kvm-65-cirrus.patch, 1.1, NONE kvm-65-kernel-virtio-boot.patch, 1.1, NONE kvm-65-pty-rawmode.patch, 1.1, NONE kvm-acpi-do-not-ovflw.patch, 1.2, NONE kvm-acpi-do-not-wrap.patch, 1.2, NONE kvm-bootmenu.patch, 1.1, NONE kvm-cirrus-bitblt-overflow.patch, 1.1, NONE kvm-extboot.patch, 1.2, NONE kvm-sysenter32.patch, 1.1, NONE
- Next message (by thread): rpms/pnp4nagios/devel .cvsignore, 1.2, 1.3 pnp4nagios.spec, 1.3, 1.4 sources, 1.2, 1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list