qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive?
@ 2020-11-06 17:22 Peter Maydell
  2020-11-06 20:35 ` Eric Blake
  0 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2020-11-06 17:22 UTC (permalink / raw)
  To: QEMU Developers

Hi; Coverity's "you usually check the return value of this function
but you didn't do that here" heuristic has fired on the code in
nbd/server.c:bitmap_to_extents() -- the function nbd_extent_array_add()
is called five times in server.c, and the return value is checked
in four of those, but not in the final call at the end of
bitmap_to_extents(). (CID 1436125.)

Is this a false positive, or should the caller be handling an
error here ?

thanks
-- PMM


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive?
  2020-11-06 17:22 nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive? Peter Maydell
@ 2020-11-06 20:35 ` Eric Blake
  2020-11-06 22:53   ` Peter Maydell
  0 siblings, 1 reply; 6+ messages in thread
From: Eric Blake @ 2020-11-06 20:35 UTC (permalink / raw)
  To: Peter Maydell, QEMU Developers, Vladimir Sementsov-Ogievskiy

On 11/6/20 11:22 AM, Peter Maydell wrote:
> Hi; Coverity's "you usually check the return value of this function
> but you didn't do that here" heuristic has fired on the code in
> nbd/server.c:bitmap_to_extents() -- the function nbd_extent_array_add()
> is called five times in server.c, and the return value is checked
> in four of those, but not in the final call at the end of
> bitmap_to_extents(). (CID 1436125.)
> 
> Is this a false positive, or should the caller be handling an
> error here ?

False positive, but I don't mind tweaking the code to silence Coverity.
This should do it; let me know if I should turn it into a formal patch.

diff --git i/nbd/server.c w/nbd/server.c
index d145e1a69083..377698a2ce85 100644
--- i/nbd/server.c
+++ w/nbd/server.c
@@ -2128,9 +2128,8 @@ static void bitmap_to_extents(BdrvDirtyBitmap *bitmap,
         }
     }

-    if (!full) {
-        /* last non dirty extent */
-        nbd_extent_array_add(es, end - start, 0);
+    if (!full && nbd_extent_array_add(es, end - start, 0) < 0) {
+        /* last non dirty extent, not a problem if array is now full */
     }

     bdrv_dirty_bitmap_unlock(bitmap);


-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive?
  2020-11-06 20:35 ` Eric Blake
@ 2020-11-06 22:53   ` Peter Maydell
  2020-11-09  7:17     ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2020-11-06 22:53 UTC (permalink / raw)
  To: Eric Blake; +Cc: Vladimir Sementsov-Ogievskiy, QEMU Developers

On Fri, 6 Nov 2020 at 20:36, Eric Blake <eblake@redhat.com> wrote:
>
> On 11/6/20 11:22 AM, Peter Maydell wrote:
> > Hi; Coverity's "you usually check the return value of this function
> > but you didn't do that here" heuristic has fired on the code in
> > nbd/server.c:bitmap_to_extents() -- the function nbd_extent_array_add()
> > is called five times in server.c, and the return value is checked
> > in four of those, but not in the final call at the end of
> > bitmap_to_extents(). (CID 1436125.)
> >
> > Is this a false positive, or should the caller be handling an
> > error here ?
>
> False positive, but I don't mind tweaking the code to silence Coverity.
> This should do it; let me know if I should turn it into a formal patch.
>
> diff --git i/nbd/server.c w/nbd/server.c
> index d145e1a69083..377698a2ce85 100644
> --- i/nbd/server.c
> +++ w/nbd/server.c
> @@ -2128,9 +2128,8 @@ static void bitmap_to_extents(BdrvDirtyBitmap *bitmap,
>          }
>      }
>
> -    if (!full) {
> -        /* last non dirty extent */
> -        nbd_extent_array_add(es, end - start, 0);
> +    if (!full && nbd_extent_array_add(es, end - start, 0) < 0) {
> +        /* last non dirty extent, not a problem if array is now full */
>      }
>
>      bdrv_dirty_bitmap_unlock(bitmap);

Hmm; that looks a little odd but I guess it's a bit more
documentative of the intent. Up to you whether you want
to submit it as a patch or not I guess :-)

thanks
-- PMM


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive?
  2020-11-06 22:53   ` Peter Maydell
@ 2020-11-09  7:17     ` Vladimir Sementsov-Ogievskiy
  2020-11-09 15:22       ` Eric Blake
  0 siblings, 1 reply; 6+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2020-11-09  7:17 UTC (permalink / raw)
  To: Peter Maydell, Eric Blake; +Cc: QEMU Developers

