diff mbox series

[1/2] tests/qtest/migration: Ignore if socket-address is missing to avoid crash below

Message ID 20240319204840.211632-1-het.gala@nutanix.com (mailing list archive)
State New, archived
Headers show
Series [1/2] tests/qtest/migration: Ignore if socket-address is missing to avoid crash below | expand

Commit Message

Het Gala March 19, 2024, 8:48 p.m. UTC
'object' can return NULL if there is no socket-address, such as with a
file migration. Then the visitor code below fails and the test crashes.

Ignore and return NULL when socket-address is missing in the reply so
we don't break future tests that use a non-socket type.

Suggested-by: Fabiano Rosas <farosas@suse.de>
Signed-off-by: Het Gala <het.gala@nutanix.com>
---
 tests/qtest/migration-helpers.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Het Gala March 19, 2024, 8:52 p.m. UTC | #1
FYI: This 2 patches are rebased on top of another 
(tests/qtest/migration: Add tests for introducing 'channels' argument in 
migrate QAPIs) series.
Can find the build for both the patches here: 
https://gitlab.com/galahet/Qemu/-/pipelines/1219841944

On 20/03/24 2:18 am, Het Gala wrote:
> 'object' can return NULL if there is no socket-address, such as with a
> file migration. Then the visitor code below fails and the test crashes.
>
> Ignore and return NULL when socket-address is missing in the reply so
> we don't break future tests that use a non-socket type.
>
> Suggested-by: Fabiano Rosas <farosas@suse.de>
> Signed-off-by: Het Gala <het.gala@nutanix.com>
> ---
>   tests/qtest/migration-helpers.c | 4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
> index b2a90469fb..fb7156f09a 100644
> --- a/tests/qtest/migration-helpers.c
> +++ b/tests/qtest/migration-helpers.c
> @@ -90,6 +90,10 @@ static SocketAddress *migrate_get_socket_address(QTestState *who)
>       QObject *object;
>   
>       rsp = migrate_query(who);
> +
> +    if (!qdict_haskey(rsp, "socket-address")) {
> +        return NULL;
> +    }
>       object = qdict_get(rsp, "socket-address");
>   
>       iv = qobject_input_visitor_new(object);
Regards,
Het Gala
Peter Xu March 19, 2024, 9:57 p.m. UTC | #2
On Tue, Mar 19, 2024 at 08:48:39PM +0000, Het Gala wrote:
> 'object' can return NULL if there is no socket-address, such as with a
> file migration. Then the visitor code below fails and the test crashes.
> 
> Ignore and return NULL when socket-address is missing in the reply so
> we don't break future tests that use a non-socket type.

Hmm, this patch isn't as clear to me.  Even if this can return NULL now,
it'll soon crash at some later point, no?

