qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Laurent Vivier <laurent@vivier.eu>, qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Qemu-block <qemu-block@nongnu.org>
Subject: Re: [PATCH] q800: fix coverity warning CID 1412799
Date: Mon, 17 Feb 2020 17:30:10 +0100	[thread overview]
Message-ID: <a473881b-b682-33dd-694d-a30da60655fd@redhat.com> (raw)
In-Reply-To: <2b2dd523-7420-97a1-2223-15bba139ce7a@redhat.com>

Hi Laurent,

Cc'ing qemu-block@

On 2/10/20 3:56 PM, Philippe Mathieu-Daudé wrote:
> On 2/10/20 2:22 PM, Laurent Vivier wrote:
>> Check the return value of blk_write() and log an error if any
>>
> 
> Fixes: Coverity CID 1412799 (Error handling issues)
> 
>> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
>> ---
>>   hw/misc/mac_via.c | 7 +++++--
>>   1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
>> index b7d0012794..81343301b1 100644
>> --- a/hw/misc/mac_via.c
>> +++ b/hw/misc/mac_via.c
>> @@ -30,6 +30,7 @@
>>   #include "hw/qdev-properties.h"
>>   #include "sysemu/block-backend.h"
>>   #include "trace.h"
>> +#include "qemu/log.h"
>>   /*
>>    * VIAs: There are two in every machine,
>> @@ -381,8 +382,10 @@ static void via2_irq_request(void *opaque, int 
>> irq, int level)
>>   static void pram_update(MacVIAState *m)
>>   {
>>       if (m->blk) {
>> -        blk_pwrite(m->blk, 0, m->mos6522_via1.PRAM,
>> -                   sizeof(m->mos6522_via1.PRAM), 0);
>> +        if (blk_pwrite(m->blk, 0, m->mos6522_via1.PRAM,
>> +                       sizeof(m->mos6522_via1.PRAM), 0) < 0) {
>> +            qemu_log("pram_update: cannot write to file\n");

I am not comfortable reviewing this patch, because it use a undocumented 
function. If I understand co-routine code enough, this eventually calls 
blk_co_pwritev_part(), which on success returns bdrv_co_pwritev_part(), 
which on success returns bdrv_aligned_pwritev(), which itself returns 0 
or errno (as negative value).

I don't understand how to treat the error, but apparently other devices 
do the same (only report some error and discarding the block not written).

So this can happens if your filesystem got full, the VM is running, the 
device can not sync the VIA PRAM but keeps running. You let the user the 
possibility to make some space on the filesystem so the next sync will 
succeed.

This does not seem critical, so I dare to add:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

But I'd rather have one of the block folks reviewing this pattern.

Regards,

Phil.

>> +        }
>>       }
>>   }
>>



      reply	other threads:[~2020-02-17 16:31 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-10 13:22 [PATCH] q800: fix coverity warning CID 1412799 Laurent Vivier
2020-02-10 14:56 ` Philippe Mathieu-Daudé
2020-02-17 16:30   ` Philippe Mathieu-Daudé [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a473881b-b682-33dd-694d-a30da60655fd@redhat.com \
    --to=philmd@redhat.com \
    --cc=laurent@vivier.eu \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).