qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] migration: Fix free XBZRLE decoded_buf wrong


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH] migration: Fix free XBZRLE decoded_buf wrong
Date: Sat, 18 Jan 2014 15:00:23 +0000

On 18 January 2014 08:30, Gonglei (Arei) <address@hidden> wrote:
> Ping?
>
>> -----Original Message-----
>> From: Gonglei (Arei)
>> Sent: Friday, January 10, 2014 4:59 PM
>> To: address@hidden
>> Cc: Luonengjun; Huangweidong (Hardware); chenliang (T)
>> Subject: [PATCH] migration: Fix free XBZRLE decoded_buf wrong
>>
>> Hi,
>>
>> When qemu do live migration with xbzrle, qemu malloc decoded_buf
>> at destniation end but free it at source end.It will crash qemu
>> by double free error in some scenarios.
>>
>> Signed-off-by: chenliang <address@hidden>
>> ---
>>  arch_init.c                   |    9 ++++++++-
>>  include/migration/migration.h |    1 +
>>  migration.c                   |    1 +
>>  3 files changed, 10 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch_init.c b/arch_init.c
>> index e0acbc5..0453f84 100644
>> --- a/arch_init.c
>> +++ b/arch_init.c
>> @@ -572,6 +572,14 @@ uint64_t ram_bytes_total(void)
>>      return total;
>>  }
>>
>> +void free_xbzrle_decoded_buf(void)
>> +{
>> +    if (XBZRLE.decoded_buf) {
>> +        g_free(XBZRLE.decoded_buf);
>> +        XBZRLE.decoded_buf = NULL;
>> +    }

g_free(NULL) is guaranteed to do nothing, so you don't
need the if() here.

>> +}
>> +
>>  static void migration_end(void)
>>  {
>>      if (migration_bitmap) {
>> @@ -585,7 +593,6 @@ static void migration_end(void)
>>          g_free(XBZRLE.cache);
>>          g_free(XBZRLE.encoded_buf);
>>          g_free(XBZRLE.current_buf);
>> -        g_free(XBZRLE.decoded_buf);
>>          XBZRLE.cache = NULL;
>>      }

I wonder if it would be better to split the XBZRLE data structure
into part used by the source side and part used by the destination
side; the current arrangement looks extremely prone to bugs
like this one where somebody forgets that some of the fields
are not relevant to whichever of src/dst the code path they're
writing is used on.

thanks
-- PMM



reply via email to

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