Peter Maydell <[email protected]> writes:

> On Tue, 23 Dec 2025 at 14:32, Peter Xu <[email protected]> wrote:
>>
>> From: Fabiano Rosas <[email protected]>
>>
>> The MigrationState is a QOM object with TYPE_DEVICE as a parent. This
>> was done about eight years ago so the migration code could make use of
>> qdev properties to define the defaults for the migration parameters
>> and to be able to expose migration knobs for debugging via the
>> '-global migration' command line option.
>>
>> Due to unrelated historical reasons, three of the migration parameters
>> (TLS options) received different types when used via the
>> query-migrate-parameters QMP command than with the
>> migrate-set-parameters command. This has created a lot of duplication
>> in the migration code and in the QAPI documentation because the whole
>> of MigrationParameters had to be duplicated as well.
>>
>> The migration code is now being fixed to remove the duplication and
>> for that to happen the offending fields need to be reconciled into a
>> single type. The StrOrNull type is going to be used.
>>
>> To keep the command line compatibility, the parameters need to
>> continue being exposed via qdev properties accessible from the command
>> line. Introduce a qdev property StrOrNull just for that.
>>
>> Note that this code is being kept in migration/options.c as this
>> version of StrOrNull doesn't need to handle QNULL because it was never
>> a valid option in the previous command line, which took a string.
>>
>> Signed-off-by: Fabiano Rosas <[email protected]>
>> Acked-by: Peter Xu <[email protected]>
>> Link: https://lore.kernel.org/r/[email protected]
>> Signed-off-by: Peter Xu <[email protected]>
>
> Coverity also suspects a leak in the get function (CID 1643920):
>
>> +static void get_StrOrNull(Object *obj, Visitor *v, const char *name,
>> +                          void *opaque, Error **errp)
>> +{
>> +    const Property *prop = opaque;
>> +    StrOrNull **ptr = object_field_prop_ptr(obj, prop);
>> +    StrOrNull *str_or_null = *ptr;
>> +
>> +    if (!str_or_null) {
>> +        str_or_null = g_new0(StrOrNull, 1);
>
> We allocate memory here, but we never pass this pointer
> on to anybody else, and we don't free it either.
>

Thank you, I'll look into both issues right away.

Reply via email to