* [Qemu-devel] [PATCH 1/1] block/parallels: check new image size
@ 2016-07-27 17:01 Denis V. Lunev
2016-07-27 17:05 ` Denis V. Lunev
0 siblings, 1 reply; 2+ messages in thread
From: Denis V. Lunev @ 2016-07-27 17:01 UTC (permalink / raw)
To: qemu-block, qemu-devel; +Cc: den, Klim Kireev, Klim Kireev, Stefan Hajnoczi
From: Klim Kireev <sproff@linux.com>
Before this patch incorrect image could be created via qemu-img
(Example: qemu-img create -f parallels -o size=4096T hack.img),
incorrect images cannot be used due to overflow in main image structure.
This patch add check of size in image creation.
After reading size it compare it with UINT32_MAX * cluster_size.
Signed-off-by: Klim Kireev <proffk@virtuozzo.mipt.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Stefan Hajnoczi <stefanha@redhat.com>
---
block/parallels.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/block/parallels.c b/block/parallels.c
index 807a801..a0bc95b 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -43,6 +43,7 @@
#define HEADER_MAGIC2 "WithouFreSpacExt"
#define HEADER_VERSION 2
#define HEADER_INUSE_MAGIC (0x746F6E59)
+#define MAX_PARALLELS_IMAGE_FACTOR (1ull << 32)
#define DEFAULT_CLUSTER_SIZE 1048576 /* 1 MiB */
@@ -475,6 +476,10 @@ static int parallels_create(const char *filename, QemuOpts *opts, Error **errp)
BDRV_SECTOR_SIZE);
cl_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_CLUSTER_SIZE,
DEFAULT_CLUSTER_SIZE), BDRV_SECTOR_SIZE);
+ if (total_size >= MAX_PARALLELS_IMAGE_FACTOR * cl_size) {
+ error_propagate(errp, local_err);
+ return -E2BIG;
+ }
ret = bdrv_create_file(filename, opts, &local_err);
if (ret < 0) {
--
2.5.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH 1/1] block/parallels: check new image size
2016-07-27 17:01 [Qemu-devel] [PATCH 1/1] block/parallels: check new image size Denis V. Lunev
@ 2016-07-27 17:05 ` Denis V. Lunev
0 siblings, 0 replies; 2+ messages in thread
From: Denis V. Lunev @ 2016-07-27 17:05 UTC (permalink / raw)
To: qemu-block, qemu-devel; +Cc: Klim Kireev, Klim Kireev, Stefan Hajnoczi
On 07/27/2016 07:01 PM, Denis V. Lunev wrote:
> From: Klim Kireev <sproff@linux.com>
>
> Before this patch incorrect image could be created via qemu-img
> (Example: qemu-img create -f parallels -o size=4096T hack.img),
> incorrect images cannot be used due to overflow in main image structure.
>
> This patch add check of size in image creation.
>
> After reading size it compare it with UINT32_MAX * cluster_size.
>
> Signed-off-by: Klim Kireev <proffk@virtuozzo.mipt.com>
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> CC: Stefan Hajnoczi <stefanha@redhat.com>
> ---
> block/parallels.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/block/parallels.c b/block/parallels.c
> index 807a801..a0bc95b 100644
> --- a/block/parallels.c
> +++ b/block/parallels.c
> @@ -43,6 +43,7 @@
> #define HEADER_MAGIC2 "WithouFreSpacExt"
> #define HEADER_VERSION 2
> #define HEADER_INUSE_MAGIC (0x746F6E59)
> +#define MAX_PARALLELS_IMAGE_FACTOR (1ull << 32)
>
> #define DEFAULT_CLUSTER_SIZE 1048576 /* 1 MiB */
>
> @@ -475,6 +476,10 @@ static int parallels_create(const char *filename, QemuOpts *opts, Error **errp)
> BDRV_SECTOR_SIZE);
> cl_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_CLUSTER_SIZE,
> DEFAULT_CLUSTER_SIZE), BDRV_SECTOR_SIZE);
> + if (total_size >= MAX_PARALLELS_IMAGE_FACTOR * cl_size) {
> + error_propagate(errp, local_err);
> + return -E2BIG;
> + }
>
> ret = bdrv_create_file(filename, opts, &local_err);
> if (ret < 0) {
pls drop this. I have to resubmit it.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-07-27 18:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-27 17:01 [Qemu-devel] [PATCH 1/1] block/parallels: check new image size Denis V. Lunev
2016-07-27 17:05 ` Denis V. Lunev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).