07.11.2020 01:53, Peter Maydell wrote:
> On Fri, 6 Nov 2020 at 20:36, Eric Blake <eblake@redhat.com> wrote:
>>
>> On 11/6/20 11:22 AM, Peter Maydell wrote:
>>> Hi; Coverity's "you usually check the return value of this function
>>> but you didn't do that here" heuristic has fired on the code in
>>> nbd/server.c:bitmap_to_extents() -- the function nbd_extent_array_add()
>>> is called five times in server.c, and the return value is checked
>>> in four of those, but not in the final call at the end of
>>> bitmap_to_extents(). (CID 1436125.)
>>>
>>> Is this a false positive, or should the caller be handling an
>>> error here ?
>>
>> False positive, but I don't mind tweaking the code to silence Coverity.
>> This should do it; let me know if I should turn it into a formal patch.
>>
>> diff --git i/nbd/server.c w/nbd/server.c
>> index d145e1a69083..377698a2ce85 100644
>> --- i/nbd/server.c
>> +++ w/nbd/server.c
>> @@ -2128,9 +2128,8 @@ static void bitmap_to_extents(BdrvDirtyBitmap *bitmap,
>>           }
>>       }
>>
>> -    if (!full) {
>> -        /* last non dirty extent */
>> -        nbd_extent_array_add(es, end - start, 0);
>> +    if (!full && nbd_extent_array_add(es, end - start, 0) < 0) {
>> +        /* last non dirty extent, not a problem if array is now full */
>>       }
>>
>>       bdrv_dirty_bitmap_unlock(bitmap);
> 
> Hmm; that looks a little odd but I guess it's a bit more
> documentative of the intent. Up to you whether you want
> to submit it as a patch or not I guess :-)
> 
> thanks
> -- PMM
> 


update_refcount() in block/qcow2-refcount.c is defined as

  static int QEMU_WARN_UNUSED_RESULT update_refcount(..);

May be, use such specifier for nbd_extent_array_add()?

-- 
Best regards,
Vladimir


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive?
  2020-11-09  7:17     ` Vladimir Sementsov-Ogievskiy
@ 2020-11-09 15:22       ` Eric Blake
  2020-11-10  7:29         ` Vladimir Sementsov-Ogievskiy
  0 siblings, 1 reply; 6+ messages in thread
From: Eric Blake @ 2020-11-09 15:22 UTC (permalink / raw)
  To: Vladimir Sementsov-Ogievskiy, Peter Maydell; +Cc: QEMU Developers

On 11/9/20 1:17 AM, Vladimir Sementsov-Ogievskiy wrote:
> 07.11.2020 01:53, Peter Maydell wrote:
>> On Fri, 6 Nov 2020 at 20:36, Eric Blake <eblake@redhat.com> wrote:
>>>
>>> On 11/6/20 11:22 AM, Peter Maydell wrote:
>>>> Hi; Coverity's "you usually check the return value of this function
>>>> but you didn't do that here" heuristic has fired on the code in
>>>> nbd/server.c:bitmap_to_extents() -- the function nbd_extent_array_add()
>>>> is called five times in server.c, and the return value is checked
>>>> in four of those, but not in the final call at the end of
>>>> bitmap_to_extents(). (CID 1436125.)
>>>>
>>>> Is this a false positive, or should the caller be handling an
>>>> error here ?
>>>
>>> False positive, but I don't mind tweaking the code to silence Coverity.
>>> This should do it; let me know if I should turn it into a formal patch.
>>>
>>> diff --git i/nbd/server.c w/nbd/server.c
>>> index d145e1a69083..377698a2ce85 100644
>>> --- i/nbd/server.c
>>> +++ w/nbd/server.c
>>> @@ -2128,9 +2128,8 @@ static void bitmap_to_extents(BdrvDirtyBitmap
>>> *bitmap,
>>>           }
>>>       }
>>>
>>> -    if (!full) {
>>> -        /* last non dirty extent */
>>> -        nbd_extent_array_add(es, end - start, 0);
>>> +    if (!full && nbd_extent_array_add(es, end - start, 0) < 0) {
>>> +        /* last non dirty extent, not a problem if array is now full */
>>>       }
>>>
>>>       bdrv_dirty_bitmap_unlock(bitmap);
>>
>> Hmm; that looks a little odd but I guess it's a bit more
>> documentative of the intent. Up to you whether you want
>> to submit it as a patch or not I guess :-)
>>
>> thanks
>> -- PMM
>>
> 
> 
> update_refcount() in block/qcow2-refcount.c is defined as
> 
>  static int QEMU_WARN_UNUSED_RESULT update_refcount(..);
> 
> May be, use such specifier for nbd_extent_array_add()?

Adding that attribute would _force_ us to modify the code, rather than
the current situation where we are mulling the modification merely to
pacify Coverity's 4-out-of-5 analysis.  We don't strictly need to always
use the return value (hence my declaration that this was a Coverity
false positive), but declaring that we always want to use it, and fixing
the code fallout, would indeed silence Coverity.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive?
  2020-11-09 15:22       ` Eric Blake
