On Mon, May 14, 2018 at 10:57:46AM +0100, Ross Lagerwall wrote:
> The full size of the BAR is stored in the lower PCIIORegion.size. The
> upper PCIIORegion.size is 0.  Calculate the size of the upper half
> correctly from the lower half otherwise the size read by the guest will
> be incorrect.
> 
> Signed-off-by: Ross Lagerwall <ross.lagerw...@citrix.com>

Acked-by: Anthony PERARD <anthony.per...@citrix.com>

> ---
>  hw/xen/xen_pt_config_init.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c
> index a3ce33e..aee31c6 100644
> --- a/hw/xen/xen_pt_config_init.c
> +++ b/hw/xen/xen_pt_config_init.c
> @@ -504,6 +504,8 @@ static int xen_pt_bar_reg_write(XenPCIPassthroughState 
> *s, XenPTReg *cfg_entry,
>          bar_ro_mask = XEN_PT_BAR_IO_RO_MASK | (r_size - 1);
>          break;
>      case XEN_PT_BAR_FLAG_UPPER:
> +        assert(index > 0);
> +        r_size = d->io_regions[index - 1].size >> 32;
>          bar_emu_mask = XEN_PT_BAR_ALLF;
>          bar_ro_mask = r_size ? r_size - 1 : 0;
>          break;


-- 
Anthony PERARD

Reply via email to