qemu-block
[Top][All Lists]
Advanced

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

Re: [Qemu-block] [Qemu-devel] [PATCH 1/2] qemu-img: Resolve relative bac


From: Max Reitz
Subject: Re: [Qemu-block] [Qemu-devel] [PATCH 1/2] qemu-img: Resolve relative backing paths in rebase
Date: Wed, 9 May 2018 19:56:31 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0

On 2018-05-09 19:20, Eric Blake wrote:
> On 05/09/2018 10:49 AM, Max Reitz wrote:
>> Currently, rebase interprets a relative path for the new backing image
>> as follows:
>> (1) Open the new backing image with the given relative path (thus
>> relative to
>>      qemu-img's working directory).
>> (2) Write it directly into the overlay's backing path field (thus
>>      relative to the overlay).
>>
>> If the overlay is not in qemu-img's working directory, both will be
>> different interpretations, which may either lead to an error somewhere
>> (either rebase fails because it cannot open the new backing image, or
>>   your overlay becomes unusable because its backing path does not point
>>   to a file), or, even worse, it may result in your rebase being
>> performed for a different backing file than what your overlay will point
>> to after the rebase.
>>
>> Fix this by interpreting the target backing path as relative to the
>> overlay, like qemu-img does everywhere else.
>>
>> Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1569835
>> Cc: address@hidden
>> Signed-off-by: Max Reitz <address@hidden>
>> ---
> 
>> -            blk_new_backing = blk_new_open(out_baseimg, NULL,
>> +            overlay_filename = bs->exact_filename[0] ?
>> bs->exact_filename
>> +                                                     : bs->filename;
>> +            out_real_path = g_malloc(PATH_MAX);
>> +
>> +           
>> bdrv_get_full_backing_filename_from_filename(overlay_filename,
>> +                                                         out_baseimg,
>> +                                                         out_real_path,
>> +                                                         PATH_MAX,
>> +                                                         &local_err);
>> +            if (local_err) {
>> +                error_reportf_err(local_err,
>> +                                  "Could not resolve backing
>> filename: ");
>> +                ret = -1;
>> +                goto out;
> 
> Leaks out_real_path.

Well, “leaks” is relative, considering that out: will effectively exit
the process immediately, but I can’t claim it was on purpose. O:-)

(I should have trusted my gut feeling that the single g_free() can’t
possibly be enough...)

Max

>> +            }
>> +
>> +            blk_new_backing = blk_new_open(out_real_path, NULL,
>>                                              options, src_flags,
>> &local_err);
>> +            g_free(out_real_path);
> 
> Otherwise looks good.
> 


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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