All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Weil <sw@weilnetz.de>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: Scott Wood <scottwood@freescale.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] tci: don't write zero for reloc in tci_out_label
Date: Wed, 20 Jun 2012 17:48:39 +0200	[thread overview]
Message-ID: <4FE1F0D7.4080105@weilnetz.de> (raw)
In-Reply-To: <CAAu8pHv8KC93k7jOzUofBDAmTWJzgHW2O+1VqUcjZ9w3yUufSQ@mail.gmail.com>

Am 19.06.2012 20:02, schrieb Blue Swirl:
> On Tue, Jun 19, 2012 at 5:53 AM, Stefan Weil <sw@weilnetz.de> wrote:
>> Am 19.06.2012 04:31, schrieb Scott Wood:
>>
>>> If tci_out_label is called in the context of tcg_gen_code_search_pc, we
>>> could be overwriting an already patched relocation with zero -- and not
>>> repatch it because the set_label is past search_pc, causing a QEMU crash
>>> when it tries to branch to a zero label.
>>>
>>> Not writing anything to the relocation area seems to be in line with 
>>> what
>>> other backends do from the couple I looked at (x86, ppc).
>>
>>
>> Thanks, this might fix a crash which I have seen from time to time.
>> I'll run tests as soon as possible.

Tested-by: Stefan Weil <sw@weilnetz.de>

The patch fixes my test scenario with a guest booting a Debian ARM kernel
on a x86_64 host (Linux or W64).

The following command crashes while the ARM Linux guest is booting
(shortly after "Freeing init memory") with SIGSEGV caused by tb_ptr == 2:

$ qemu-system-arm -M versatilepb -m 192 \
     -kernel vmlinuz-3.2.0-2-versatile -initrd initrd.img-3.2.0-2-versatile

With the patch applied, the ARM Linux boots correctly.

Blue, maybe that test also works with a SPARC host.
I have copied the ARM kernel and initrd to http://qemu.weilnetz.de/arm/.

Regards,
Stefan W.

>>
>> Could you please also look at the other backends?
>>
>> I saw from git history that ppc once had the same bug.
>> The sparc backend (and maybe others) might still have it.
>
> Confirmed for Sparc.
>
>>
>> Regards,
>> Stefan W.
>>
>>
>>>
>>> Signed-off-by: Scott Wood<scottwood@freescale.com>
>>> ---
>>>  tcg/tci/tcg-target.c |    2 +-
>>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/tcg/tci/tcg-target.c b/tcg/tci/tcg-target.c
>>> index 453f187..3c6b0f5 100644
>>> --- a/tcg/tci/tcg-target.c
>>> +++ b/tcg/tci/tcg-target.c
>>> @@ -487,7 +487,7 @@ static void tci_out_label(TCGContext *s, TCGArg arg)
>>>          assert(label->u.value);
>>>      } else {
>>>          tcg_out_reloc(s, s->code_ptr, sizeof(tcg_target_ulong), 
>>> arg, 0);
>>> -        tcg_out_i(s, 0);
>>> +        s->code_ptr += sizeof(tcg_target_ulong);
>
> I like this fix. Other similar fixes rewrote the fixed part of the
> opcode and not the label, but the fixed part may cross byte
> boundaries.
>
>>>      }
>>>  }
>>>
>>
>

  reply	other threads:[~2012-06-20 15:48 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-19  2:31 [Qemu-devel] [PATCH] tci: don't write zero for reloc in tci_out_label Scott Wood
2012-06-19  5:53 ` Stefan Weil
2012-06-19 18:02   ` Blue Swirl
2012-06-20 15:48     ` Stefan Weil [this message]
2012-06-19 21:52   ` Scott Wood
2012-06-19 22:11     ` Peter Maydell
2012-06-24 12:27 ` Blue Swirl

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=4FE1F0D7.4080105@weilnetz.de \
    --to=sw@weilnetz.de \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    --cc=scottwood@freescale.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.