Jan Beulich
2012-Jun-21 12:17 UTC
[PATCH] x86/PCI: fix guest_io_read() when pci_cfg_ok() denies access
For a multi-byte aligned read, this so far resulted in 0x00ff to be put in the guest''s register rather than 0xffff or 0xffffffff, which in turn could confuse bus scanning functions (which, when reading vendor and/or device IDs, expect to get back all zeroes or all ones). As the value gets masked to the read width when merging back into the full result, setting the initial value to all ones should not harm any or the other cases. Signed-off-by: Jan Beulich <jbeulich@suse.com> --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1717,7 +1717,7 @@ static uint32_t guest_io_read( while ( bytes != 0 ) { unsigned int size = 1; - uint32_t sub_data = 0xff; + uint32_t sub_data = ~0; if ( (port == 0x42) || (port == 0x43) || (port == 0x61) ) { _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel
Keir Fraser
2012-Jun-21 16:25 UTC
Re: [PATCH] x86/PCI: fix guest_io_read() when pci_cfg_ok() denies access
On 21/06/2012 13:17, "Jan Beulich" <JBeulich@suse.com> wrote:> For a multi-byte aligned read, this so far resulted in 0x00ff to be > put in the guest''s register rather than 0xffff or 0xffffffff, which in > turn could confuse bus scanning functions (which, when reading vendor > and/or device IDs, expect to get back all zeroes or all ones). > > As the value gets masked to the read width when merging back into the > full result, setting the initial value to all ones should not harm any > or the other cases. > > Signed-off-by: Jan Beulich <jbeulich@suse.com>Acked-by: Keir Fraser <keir@xen.org>> --- a/xen/arch/x86/traps.c > +++ b/xen/arch/x86/traps.c > @@ -1717,7 +1717,7 @@ static uint32_t guest_io_read( > while ( bytes != 0 ) > { > unsigned int size = 1; > - uint32_t sub_data = 0xff; > + uint32_t sub_data = ~0; > > if ( (port == 0x42) || (port == 0x43) || (port == 0x61) ) > { > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel