[libvirt] [PATCH v2] udev: fix crash in libudev logging
John Ferlan
jferlan at redhat.com
Sat Jun 15 11:19:36 UTC 2013
On 06/14/2013 06:54 AM, Ján Tomko wrote:
> On 06/14/2013 11:18 AM, Michal Privoznik wrote:
>> On 14.06.2013 10:53, Guannan Ren wrote:
>>> On 06/13/2013 09:56 PM, Ján Tomko wrote:
>>>> + virBuffer buf = VIR_BUFFER_INITIALIZER;
>>>> + const char *format = NULL;
>>>> +
>>>> + virBufferAdd(&buf, fmt, -1);
>>>> + virBufferTrim(&buf, "\n", -1);
Coverity analysis uncovered a complaint in last nights run after
this was pushed. The virBufferTrim() call has "other" places where
the return status is checked, but this call doesn't. Using cscope
I also see that virNetSSHCheckHostKey() in virnetsshsession.c
does not check return status.
FILE: src/node_device/node_device_udev.c
Coverity error seen in the output:
ERROR: CHECKED_RETURN
FUNCTION: udevLogFunction
Coverity Events:
372
virBufferAdd(&buf, fmt, -1);
Calling function "virBufferTrim(virBufferPtr,
(1) Event check_return: char const *, int)" without checking return
value (as is done elsewhere 5 out of 6 times).
No check of the return value of
(7) Event unchecked_value: "virBufferTrim(&buf, "\n", -
1)".
[example_checked][example_checked]
Also see events: [example_checked][example_checked]
[example_checked]
------------------------------------------------------------
>>>> +
>>>
>>> We need a virBufferError checking here before formatting into
>>> a string.
>
> virBufferContentAndReset already checks for the error and returns NULL if
> there was one. The only possible error here is ENOMEM.
>
>>
>> In which case we want to got with fmt as provided.
>>
>> Michal
>>
>
> If we aren't going to report the buffer error, I think checking format for
> NULL should be enough.
>
> I'll squash this in before pushing:
>
> diff --git a/src/node_device/node_device_udev.c
> b/src/node_device/node_device_udev.c
> index b462549..bb58415 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -374,10 +374,9 @@ udevLogFunction(struct udev *udev ATTRIBUTE_UNUSED,
>
> format = virBufferContentAndReset(&buf);
>
> - if (format)
> - virLogVMessage(VIR_LOG_FROM_LIBRARY,
> - virLogPriorityFromSyslog(priority),
> - file, line, fn, NULL, format, args);
> + virLogVMessage(VIR_LOG_FROM_LIBRARY,
> + virLogPriorityFromSyslog(priority),
> + file, line, fn, NULL, format ? format : fmt, args);
>
> VIR_FREE(format);
> }
>
>
> Jan
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
More information about the libvir-list
mailing list