qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Fernando Casas Schössow" <casasfernando@outlook.com>,
	"Stefan Hajnoczi" <stefanha@gmail.com>
Cc: Natanael Copa <ncopa@alpinelinux.org>,
	Richard Henderson <rth@twiddle.net>,
	qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [Qemu-block] Guest unresponsive after Virtqueue size exceeded error
Date: Fri, 22 Feb 2019 15:55:16 +0100	[thread overview]
Message-ID: <ed1ffe8b-305b-9ae7-aa42-127f657622d7@redhat.com> (raw)
In-Reply-To: <VI1PR0602MB32457D7D0D6C05E83F14FE75A47F0@VI1PR0602MB3245.eurprd06.prod.outlook.com>

On 22/02/19 15:43, Fernando Casas Schössow wrote:
> Hi all,
> 
> Indeed I can confirm this issue occurs with the stock, unmodified
> QEMU binary provided with Alpine since at least Alpine 3.6 up to
> 3.9.
> 
> Is there any compiler flag I can tweak, add or remove to rebuild qemu
> and try to repro to confirm a possible workaround?

Nope, not yet.  However, I can try some experiments if you can provide
some information on how to rebuild an apk.

Paolo

> Thanks.
> 
> Fernando
> 
> Sent from my iPhone
> 
>> On 22 Feb 2019, at 15:04, Stefan Hajnoczi <stefanha@gmail.com> wrote:
>>
>> On Fri, Feb 22, 2019 at 12:57 PM Fernando Casas Schössow
>> <casasfernando@outlook.com> wrote:
>>
>> I have CCed Natanael Copa, qemu package maintainer in Alpine Linux.
>>
>> Fernando: Can you confirm that the bug occurs with an unmodified
>> Alpine Linux qemu binary?
>>
>> Richard: Commit 7db2145a6826b14efceb8dd64bfe6ad8647072eb ("bswap: Add
>> host endian unaligned access functions") introduced the unaligned
>> memory access functions in question here.  Please see below for
>> details on the bug - basically QEMU code assumes they are atomic, but
>> that is not guaranteed :(.  Any ideas for how to fix this?
>>
>> Natanael: It seems likely that the qemu package in Alpine Linux
>> suffers from a compilation issue resulting in a broken QEMU.  It may
>> be necessary to leave the compiler optimization flag alone in APKBUILD
>> to work around this problem.
>>
>> Here are the details.  QEMU relies on the compiler turning
>> memcpy(&dst, &src, 2) turning into a load instruction in
>> include/qemu/bswap.h:lduw_he_p() (explanation below):
>>
>> /* Any compiler worth its salt will turn these memcpy into native unaligned
>>   operations.  Thus we don't need to play games with packed attributes, or
>>   inline byte-by-byte stores.  */
>>
>> static inline int lduw_he_p(const void *ptr)
>> {
>>    uint16_t r;
>>    memcpy(&r, ptr, sizeof(r));
>>    return r;
>> }
>>
>> Here is the disassembly snippet of virtqueue_pop() from Fedora 29 that
>> shows the load instruction:
>>
>>  398166:       0f b7 42 02             movzwl 0x2(%rdx),%eax
>>  39816a:       66 89 43 32             mov    %ax,0x32(%rbx)
>>
>> Here is the instruction sequence in the Alpine Linux binary:
>>
>>  455562:    ba 02 00 00 00           mov    $0x2,%edx
>>  455567:    e8 74 24 f3 ff           callq  3879e0 <memcpy@plt>
>>  45556c:    0f b7 44 24 42           movzwl 0x42(%rsp),%eax
>>  455571:    66 41 89 47 32           mov    %ax,0x32(%r15)
>>
>> It's calling memcpy instead of using a load instruction.
>>
>> Fernando found that QEMU's virtqueue_pop() function sees bogus values
>> when loading a 16-bit guest RAM location.  Paolo figured out that the
>> bogus value can be produced by memcpy() when another thread is
>> updating the 16-bit memory location simultaneously.  This is a race
>> condition between one thread loading the 16-bit value and another
>> thread storing it (in this case a guest vcpu thread).  Sometimes
>> memcpy() may load one old byte and one new byte, resulting in a bogus
>> value.
>>
>> The symptom that Fernando experienced is a "Virtqueue size exceeded"
>> error message from QEMU and then the virtio-blk or virtio-scsi device
>> stops working.  This issue potentially affects other device emulation
>> code in QEMU as well, not just virtio devices.
>>
>> For the time being, I suggest tweaking the APKBUILD so the memcpy() is
>> not generated.  Hopefully QEMU can make the code more portable in the
>> future so the compiler always does the expected thing, but this may
>> not be easily possible.
>>
>> Stefan

  reply	other threads:[~2019-02-22 14:58 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-14 21:56 [Qemu-devel] Guest unresponsive after Virtqueue size exceeded error Fernando Casas Schössow
2017-06-16  6:58 ` Ladi Prosek
2017-06-16 10:11   ` Fernando Casas Schössow
2017-06-16 10:25     ` Ladi Prosek
2017-06-19 22:10       ` Fernando Casas Schössow
2017-06-20  5:59         ` Ladi Prosek
2017-06-20  6:30           ` Fernando Casas Schössow
2017-06-20  7:52             ` Ladi Prosek
2017-06-21 12:19               ` Fernando Casas Schössow
2017-06-22  7:43                 ` Ladi Prosek
2017-06-23  6:29                   ` Fernando Casas Schössow
     [not found]                   ` <1498199343.2815.0@smtp-mail.outlook.com>
2017-06-24  8:34                     ` Fernando Casas Schössow
2019-01-31 11:32                       ` Fernando Casas Schössow
2019-02-01  5:48                         ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2019-02-01  8:17                           ` Fernando Casas Schössow
2019-02-04  6:06                             ` Stefan Hajnoczi
2019-02-04  7:24                               ` Fernando Casas Schössow
     [not found]                                 ` <AM5PR0602MB32368CB5ADDEC05F42D8BC8FA46D0@AM5PR0602MB3236.eurprd06.prod.outlo ok.com>
2019-02-06  7:15                                   ` Fernando Casas Schössow
     [not found]                                 ` <AM5PR0602MB32368CB5ADDEC05F42D8BC8FA46D0@AM5PR0602MB3236.eurprd06.prod.outlo>
     [not found]                                   ` <VI1PR0602MB3245032D51A5DF45AF6E1952A46F0@VI1PR0602MB3245.eurprd06.prod.outlo ok.com>
2019-02-06 16:47                                     ` Fernando Casas Schössow
2019-02-11  3:17                                       ` Stefan Hajnoczi
2019-02-11  9:48                                         ` Fernando Casas Schössow
2019-02-18  7:21                                         ` Fernando Casas Schössow
     [not found]                                           ` <VI1PR0602MB3245424120D151F29884A7E2A4630@VI1PR0602MB3245.eurprd06.prod.outlo ok.com>
2019-02-19  7:26                                             ` Fernando Casas Schössow
2019-02-20 16:58                                           ` Stefan Hajnoczi
2019-02-20 17:53                                             ` Paolo Bonzini
2019-02-20 18:56                                               ` Fernando Casas Schössow
2019-02-21 11:11                                                 ` Stefan Hajnoczi
2019-02-21 11:33                                                   ` Fernando Casas Schössow
     [not found]                                                   ` <VI1PR0602MB3245593855B029B427ED544FA47E0@VI1PR0602MB3245.eurprd06.prod.outlook.com>
     [not found]                                                     ` <CAJSP0QUs9Yz2-k1KyVMwpgx6RwY9cK7qdQRCQ74xmgXJPJR-qw@mail.gmail.com>
     [not found]                                                       ` <VI1PR0602MB32453A8B5CBC0308C7D18F1DA47E0@VI1PR0602MB3245.eurprd06.prod.outlook.com>
     [not found]                                                         ` <CAJSP0QVxaW3tezjBN9owJHsxzE9h8_qcaeRr5zHHKxKJOeFnkQ@mail.gmail.com>
     [not found]                                                           ` <CAJSP0QVXoZJ9MJ0qp4RM_m2fGJ8iFSyJMAU_X7mdiQvpOK59KA@mail.gmail.com>
     [not found]                                                             ` <VI1PR0602MB324516419266A934FE7759C6A47E0@VI1PR0602MB3245.eurprd06.prod.outlook.com>
     [not found]                                                               ` <VI1PR0602MB324516419266A934FE7759C6A47E0@VI1PR0602MB3245.eurprd06.prod.outlo>
     [not found]                                                                 ` <VI1PR0602MB32454C17192EFA863E29CC49A47E0@VI1PR0602MB3245.eurprd06.prod.outlo>
     [not found]                                                                   ` <VI1PR0602MB324547F72DA9EDEB1613C888A47E0@VI1PR0602MB3245.eurprd06.prod.outlook.com>
     [not found]                                                                     ` <CAJSP0QUg=cq3tCSLidQ9BR2hxAo3K6gA6LKtpx5Rjb=_6XgJ6Q@mail.gmail.com>
     [not found]                                                                       ` <28e6b4ed-9afd-3a79-6267-86c7385c23ce@redhat.com>
     [not found]                                                                         ` <VI1PR0602MB324578F91F1AF9390D03022FA47F0@VI1PR0602MB3245.eurprd06.prod.outlook.com>
2019-02-22 14:04                                                                           ` Stefan Hajnoczi
2019-02-22 14:38                                                                             ` Paolo Bonzini
2019-02-22 14:43                                                                             ` Fernando Casas Schössow
2019-02-22 14:55                                                                               ` Paolo Bonzini [this message]
2019-02-22 15:48                                                                                 ` Fernando Casas Schössow
2019-02-22 16:37                                                                             ` Dr. David Alan Gilbert
2019-02-22 16:39                                                                               ` Paolo Bonzini
2019-02-22 16:47                                                                                 ` Dr. David Alan Gilbert
2019-02-23 11:49                                                                             ` Natanael Copa
2019-02-26 13:30                                                                               ` Paolo Bonzini
2019-02-28  7:35                                                                                 ` Fernando Casas Schössow
2019-02-23 15:55                                                                             ` Natanael Copa
2019-02-23 16:18                                                                               ` Peter Maydell
2019-02-25 10:24                                                                                 ` Natanael Copa
2019-02-25 10:34                                                                                   ` Peter Maydell
2019-02-25 12:15                                                                                     ` Fernando Casas Schössow
2019-02-25 12:21                                                                                     ` Natanael Copa
2019-02-25 13:06                                                                                       ` Peter Maydell
2019-02-25 13:25                                                                                         ` Natanael Copa
2019-02-25 13:32                                                                                           ` Fernando Casas Schössow
     [not found]                                                                                             ` <VI1PR0602MB3245A6B693B23DA2E0E8E500A47A0@VI1PR0602MB3245.eurprd06.prod.outlo ok.com>
2019-02-25 15:41                                                                                               ` Fernando Casas Schössow
2019-02-28  9:58                                                                                         ` Peter Maydell
2019-03-07  7:14                                                                                           ` Fernando Casas Schössow
2019-02-23 16:21                                                                               ` Fernando Casas Schössow
2019-02-25 10:30                                                                               ` Stefan Hajnoczi
2019-02-25 10:33                                                                                 ` Stefan Hajnoczi
2019-02-23 16:57                                                                             ` Peter Maydell

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=ed1ffe8b-305b-9ae7-aa42-127f657622d7@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=casasfernando@outlook.com \
    --cc=ncopa@alpinelinux.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=stefanha@gmail.com \
    /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).