[libvirt] [PATCH v2 2/8] conf: add node_device_event handling

Cole Robinson crobinso at redhat.com
Wed Aug 3 22:53:17 UTC 2016


On 08/03/2016 06:39 PM, John Ferlan wrote:
> 
> 
> On 08/03/2016 06:30 PM, Cole Robinson wrote:
>> On 08/03/2016 05:57 PM, John Ferlan wrote:
>>>
>>>
>>> On 08/03/2016 05:37 PM, Cole Robinson wrote:
>>>> On 08/03/2016 09:40 AM, John Ferlan wrote:
>>>>>
>>>>>
>>>>> On 07/28/2016 08:02 AM, Jovanka Gulicoska wrote:
>>>>>> Add node device event handling infrastructure to node_device_event.[ch]
>>>>>> ---
>>>>>>  src/Makefile.am              |   5 +
>>>>>>  src/conf/node_device_event.c | 234 +++++++++++++++++++++++++++++++++++++++++++
>>>>>>  src/conf/node_device_event.h |  59 +++++++++++
>>>>>>  src/libvirt_private.syms     |   5 +
>>>>>>  4 files changed, 303 insertions(+)
>>>>>>  create mode 100644 src/conf/node_device_event.c
>>>>>>  create mode 100644 src/conf/node_device_event.h
>>>>>>
>>>>>
>>>>> [...]
>>>>>
>>>>>> diff --git a/src/conf/node_device_event.c b/src/conf/node_device_event.c
>>>>>> new file mode 100644
>>>>>> index 0000000..61bc912
>>>>>
>>>>> [...]
>>>>>
>>>>>> +
>>>>>> +/**
>>>>>> + * virNodeDeviceEventLifecycleNew:
>>>>>> + * @name: name of the node device object the event describes
>>>>>> + * @type: type of lifecycle event
>>>>>> + * @detail: more details about @type
>>>>>> + *
>>>>>> + * Create a new node device lifecycle event.
>>>>>> + */
>>>>>> +virObjectEventPtr
>>>>>> +virNodeDeviceEventLifecycleNew(const char *name,
>>>>>> +                               int type,
>>>>>> +                               int detail)
>>>>>> +{
>>>>>> +    virNodeDeviceEventLifecyclePtr event;
>>>>>> +
>>>>>> +    if (virNodeDeviceEventsInitialize() < 0)
>>>>>> +        return NULL;
>>>>>> +
>>>>>> +    if (!(event = virObjectEventNew(virNodeDeviceEventLifecycleClass,
>>>>>> +                                    virNodeDeviceEventDispatchDefaultFunc,
>>>>>> +                                    VIR_NODE_DEVICE_EVENT_ID_LIFECYCLE,
>>>>>> +                                    0, name, NULL, name)))
>>>>>                                                 ^^^^
>>>>>
>>>>> This has caused a Coverity build failure since the prototype has:
>>>>>
>>>>> ATTRIBUTE_NONNULL(6)
>>>>>
>>>>
>>>> I think just dropping it is fine? The code was updated to handle uuid=NULL
>>>>
>>>> diff --git a/src/conf/object_event_private.h b/src/conf/object_event_private.h
>>>> index 92c25d4..27b461f 100644
>>>> --- a/src/conf/object_event_private.h
>>>> +++ b/src/conf/object_event_private.h
>>>> @@ -106,6 +106,6 @@ virObjectEventNew(virClassPtr klass,
>>>>                    const unsigned char *uuid,
>>>>                    const char *key)
>>>>      ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5)
>>>> -    ATTRIBUTE_NONNULL(6) ATTRIBUTE_NONNULL(7);
>>>> +    ATTRIBUTE_NONNULL(7);
>>>>
>>>>  #endif
>>>>
>>>>> It gets even worse in the function and needs to be resolved before the
>>>>> "next" release.
>>>>>
>>>>
>>>> I can't parse this sentence... are there additional issues?
>>>>
>>> virObjectEventNew(...,const unsigned char *uuid,...)
>>> ...
>>>     memcpy(event->meta.uuid, uuid, VIR_UUID_BUFLEN);
>>> ...
>>>
>>> e.g.
>>>     memcpy(event->meta.uuid, NULL, VIR_UUID_BUFLEN);
>>>
>>
>> But the full code from virObjectEventNew handles that case by checking for
>> non-NULL uuid first:
>>
>>     if (uuid)
>>         memcpy(event->meta.uuid, uuid, VIR_UUID_BUFLEN);
>>
> 
> Hmm.... strange, my coverity environment AFU'd....  Ahhh I see why.
> 
> OK, removing the ATTRIBUTE_NONNULL(6) works just fine
> 
> ACK for that
> 
> John
> 
> Long story short - recent update to f24 has for some reason caused
> compilation failures for "-Wnonnull-compare"'s within the coverity build
> environment, so I made some local changes to get past it while I figured
> out what the issue was. That was one of the many changes.
> 

Got it. I pushed that change:

commit e584615b81b5cabb252b1866171bde25b4f06d05
Author: Cole Robinson <crobinso at redhat.com>
Date:   Wed Aug 3 18:45:50 2016 -0400

    conf: events: Fix coverity warning

    Since 2bfa75134 virObjectEventNew can be passed a NULL 'uuid' value,
    so drop the ATTRIBUTE_NONNULL annotation

Thanks,
Cole




More information about the libvir-list mailing list