[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);
> }
Re: [Qemu-devel] [PATCH 0/2] fix the flaws of qemu_put_compression_data, Juan Quintela, 2015/12/04