qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] hw/pci-host/q35: Ignore write of reserved PCIEXBAR LENGTH


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v2] hw/pci-host/q35: Ignore write of reserved PCIEXBAR LENGTH field
Date: Mon, 21 Jun 2021 12:05:57 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1

ping?

On 6/14/21 1:14 PM, Philippe Mathieu-Daudé wrote:
> ping?
> 
> On 5/26/21 4:24 PM, Philippe Mathieu-Daudé wrote:
>> libFuzzer triggered the following assertion:
>>
>>   cat << EOF | qemu-system-i386 -M pc-q35-5.0 \
>>     -nographic -monitor none -serial none \
>>     -qtest stdio -d guest_errors -trace pci\*
>>   outl 0xcf8 0xf2000060
>>   outl 0xcfc 0x8400056e
>>   EOF
>>   pci_cfg_write mch 00:0 @0x60 <- 0x8400056e
>>   Aborted (core dumped)
>>
>> This is because guest wrote MCH_HOST_BRIDGE_PCIEXBAR_LENGTH_RVD
>> (reserved value) to the PCIE XBAR register.
>>
>> There is no indication on the datasheet about what occurs when
>> this value is written. Simply ignore it on QEMU (and report an
>> guest error):
>>
>>   pci_cfg_write mch 00:0 @0x60 <- 0x8400056e
>>   Q35: Reserved PCIEXBAR LENGTH
>>   pci_cfg_read mch 00:0 @0x0 -> 0x8086
>>   pci_cfg_read mch 00:0 @0x0 -> 0x29c08086
>>   ...
>>
>> Cc: qemu-stable@nongnu.org
>> Reported-by: Alexander Bulekov <alxndr@bu.edu>
>> BugLink: https://bugs.launchpad.net/qemu/+bug/1878641
>> Fixes: df2d8b3ed4 ("q35: Introduce q35 pc based chipset emulator")
>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> v2: Do not remove default case (rth)
>> ---
>>  hw/pci-host/q35.c | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
>> index 2eb729dff58..0f37cf056a9 100644
>> --- a/hw/pci-host/q35.c
>> +++ b/hw/pci-host/q35.c
>> @@ -29,6 +29,7 @@
>>   */
>>  
>>  #include "qemu/osdep.h"
>> +#include "qemu/log.h"
>>  #include "hw/i386/pc.h"
>>  #include "hw/pci-host/q35.h"
>>  #include "hw/qdev-properties.h"
>> @@ -318,6 +319,8 @@ static void mch_update_pciexbar(MCHPCIState *mch)
>>          addr_mask |= MCH_HOST_BRIDGE_PCIEXBAR_64ADMSK;
>>          break;
>>      case MCH_HOST_BRIDGE_PCIEXBAR_LENGTH_RVD:
>> +        qemu_log_mask(LOG_GUEST_ERROR, "Q35: Reserved PCIEXBAR LENGTH\n");
>> +        return;
>>      default:
>>          abort();
>>      }
>>
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]