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

RE: [PATCH] xen/iommu: vtd: Fix undefined behavior pci_vtd_quirks()


  • To: Julien Grall <julien@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: "Tian, Kevin" <kevin.tian@xxxxxxxxx>
  • Date: Mon, 30 Nov 2020 02:50:23 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mxGh980rurTfhXcU3ftPBq57c43XUNnP7P+xNRvGVbk=; b=eV+7tODrwQPNOSMfj7s+pdfR6KCPBhfid/NbgWWdbCCCMSgtEZsvBT4wV1GphthsLlq4GoefR0NGgHVbN8luBoje45eLl0W1IlrJ2jqKCvgeblN0X0H/c+OpUIkMSD/xWjCp2/1WAvUXboU4k+l8Upa0Bz6+g/2xQxB+vU7ar+/Lg5zSIWKKZ9u+Z1FccNtL4/T1t6Uyr4h9EGSxkztQCaKcom2vJxBms4RSkc1vYazF3kWvd41dyeEtPugTN6orkiW3hRYI0S5azI6E52RZTMYrCzlaopU3gIxBT3AAU8yt4zAVj5kpR28GAsa1YylFf/DK/grdizlrorLbnY4+pg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NTNMdMFrrbfex0bE387q1d2I6gj7GBjql6YTQfoNHQAIId086Li7xkz9GHVytADgmMZvdskykAazsJGQBRT9cRLLwzMUUnFoUIVRJNr9+fIQtNEsCQM6FaxWZKDoJciWYqSykzMCb984OwboEsL7pm3vv+0BR6QaBc36E4GldSZXtKSgv5PI3vf99YsmqPbUMNuZ5S69TKmkC+Wy+Qklll+1+goWTHtvtrGOhP1pNI1RT1qtv7BPmaoUxOeWwaexWecZhGiBhIUJZxU7NNRuo7xjXuHJdcEEFrV7zkmXpDR+bvsWdl9d1EqlNlvnSCHIRh6PlKgWrX6E6d1YELSmyg==
  • Authentication-results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=intel.com;
  • Cc: Julien Grall <jgrall@xxxxxxxxxx>
  • Delivery-date: Mon, 30 Nov 2020 02:50:33 +0000
  • Dlp-product: dlpe-windows
  • Dlp-reaction: no-action
  • Dlp-version: 11.5.1.3
  • Ironport-sdr: 1P3Gxyv0q5E+5OSh8qzwZcRZxQeQOLZwe/DyuXqu76HT3zpFzZtUfiC28gsv9UdDmEoud+iHXZ qapbHQ2MBPiQ==
  • Ironport-sdr: 3v1W/e3gG/2LaEmiAlJUgA09Rwx7PtNeUPGtcviUrXQiNl/pzFspK+nDkuWFeQhlhqcFDvroB6 itLL1hM0qQ8A==
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHWvoOaSpI/XFJ49Uub3hmiO5sEdqngCfbQ
  • Thread-topic: [PATCH] xen/iommu: vtd: Fix undefined behavior pci_vtd_quirks()

> From: Julien Grall <julien@xxxxxxx>
> Sent: Thursday, November 19, 2020 10:52 PM
> 
> From: Julien Grall <jgrall@xxxxxxxxxx>
> 
> When booting Xen with CONFIG_USBAN=y on Sandy Bridge, UBSAN will
> throw
> the following splat:
> 
> (XEN)
> ================================================================
> ================
> (XEN) UBSAN: Undefined behaviour in quirks.c:449:63
> (XEN) left shift of 1 by 31 places cannot be represented in type 'int'
> (XEN) ----[ Xen-4.11.4  x86_64  debug=y   Not tainted ]----
> 
> [...]
> 
> (XEN) Xen call trace:
> (XEN)    [<ffff82d0802c0ccc>] ubsan.c#ubsan_epilogue+0xa/0xad
> (XEN)    [<ffff82d0802c16c9>]
> __ubsan_handle_shift_out_of_bounds+0xb4/0x145
> (XEN)    [<ffff82d0802eeecd>] pci_vtd_quirk+0x3d3/0x74f
> (XEN)    [<ffff82d0802e508b>]
> iommu.c#domain_context_mapping+0x45b/0x46f
> (XEN)    [<ffff82d08053f39e>] iommu.c#setup_hwdom_device+0x22/0x3a
> (XEN)    [<ffff82d08053dfbc>] pci.c#setup_one_hwdom_device+0x8c/0x124
> (XEN)    [<ffff82d08053e302>] pci.c#_setup_hwdom_pci_devices+0xbb/0x2f7
> (XEN)    [<ffff82d0802da5b7>] pci.c#pci_segments_iterate+0x4c/0x8c
> (XEN)    [<ffff82d08053e8bd>] setup_hwdom_pci_devices+0x25/0x2c
> (XEN)    [<ffff82d08053e916>]
> iommu.c#intel_iommu_hwdom_init+0x52/0x2f3
> (XEN)    [<ffff82d08053d6da>] iommu_hwdom_init+0x4e/0xa4
> (XEN)    [<ffff82d080577f32>] dom0_construct_pv+0x23c8/0x2476
> (XEN)    [<ffff82d08057cb50>] construct_dom0+0x6c/0xa3
> (XEN)    [<ffff82d080564822>] __start_xen+0x4651/0x4b55
> (XEN)    [<ffff82d0802000f3>] __high_start+0x53/0x55
> 
> Note that splat is from 4.11.4 and not staging. Although, the problem is
> still present.
> 
> This can be solved by making the first operand unsigned int.
> 
> Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>

Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>

> 
> CR: https://code.amazon.com/reviews/CR-38873112
> ---
>  xen/drivers/passthrough/vtd/quirks.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/xen/drivers/passthrough/vtd/quirks.c
> b/xen/drivers/passthrough/vtd/quirks.c
> index a8330f17bc0c..8a81d9c9308b 100644
> --- a/xen/drivers/passthrough/vtd/quirks.c
> +++ b/xen/drivers/passthrough/vtd/quirks.c
> @@ -435,7 +435,7 @@ void pci_vtd_quirk(const struct pci_dev *pdev)
>      case 0x3728: /* Xeon C5500/C3500 (JasperForest) */
>      case 0x3c28: /* Sandybridge */
>          val = pci_conf_read32(pdev->sbdf, 0x1AC);
> -        pci_conf_write32(pdev->sbdf, 0x1AC, val | (1 << 31));
> +        pci_conf_write32(pdev->sbdf, 0x1AC, val | (1U << 31));
>          printk(XENLOG_INFO "Masked VT-d error signaling on %pp\n", &pdev-
> >sbdf);
>          break;
> 
> --
> 2.17.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.