IMHO such patch is more suitable to be included in the same patch where
such new tests will be introduced, then we're addressing some real test
code changes that will work, rather than worrying on what will happen in
the future (and as I mentioned, i don't think it fully resolved that either..)

Thanks,

> 
> Suggested-by: Fabiano Rosas <farosas@suse.de>
> Signed-off-by: Het Gala <het.gala@nutanix.com>
> ---
>  tests/qtest/migration-helpers.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
> index b2a90469fb..fb7156f09a 100644
> --- a/tests/qtest/migration-helpers.c
> +++ b/tests/qtest/migration-helpers.c
> @@ -90,6 +90,10 @@ static SocketAddress *migrate_get_socket_address(QTestState *who)
>      QObject *object;
>  
>      rsp = migrate_query(who);
> +
> +    if (!qdict_haskey(rsp, "socket-address")) {
> +        return NULL;
> +    }
>      object = qdict_get(rsp, "socket-address");
>  
>      iv = qobject_input_visitor_new(object);
> -- 
> 2.22.3
>
Het Gala March 20, 2024, 5:17 a.m. UTC | #3
On 20/03/24 3:27 am, Peter Xu wrote:
> On Tue, Mar 19, 2024 at 08:48:39PM +0000, Het Gala wrote:
>> 'object' can return NULL if there is no socket-address, such as with a
>> file migration. Then the visitor code below fails and the test crashes.
>>
>> Ignore and return NULL when socket-address is missing in the reply so
>> we don't break future tests that use a non-socket type.
> Hmm, this patch isn't as clear to me.  Even if this can return NULL now,
> it'll soon crash at some later point, no?
It won't crash IMO, the next function SocketAddress_to_str for a non-socket
type would return an proper error ?
> IMHO such patch is more suitable to be included in the same patch where
> such new tests will be introduced, then we're addressing some real test
> code changes that will work, rather than worrying on what will happen in
> the future (and as I mentioned, i don't think it fully resolved that either..)
>
> Thanks,
Maybe, Fabiano can pick this patch, and add along file migration qtests 
patch ?
>> Suggested-by: Fabiano Rosas<farosas@suse.de>
>> Signed-off-by: Het Gala<het.gala@nutanix.com>
>> ---
>>   tests/qtest/migration-helpers.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
>> index b2a90469fb..fb7156f09a 100644
>> --- a/tests/qtest/migration-helpers.c
>> +++ b/tests/qtest/migration-helpers.c
>> @@ -90,6 +90,10 @@ static SocketAddress *migrate_get_socket_address(QTestState *who)
>>       QObject *object;
>>   
>>       rsp = migrate_query(who);
>> +
>> +    if (!qdict_haskey(rsp, "socket-address")) {
>> +        return NULL;
>> +    }
>>       object = qdict_get(rsp, "socket-address");
>>   
>>       iv = qobject_input_visitor_new(object);
>> -- 
>> 2.22.3
>>
Regards,
Het Gala
Peter Xu March 20, 2024, 1:15 p.m. UTC | #4
On Wed, Mar 20, 2024 at 10:47:18AM +0530, Het Gala wrote:
> It won't crash IMO, the next function SocketAddress_to_str for a non-socket
> type would return an proper error ?

Both SocketAddress_to_str() and SocketAddress_to_qdict() will crash with a
NULL pointer passed in right now.

Thanks,
Fabiano Rosas March 20, 2024, 1:19 p.m. UTC | #5
Het Gala <het.gala@nutanix.com> writes:

> On 20/03/24 3:27 am, Peter Xu wrote:
>> On Tue, Mar 19, 2024 at 08:48:39PM +0000, Het Gala wrote:
>>> 'object' can return NULL if there is no socket-address, such as with a
>>> file migration. Then the visitor code below fails and the test crashes.
>>>
>>> Ignore and return NULL when socket-address is missing in the reply so
>>> we don't break future tests that use a non-socket type.
>> Hmm, this patch isn't as clear to me.  Even if this can return NULL now,
>> it'll soon crash at some later point, no?
> It won't crash IMO, the next function SocketAddress_to_str for a non-socket
> type would return an proper error ?
>> IMHO such patch is more suitable to be included in the same patch where
>> such new tests will be introduced, then we're addressing some real test
>> code changes that will work, rather than worrying on what will happen in
>> the future (and as I mentioned, i don't think it fully resolved that either..)
>>
>> Thanks,
> Maybe, Fabiano can pick this patch, and add along file migration qtests 
> patch ?

Yep.

>>> Suggested-by: Fabiano Rosas<farosas@suse.de>
>>> Signed-off-by: Het Gala<het.gala@nutanix.com>
>>> ---
>>>   tests/qtest/migration-helpers.c | 4 ++++
>>>   1 file changed, 4 insertions(+)
>>>
>>> diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
>>> index b2a90469fb..fb7156f09a 100644
>>> --- a/tests/qtest/migration-helpers.c
>>> +++ b/tests/qtest/migration-helpers.c
>>> @@ -90,6 +90,10 @@ static SocketAddress *migrate_get_socket_address(QTestState *who)
>>>       QObject *object;
>>>   
>>>       rsp = migrate_query(who);
>>> +
>>> +    if (!qdict_haskey(rsp, "socket-address")) {
>>> +        return NULL;
>>> +    }
>>>       object = qdict_get(rsp, "socket-address");
>>>   
>>>       iv = qobject_input_visitor_new(object);
>>> -- 
>>> 2.22.3
>>>
> Regards,
> Het Gala
Het Gala March 20, 2024, 2:01 p.m. UTC | #6
On 20/03/24 6:49 pm, Fabiano Rosas wrote:
> Het Gala<het.gala@nutanix.com>  writes:
>
>> On 20/03/24 3:27 am, Peter Xu wrote:
>>> On Tue, Mar 19, 2024 at 08:48:39PM +0000, Het Gala wrote:
>>>> 'object' can return NULL if there is no socket-address, such as with a
>>>> file migration. Then the visitor code below fails and the test crashes.
>>>>
>>>> Ignore and return NULL when socket-address is missing in the reply so
>>>> we don't break future tests that use a non-socket type.
>>> Hmm, this patch isn't as clear to me.  Even if this can return NULL now,
>>> it'll soon crash at some later point, no?
>> It won't crash IMO, the next function SocketAddress_to_str for a non-socket
>> type would return an proper error ?
>>> IMHO such patch is more suitable to be included in the same patch where
>>> such new tests will be introduced, then we're addressing some real test
>>> code changes that will work, rather than worrying on what will happen in
>>> the future (and as I mentioned, i don't think it fully resolved that either..)
>>>
>>> Thanks,
>> Maybe, Fabiano can pick this patch, and add along file migration qtests
>> patch ?
> Yep.
Thanks
>>>> @@ -90,6 +90,10 @@ static SocketAddress *migrate_get_socket_address(QTestState *who)
>>>>        QObject *object;
>>>>    
>>>>        rsp = migrate_query(who);
>>>> +
>>>> +    if (!qdict_haskey(rsp, "socket-address")) {
>>>> +        return NULL;
>>>> +    }
>>>>        object = qdict_get(rsp, "socket-address");
>>>>    
>>>>        iv = qobject_input_visitor_new(object);
>>>> -- 
>>>> 2.22.3
>>>>
>> Regards,
>> Het Gala

Regards,
Het Gala
diff mbox series

Patch

diff --git a/tests/qtest/migration-helpers.c b/tests/qtest/migration-helpers.c
index b2a90469fb..fb7156f09a 100644
--- a/tests/qtest/migration-helpers.c
+++ b/tests/qtest/migration-helpers.c
@@ -90,6 +90,10 @@  static SocketAddress *migrate_get_socket_address(QTestState *who)
     QObject *object;
 
     rsp = migrate_query(who);
+
+    if (!qdict_haskey(rsp, "socket-address")) {
+        return NULL;
+    }
     object = qdict_get(rsp, "socket-address");
 
     iv = qobject_input_visitor_new(object);