@ 2020-11-10  7:29         ` Vladimir Sementsov-Ogievskiy
  0 siblings, 0 replies; 6+ messages in thread
From: Vladimir Sementsov-Ogievskiy @ 2020-11-10  7:29 UTC (permalink / raw)
  To: Eric Blake, Peter Maydell; +Cc: QEMU Developers

09.11.2020 18:22, Eric Blake wrote:
> On 11/9/20 1:17 AM, Vladimir Sementsov-Ogievskiy wrote:
>> 07.11.2020 01:53, Peter Maydell wrote:
>>> On Fri, 6 Nov 2020 at 20:36, Eric Blake <eblake@redhat.com> wrote:
>>>>
>>>> On 11/6/20 11:22 AM, Peter Maydell wrote:
>>>>> Hi; Coverity's "you usually check the return value of this function
>>>>> but you didn't do that here" heuristic has fired on the code in
>>>>> nbd/server.c:bitmap_to_extents() -- the function nbd_extent_array_add()
>>>>> is called five times in server.c, and the return value is checked
>>>>> in four of those, but not in the final call at the end of
>>>>> bitmap_to_extents(). (CID 1436125.)
>>>>>
>>>>> Is this a false positive, or should the caller be handling an
>>>>> error here ?
>>>>
>>>> False positive, but I don't mind tweaking the code to silence Coverity.
>>>> This should do it; let me know if I should turn it into a formal patch.
>>>>
>>>> diff --git i/nbd/server.c w/nbd/server.c
>>>> index d145e1a69083..377698a2ce85 100644
>>>> --- i/nbd/server.c
>>>> +++ w/nbd/server.c
>>>> @@ -2128,9 +2128,8 @@ static void bitmap_to_extents(BdrvDirtyBitmap
>>>> *bitmap,
>>>>            }
>>>>        }
>>>>
>>>> -    if (!full) {
>>>> -        /* last non dirty extent */
>>>> -        nbd_extent_array_add(es, end - start, 0);
>>>> +    if (!full && nbd_extent_array_add(es, end - start, 0) < 0) {
>>>> +        /* last non dirty extent, not a problem if array is now full */
>>>>        }
>>>>
>>>>        bdrv_dirty_bitmap_unlock(bitmap);
>>>
>>> Hmm; that looks a little odd but I guess it's a bit more
>>> documentative of the intent. Up to you whether you want
>>> to submit it as a patch or not I guess :-)
>>>
>>> thanks
>>> -- PMM
>>>
>>
>>
>> update_refcount() in block/qcow2-refcount.c is defined as
>>
>>   static int QEMU_WARN_UNUSED_RESULT update_refcount(..);
>>
>> May be, use such specifier for nbd_extent_array_add()?
> 
> Adding that attribute would _force_ us to modify the code, rather than
> the current situation where we are mulling the modification merely to
> pacify Coverity's 4-out-of-5 analysis.  We don't strictly need to always
> use the return value (hence my declaration that this was a Coverity
> false positive), but declaring that we always want to use it, and fixing
> the code fallout, would indeed silence Coverity.
> 

Oh, I thought that this macro has the opposite meaning :\

-- 
Best regards,
Vladimir


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-11-10  7:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-06 17:22 nbd: bitmap_to_extents() calls nbd_extent_array_add() without checking return value: coverity false positive? Peter Maydell
2020-11-06 20:35 ` Eric Blake
2020-11-06 22:53   ` Peter Maydell
2020-11-09  7:17     ` Vladimir Sementsov-Ogievskiy
2020-11-09 15:22       ` Eric Blake
2020-11-10  7:29         ` Vladimir Sementsov-Ogievskiy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).