qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/2] qemu-file: fix flaws of qemu_put_compressio


From: Juan Quintela
Subject: Re: [Qemu-devel] [PATCH 1/2] qemu-file: fix flaws of qemu_put_compression_data
Date: Fri, 04 Dec 2015 12:07:31 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Liang Li <address@hidden> wrote:
> There are some flaws in qemu_put_compression_data, this patch tries
> to fix it. Now it can be used by other code.
>
> Signed-off-by: Liang Li <address@hidden>
> ---
>  migration/qemu-file.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/migration/qemu-file.c b/migration/qemu-file.c
> index 0bbd257..ef9cd4a 100644
> --- a/migration/qemu-file.c
> +++ b/migration/qemu-file.c
> @@ -616,7 +616,9 @@ ssize_t qemu_put_compression_data(QEMUFile *f, const 
> uint8_t *p, size_t size,
>      ssize_t blen = IO_BUF_SIZE - f->buf_index - sizeof(int32_t);
>  
>      if (blen < compressBound(size)) {
> -        return 0;
> +        if (f->ops->writev_buffer || f->ops->put_buffer) {
> +            qemu_fflush(f);
> +        }
>      }

With your change, when we arrive here:

- blen could still be smaller that compressBound(size), you need to
  recheck
- blen could have changed, but you don't take that in account for the
  following caller.

So, I think code has a bug?

Later, Juan.

>      if (compress2(f->buf + f->buf_index + sizeof(int32_t), (uLongf *)&blen,
>                    (Bytef *)p, size, level) != Z_OK) {
> @@ -624,7 +626,13 @@ ssize_t qemu_put_compression_data(QEMUFile *f, const 
> uint8_t *p, size_t size,
>          return 0;
>      }
>      qemu_put_be32(f, blen);
> +    if (f->ops->writev_buffer) {
> +        add_to_iovec(f, f->buf + f->buf_index, blen);
> +    }
>      f->buf_index += blen;
> +    if (f->buf_index == IO_BUF_SIZE) {
> +        qemu_fflush(f);
> +    }
>      return blen + sizeof(int32_t);
>  }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]