From patchwork Thu Apr 7 06:11:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12804454 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A1D12C433F5 for ; Thu, 7 Apr 2022 06:11:34 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.300389.512337 (Exim 4.92) (envelope-from ) id 1ncLMU-0001PC-Fk; Thu, 07 Apr 2022 06:11:18 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 300389.512337; Thu, 07 Apr 2022 06:11:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ncLMU-0001P5-Cf; Thu, 07 Apr 2022 06:11:18 +0000 Received: by outflank-mailman (input) for mailman id 300389; Thu, 07 Apr 2022 06:11:16 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ncLMS-0001On-BJ for xen-devel@lists.xenproject.org; Thu, 07 Apr 2022 06:11:16 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 86b0c26a-b639-11ec-8fbc-03012f2f19d4; Thu, 07 Apr 2022 08:11:13 +0200 (CEST) Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-am5eur02lp2053.outbound.protection.outlook.com [104.47.4.53]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-30-2gvv9xDFNYuVpzB2ZjNOIw-1; Thu, 07 Apr 2022 08:11:11 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by DB8PR04MB5596.eurprd04.prod.outlook.com (2603:10a6:10:a2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.31; Thu, 7 Apr 2022 06:11:09 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::914d:e08d:7798:8476]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::914d:e08d:7798:8476%5]) with mapi id 15.20.5144.022; Thu, 7 Apr 2022 06:11:09 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 86b0c26a-b639-11ec-8fbc-03012f2f19d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1649311873; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JnE8xJC6aHLf7QxEU8ahXxNaM953sp4uj3NcYFvGw4w=; b=UTuyyBMXvuPlzy6qO41800MS3mTPFHrBC7aGPYs+242oJNxt9gibvALqrLHx5tR+CsK14W p8UakZTE4jOOsFKUWDwBsWlNxkqe0rdhbjt/2WsdvE+57SyCLShSwYxk9iG/Wp+PbSqlIM +pGkwqf7ssi/KapnGMTVYG9DbwnqaZA= X-MC-Unique: 2gvv9xDFNYuVpzB2ZjNOIw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UYJHfxJYTvjphDtDwU6kA7rmjWtZzKsk8cSc9pLYxxVdlrqo1e0AP/z2JDQzpxTp6/GDr6gaxYsEgeOFRz7SF3flwDt0eCjHB1dU/6+UWswvDGYGJcCH74IJgF8OCMrQ4iv+umqR5DwBe0/Z3MSfmapQRyu9ODnqeHuhDa0Ovq8k56oGa+F53BaRVZHVFZly5oafX0T5cUnf4kQA6XRSd318Lo3TgEoVQvmUD+E5Vj4LUYSzRYAQW53y0dYlbLfIFD+5KFCRk6QrgT18ugEhhAKEbbEluAGeiwwMjkBXSHdH6HjxRThvp3RwhOeS3liHhhhQOVuETgTXPYINXpeCNg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JnE8xJC6aHLf7QxEU8ahXxNaM953sp4uj3NcYFvGw4w=; b=MFXTtBz1LsvLiHp2vezzPitN4GvehIZ+gJ/dx3GkArn5Jh+vMsGkXiJdHM6lgFNADhA7r6/7e1jyDxNjJvhuJQrsK90T4Aeoe757O1fRUKyOqpr/CtjES7eXKreFmF3JXOZfOvVUsvwLpmQAIhn+o6DxaeNGNbcjguCoUZgkt420ly8k9N3QhUgBQnI6AAE0F4vAKk2i7WdD1ksxgROb6aaCIbtXXnjnr4cJtKaVjZXY8I9CaG96QoqHbziksYKr/Lmaty1nP/5lu47fRIOO+yy8svBihtEWDZmitodJLHZ+QUU/z1gCCpM82+gCKQp1XfNAM3Mhl+GAEcA6Sc8SRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <6739cf19-a74a-208d-82e8-28dfde7710f5@suse.com> Date: Thu, 7 Apr 2022 08:11:06 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: [PATCH v2 1/2] VT-d: avoid NULL deref on domain_context_mapping_one() error paths Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Kevin Tian , Andrew Cooper , Paul Durrant References: <6e1c7faf-d1ea-1a61-5452-9dec5b8fd221@suse.com> In-Reply-To: <6e1c7faf-d1ea-1a61-5452-9dec5b8fd221@suse.com> X-ClientProxiedBy: AM5PR0701CA0008.eurprd07.prod.outlook.com (2603:10a6:203:51::18) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f80f7f91-a89c-440c-bd95-08da185d682e X-MS-TrafficTypeDiagnostic: DB8PR04MB5596:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: m7qoYDeR6Im35qJmRYTm8ZXmzSGUE8WGGjvKMOegZUelOh/Rv0gXNWXES2ywt8FUWRR3LYdW5Tgq6EfAdWAb0i1OK+1E87KyQnFLFUP5r+/yT/X02gLFu3u3vA/6OZ10je4sCCJMh0rn2Lci6KftlcIvl+/g3qtw9cENvE92lByKMnz0konBz3OVLfyPKCSTNG6TFts+J0MaXmj56eK12UT3A6TMNiIaKRcUaGYZXlIiGnXGD+e90+EA8mHHCVQCQ9kYS66wjs0vupqQqgezeTga9Z0vOfEV15pqb+eA1OCbaih1XWKIYshedhULqllGXFyEmLyXnURPE+YH+oez4eJ7ahBlJspjFmLA2zalMP4xAV6cK6fF24usJILztVVcVHrhtZHJxKJqSSBBRRYqMgq0WerLk0E4/EwCQLXzWA8+RklLNb1/iFl388UV+J0I/rq0Oiz/1NW9ieelCDVFBLAmcTqGCdpp5r43Go5UjeBG2GPoTTDXJHC6cNoz/+h70bFRGsKJ4s/JOKHDBGC/uttqqGq7CIEGw7B/akWYPFC5WbfCGMYnFG6Vdf8/C0AdpzfbkGy0/BL2EbKrc2YcYKHXQJYr0yLn37QVx/fUOUfEmP7L6rYVwUFobeBphypJp1iM6DekkhN3vwty7tWXazCVx8fhlX4Q6RmnVnqx/7lj/BzltfWjyBmhbZLrCgT+mhKbEw3YyXWVGKTfAEyBNX60PDOkgrMUIhzddPyahKBEAQkQJd3+PbHbjiAVXZ77 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(2906002)(2616005)(6486002)(54906003)(26005)(186003)(38100700002)(5660300002)(6916009)(316002)(36756003)(66946007)(8936002)(31696002)(6506007)(6666004)(508600001)(31686004)(8676002)(4326008)(86362001)(66476007)(6512007)(66556008)(83380400001)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?c0Xlh/7gL18C01liDxOuathqu3p8?= =?utf-8?q?uqyrLAKK9Yl2WFbA0i5iu133rD4wt6oNwNkisfHxbX0TN8JEFF9Mrk4+l1Tfu/Kjf?= =?utf-8?q?O6zjmVCSn7ZWnZqsutAWUw/SitdgpwVSk36oubUxfb7pQHQacy9cqcm1XNFI4qoF2?= =?utf-8?q?mV1Ky/pRhUjyL5BMCAqsF6rF8Xgi7JFSiKiTTyP/k6PMOgjsryMmqpFJ0N3t3ZxtN?= =?utf-8?q?I2dpWi/i3s4QgIxvHNm58ehirBwGBUbdaSmD5PnXWnuMqCxc1Yxrhcs4zhYhbm/4p?= =?utf-8?q?7xElAz+0tLbDxswHHUQSZHNMT7cdBKczX8K00nrhZ9lthrFN76I8mzhrUew1XgL5u?= =?utf-8?q?wHFwbWTw9D8ZipQPF6uqay4UfoddDbVIxdZvbFFW1Skrco/MLRDKZvlt8ksZycrir?= =?utf-8?q?fpvsvj2jHlys16pOv9vgEYTmii/BON3CO7Kw6G6GzqzS8ZiHLGMeEARPM2gQ/rz6F?= =?utf-8?q?piByJMcdtoCZzckR39hv3gR1sKPGvMz108lKEQ+4gvLxpvgVxX7YJPnkNE00B9JWQ?= =?utf-8?q?Z+8Axeve83H5m+cphR1JjpNzvvjt5x+Di55tka1dOqOYJSuDt39JQtTqAvvYUKeTJ?= =?utf-8?q?epaQ0AntnposQpf0Q1QASQlbwvglAFRWYORbgFc9A8l3LlA2UipOqfd3J5YiC9TOj?= =?utf-8?q?Gkqhmt0gfmaiTQGVbZ7huSJtVOUn0h9W6VYc2u7nySYUHsyZYkQk32OLiwk4rDiGr?= =?utf-8?q?IDjHcpaaucIyKkoY+K9GVEsWoeVopbaZwCyizoqm0h0/G/BpiiHrxVU/Ii0KYPuxo?= =?utf-8?q?eMi6IInHzwa6pseTDLkC+hEAd5JOXPZjGfpHadknWQK5IqAenAOzwsisPLtDBfX9z?= =?utf-8?q?qFEWV+iDbyc0uWrGHQ0wnzUfC7KOe0V0StW2NsxCaX+WVinKPpR6/a6e0zimx2woE?= =?utf-8?q?jo40o5DGyyaroClq+Sq6phnGxu7k7D0bXFjV3j6vy4ncam+089HiWjfC++pJ5Tq/o?= =?utf-8?q?kxFBb+LqiQrSZj4wqPI+CDd8gAaUkpxE4gjaSs/gb2uEHcP15AB9PDgt2MRjaev/L?= =?utf-8?q?fZlN7BSUe8sw2kKNtejKnTN9LHZuJ4d1+EOaiqn7cOv+Aw0UviY+gnMxfeNxMpZYc?= =?utf-8?q?NZORIxbglY4Buyd922JijqU3SYBpO29xF4/aoTPKCOrlPzYU7mhafq7LK/bv77Yac?= =?utf-8?q?BSfqTMzfNxNtxRAVg0cfrP7QXvYIRdu1mzjHb6qzlHUmdZZYSh3tEIFkcDyqauHki?= =?utf-8?q?YPaUsrUVXRpMdUVMkGHyipjbf5XtJWu7T7IPWj2JEnKNTPEjnxTDG/al1fs8WePKU?= =?utf-8?q?fG7bkNITPAH7XBma5EkSQ98o8kaQsJr5f6odUSYjXy/L3NhsfBVWRryhM8r7hr63s?= =?utf-8?q?yUWHX+QYk1f63+HzdIXFyERNAQytIFRuYk+hllfatNbJcOojJv8LLegdYpkjc9frn?= =?utf-8?q?dTQzQdpwYjkRdSQ0MQAbJHMyOsnQjMHx1pVLfnJJkg22NBxCZD8aU+ulIeaLPsG7c?= =?utf-8?q?v1XZ9dIVCG4+mkIojYpzwBq59PL3gFFEaZv45ZSPCwqVRAx8DjRowDlIcYI0zBG4w?= =?utf-8?q?WgnCb7KHZaelUmBifP2tU4eL3dY/0JsJeN47NRUkn5O+W+IxElG59TbyjSUvbNlBJ?= =?utf-8?q?ut3k7fFZjjpvHXvSSYXtog2yCnX+BSx1IC/j+j1+P6iuD3+8WMFDRoywpnaV4qVp1?= =?utf-8?q?BxK00MYYME5GGeqfrZwfkMxv7lEfQkqg=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f80f7f91-a89c-440c-bd95-08da185d682e X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2022 06:11:09.3701 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: T4efavg+Hg4fLY5etLUBzC+Q5RIyjjnBWQdsk087jaC7pldJQKJzi7iNf9UT2rDjcVsqb2Tj64GyXflnBw9wxw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB5596 First there's a printk() which actually wrongly uses pdev in the first place: We want to log the coordinates of the (perhaps fake) device acted upon, which may not be pdev. Then it was quite pointless for eb19326a328d ("VT-d: prepare for per- device quarantine page tables (part I)") to add a domid_t parameter to domain_context_unmap_one(): It's only used to pass back here via me_wifi_quirk() -> map_me_phantom_function(). Drop the parameter again. Finally there's the invocation of domain_context_mapping_one(), which needs to be passed the correct domain ID. Avoid taking that path when pdev is NULL and the quarantine state is what would need restoring to. This means we can't security-support PCI devices with RMRRs (if such exist in practice) any longer. Fixes: 8f41e481b485 ("VT-d: re-assign devices directly") Fixes: 14dd241aad8a ("IOMMU/x86: use per-device page tables for quarantining") Coverity ID: 1503784 Reported-by: Andrew Cooper Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monné Reviewed-by: Kevin Tian --- v2: Drop SUPPORT.md addition. Adjust comment. Extend another comment. --- a/xen/drivers/passthrough/vtd/extern.h +++ b/xen/drivers/passthrough/vtd/extern.h @@ -85,7 +85,7 @@ int domain_context_mapping_one(struct do const struct pci_dev *pdev, domid_t domid, paddr_t pgd_maddr, unsigned int mode); int domain_context_unmap_one(struct domain *domain, struct vtd_iommu *iommu, - uint8_t bus, uint8_t devfn, domid_t domid); + uint8_t bus, uint8_t devfn); int cf_check intel_iommu_get_reserved_device_memory( iommu_grdm_t *func, void *ctxt); --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1533,7 +1533,7 @@ int domain_context_mapping_one( check_cleanup_domid_map(domain, pdev, iommu); printk(XENLOG_ERR "%pp: unexpected context entry %016lx_%016lx (expected %016lx_%016lx)\n", - &PCI_SBDF3(pdev->seg, pdev->bus, devfn), + &PCI_SBDF3(seg, bus, devfn), (uint64_t)(res >> 64), (uint64_t)res, (uint64_t)(old >> 64), (uint64_t)old); rc = -EILSEQ; @@ -1601,9 +1601,14 @@ int domain_context_mapping_one( if ( rc ) { - if ( !prev_dom ) - ret = domain_context_unmap_one(domain, iommu, bus, devfn, - DEVICE_DOMID(domain, pdev)); + if ( !prev_dom || + /* + * Unmapping here means DEV_TYPE_PCI devices with RMRRs (if such + * exist) would cause problems if such a region was actually + * accessed. + */ + (prev_dom == dom_io && !pdev) ) + ret = domain_context_unmap_one(domain, iommu, bus, devfn); else if ( prev_dom != domain ) /* Avoid infinite recursion. */ ret = domain_context_mapping_one(prev_dom, iommu, bus, devfn, pdev, DEVICE_DOMID(prev_dom, pdev), @@ -1744,7 +1749,9 @@ static int domain_context_mapping(struct * Strictly speaking if the device is the only one behind this bridge * and the only one with this (secbus,0,0) tuple, it could be allowed * to be re-assigned regardless of RMRR presence. But let's deal with - * that case only if it is actually found in the wild. + * that case only if it is actually found in the wild. Note that + * dealing with this just here would still not render the operation + * secure. */ else if ( prev_present && (mode & MAP_WITH_RMRR) && domain != pdev->domain ) @@ -1809,7 +1816,7 @@ static int domain_context_mapping(struct int domain_context_unmap_one( struct domain *domain, struct vtd_iommu *iommu, - uint8_t bus, uint8_t devfn, domid_t domid) + uint8_t bus, uint8_t devfn) { struct context_entry *context, *context_entries; u64 maddr; @@ -1867,7 +1874,8 @@ int domain_context_unmap_one( unmap_vtd_domain_page(context_entries); if ( !iommu->drhd->segment && !rc ) - rc = me_wifi_quirk(domain, bus, devfn, domid, 0, UNMAP_ME_PHANTOM_FUNC); + rc = me_wifi_quirk(domain, bus, devfn, DOMID_INVALID, 0, + UNMAP_ME_PHANTOM_FUNC); if ( rc && !is_hardware_domain(domain) && domain != dom_io ) { @@ -1916,8 +1924,7 @@ static const struct acpi_drhd_unit *doma if ( iommu_debug ) printk(VTDPREFIX "%pd:PCIe: unmap %pp\n", domain, &PCI_SBDF3(seg, bus, devfn)); - ret = domain_context_unmap_one(domain, iommu, bus, devfn, - DEVICE_DOMID(domain, pdev)); + ret = domain_context_unmap_one(domain, iommu, bus, devfn); if ( !ret && devfn == pdev->devfn && ats_device(pdev, drhd) > 0 ) disable_ats_device(pdev); @@ -1930,8 +1937,7 @@ static const struct acpi_drhd_unit *doma if ( iommu_debug ) printk(VTDPREFIX "%pd:PCI: unmap %pp\n", domain, &PCI_SBDF3(seg, bus, devfn)); - ret = domain_context_unmap_one(domain, iommu, bus, devfn, - DEVICE_DOMID(domain, pdev)); + ret = domain_context_unmap_one(domain, iommu, bus, devfn); if ( ret ) break; @@ -1954,12 +1960,10 @@ static const struct acpi_drhd_unit *doma break; } - ret = domain_context_unmap_one(domain, iommu, tmp_bus, tmp_devfn, - DEVICE_DOMID(domain, pdev)); + ret = domain_context_unmap_one(domain, iommu, tmp_bus, tmp_devfn); /* PCIe to PCI/PCIx bridge */ if ( !ret && pdev_type(seg, tmp_bus, tmp_devfn) == DEV_TYPE_PCIe2PCI_BRIDGE ) - ret = domain_context_unmap_one(domain, iommu, secbus, 0, - DEVICE_DOMID(domain, pdev)); + ret = domain_context_unmap_one(domain, iommu, secbus, 0); break; --- a/xen/drivers/passthrough/vtd/quirks.c +++ b/xen/drivers/passthrough/vtd/quirks.c @@ -427,7 +427,7 @@ static int __must_check map_me_phantom_f domid, pgd_maddr, mode); else rc = domain_context_unmap_one(domain, drhd->iommu, 0, - PCI_DEVFN(dev, 7), domid); + PCI_DEVFN(dev, 7)); return rc; } From patchwork Thu Apr 7 06:11:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12804455 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 76817C433F5 for ; Thu, 7 Apr 2022 06:12:11 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.300391.512348 (Exim 4.92) (envelope-from ) id 1ncLN5-0001uo-PF; Thu, 07 Apr 2022 06:11:55 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 300391.512348; Thu, 07 Apr 2022 06:11:55 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ncLN5-0001uh-M6; Thu, 07 Apr 2022 06:11:55 +0000 Received: by outflank-mailman (input) for mailman id 300391; Thu, 07 Apr 2022 06:11:54 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ncLN4-0001On-6m for xen-devel@lists.xenproject.org; Thu, 07 Apr 2022 06:11:54 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 9e871d36-b639-11ec-8fbc-03012f2f19d4; Thu, 07 Apr 2022 08:11:53 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2059.outbound.protection.outlook.com [104.47.2.59]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-3-yAqrafMGM3yC60nFVaQr1A-1; Thu, 07 Apr 2022 08:11:49 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by AM0PR0402MB3620.eurprd04.prod.outlook.com (2603:10a6:208:1c::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.22; Thu, 7 Apr 2022 06:11:48 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::914d:e08d:7798:8476]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::914d:e08d:7798:8476%5]) with mapi id 15.20.5144.022; Thu, 7 Apr 2022 06:11:47 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 9e871d36-b639-11ec-8fbc-03012f2f19d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1649311913; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=E6G0lhWDzKngo22Cqa5yFBt1cU5VEIbGGSfIbs2WoXA=; b=VdcbK9z14RwkQr9+l4dhRlhtKNhJaBC9MzSYRAZH5C/JAsCY83YLYpZUsLTig/Hbp2sFaU z75fwLGUhNKjJ7cfXLdhTrkljQE49F/SdKJEx7h3RYXb2Tapl1Zo+sWQMu3F0B9XtcR/Li gNgmzlWkjBgCPGCxsmvex+UFm/jR5Lg= X-MC-Unique: yAqrafMGM3yC60nFVaQr1A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Dq3lw7XZacNFhs1Cz0SGnmrmzWQ1dLsL9kg599Nag5GAylMP/gf7osFv9/3nxTxCdjTbComiXVF5oFx/mz54do3wnjn9XdZqsAMqyrHOVZyZKy0wumB2t06W6d7+Jjax3v0GLoGTsmkewYv5gwx6Yc2RYek+2yl7dahBx1ws5GyObTkri5hhtmwywrw/M8mIyzIjY5YK9PNyaEN7dvfQ3qgvA1OaQUAxVx1GXDvVQLuyTQAFlQq6cXfFpO/+taskf/voIIxv91AcE4LY1KQvC4EGFN12hItffyDmBISj32aBigBpuhe0KQA3LTlUSL1XFtOjsAUl0m5aiBWAiH154A== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=E6G0lhWDzKngo22Cqa5yFBt1cU5VEIbGGSfIbs2WoXA=; b=TxIaEUflRhoixXGlv21DitWLc2WgrCcWSPRRQin23/TerJGzTXknrBavIx76RI2olPDaCWebJU+IxA0JBG+0XECamcW+2iDAoU9JtuD0SCQYr7VMDnf6LmZmawi3C99MRxubEgvhv6YzKw5vDrBBOSaHBZtnR7fJRqXC94sLsUnBD438GE75ArC+UHComH1iYt8lVhZJbxHtpwUkIC062vn11Ydc+S77Jo33Ro3Pg7RC2W5KeehK6x4K1d79v5Dh+gtj9Ck2QErBwHvDNYzaM/kBU3lha8td3C1gNQIEooJO7B8k6jOk8VpkBlaSlva+bsyllK4BTmdcaiTg7CW93Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Thu, 7 Apr 2022 08:11:45 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: [PATCH v2 2/2] VT-d: avoid infinite recursion on domain_context_mapping_one() error path Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Kevin Tian , Andrew Cooper , Paul Durrant References: <6e1c7faf-d1ea-1a61-5452-9dec5b8fd221@suse.com> In-Reply-To: <6e1c7faf-d1ea-1a61-5452-9dec5b8fd221@suse.com> X-ClientProxiedBy: AM5PR0701CA0005.eurprd07.prod.outlook.com (2603:10a6:203:51::15) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 54631877-aa11-48ee-3c42-08da185d7f51 X-MS-TrafficTypeDiagnostic: AM0PR0402MB3620:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: z2xD/SLGybNKvML+sa9c/lvtMeKbi1JMbA8CJ3pKz/Wu+per61Iv/8QXWAPCgmRnMsq2WK2MF6SkVXnhyOy1wiXGG2LsMBRVXcrI52gzO8DpOJXSYFzlme+PT/0zgZ8wdZkPAl5q3B/lFUU/t2r8U3bla9ExRPKO0g1uJMm62AWOdULlte6mS2k4mMGHeBJSnEA7l5/WJbX1WE1qXxiU9ZNHeRG5jFqflsiPRD472ucAmfOuLIua9tG5nCcVO+0b+5E57+k0D7X1o7vl1wFyOQ3LTZSocn1BFgzmFMMS74M6J4wUGfTaWBoFwtjekgiap/vkZdpi+mf4kynAGdZf3AtOFwdUkm021sxFSSn/l7sAhatiVQZXxecpFnPoTZKqgkc2rDw5ANUThi8TSA3yj13oApNNUB0gdD3YRJdKVB8zetN7rekwrD320JC3QZ/yaxbh1d8Eh+Ed5BXZa/s2TCT4Tej9tm7ho/pqt+fpsyJ43GcRgYDlzVhODRkKmyef6x3plyL+woxHGcP2u22KCGgYTpwe4M2bdkgtoK4QLAly1HJw/h6yEp1k+gA4QWb5tijbANxu/duKW5dIZRX6CYoQy86HqaGTR4tfnLrhQVNpuxcGsv3y4NNGE/OlWmjCNQ5noz08YwSp6ckrBdesKAXa6PzuLQ26CTrhnxCYwCJIt1zVLQYy7DVeFnjrs1VRBk3usybj9CiSsjM2NhS/A5TzAwKzjdz2HO7p5LtpEJxXreeaZQNqMoC4IJ2PWQE7 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(4326008)(508600001)(8676002)(31686004)(36756003)(6506007)(6486002)(38100700002)(66946007)(66556008)(66476007)(2616005)(8936002)(31696002)(26005)(6512007)(86362001)(54906003)(5660300002)(316002)(186003)(6916009)(83380400001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?lgy3H3WM2h+JQVQJgpGeEQOEe6Az?= =?utf-8?q?zXtTmytl1Ynwi5Dkv4hGEzf1tLKImIz2gd7zL/HPgfVIQBqq0DzxHvdBvvwi79crf?= =?utf-8?q?myU/yBTqmtk6gWRTcBSN31etLYJjBG7ojck4M5GGqRYumEfZvTyKW5wdCy69t8uts?= =?utf-8?q?UFg+QoCIiD7QeuYhDJLfJE9Ip9d4xZ1tsvHh6KAcK/u5HJ+NS0VsqHGv9CbY8R9+b?= =?utf-8?q?K2aGWLIEeQSiM4ihlJRCBrsf3bdQ/fX0uQtgWQx2EDlXycbfZDrLi+bVMVwaPzagV?= =?utf-8?q?/RyWBH1dprbnoJtMnZ7APXlV9nnVCwJZNYsIrjqKtAhKhJN5Q/eXwskUEAYWxB3Uw?= =?utf-8?q?B/8ujTIs1PHtYwPHaRa6/yBYo3PbtrHMB8D7rgWAJcjjsSJGS2fIcl3hBs4Gr9ht7?= =?utf-8?q?TMeNVAIVQr/DTcsZBqn6+FWzzi/kinMxVY/VxYBEX/mSWaL17I+J3Jw7sSFR/vGnx?= =?utf-8?q?9drCxbctWmmnIagNFqCgtMrgc5MPLXuTSqQrAferwKhFWkLrsPfuOJDL5Rn87+bCx?= =?utf-8?q?jGeng7Y0X6d7J4D1VvlVGfKCjqlNcX7K8SmM694/MFlVEPWiG6SrnlfC+epyoVsT0?= =?utf-8?q?Xb3EDGHFvmL6CQW0Z+pSJaZy2GlKe5UMP9AycCmj/+ldGk0O+8B8SlYKwZlElgnxe?= =?utf-8?q?fUbLXeXAcDVqaJtDUhGAWLAv1Ty23V0o4YIvsD37gWkmuRJMZTfp3gGlWiT2pdldh?= =?utf-8?q?iemuzMGrkci1V4D1pdg/xK346MbKYyuFg6tUXTgHOtwFk98FLNqJ4WJf+xR1EAiKn?= =?utf-8?q?o4txny+7HPMBnVme7Y61X7EOkRLvw+B/xZEgAB4BRWvLhBR5SdrwQzIQr6nUi8ur+?= =?utf-8?q?pva+3yL2WN1dYm9pdrhJehcdYDggqEENMUS2UkzwaU9iqq1TDzhm8Oy3Aj3yofCSL?= =?utf-8?q?8nKJHHFos/LUWxt3v0WHsTXYh0Wa3ZOKRJEuK4NRZ536keNjYWJmxBCXZSoxxOz1y?= =?utf-8?q?vLusHNgYvMlG5X8UCgsmV4qh9LgAWnFvYuKt4/TEbiFlu836O5+QHvW/eLg65WVx/?= =?utf-8?q?C5DQrAK66udXVZv66FpST+G6Urolq7O1VmmdY8seSXdSWJ7Xp8M07bUPTXmNMfsCd?= =?utf-8?q?aVnz99qbGdj8nVwFYCq8I5aoP3B4/HlVgZAbD3sbTUd8IhNTneVSvL2xznrJJjwyz?= =?utf-8?q?Wjnf+V7A8Tp0adBPGxHWZneXF85gv9dwmUQsgFQrD6xMqRIIUXNxkfJdqrkF8U7is?= =?utf-8?q?Kl7/PonnazIGcr8AndDWnGkDlJ4KIrPMmQPReI/ajLMVhSVIdtV+kZTHiu9nNanSV?= =?utf-8?q?EAM0s8jSOkFcpOCmWP62Gmb5NLxvY+lYpgvUDGI0O1NmM7zJMa8ShwrWE/ljdktgl?= =?utf-8?q?gMCAJH/cXBuRI0KrkYw7bQQVCz8jM0T/aG0s+jMPg4e0lYyp5TLU66hxBYhjZAsBr?= =?utf-8?q?ywo8i4ipSDxsqf0dz8eSdT2fNuEcNckkFTBMiKPnHz7NdcofjnlbZNmStZ21aimr8?= =?utf-8?q?7Dy1s+kOP3cf6SLe2pfuHS+AtElwyUMv1Ibi1jnwWfd2q8EaYY+c4JjFZRyzXJL38?= =?utf-8?q?7t+gRousjPhNfAzxfqe77JhY9tAB9P0mhky83d0c8xS0okhNQ9qS9l8ALjNWy8x3o?= =?utf-8?q?sq7XaBsk/Buw/Xrr14wZayBchtjC94PQt2UljzQHMeKFy/dHIPhtqBwwTc0ajFAyr?= =?utf-8?q?GbZt4QcssDimi0C1+3STysUiA+F0b95g=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54631877-aa11-48ee-3c42-08da185d7f51 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2022 06:11:47.8869 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8aIh2LfGPAsNOHAsS4hbnDvr4HLQewkijJrlZAgZGGsdFIggFaFWqmw4GDnoT6LFkDjpi77RzsRFyDfN2nI94A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0402MB3620 Despite the comment there infinite recursion was still possible, by flip-flopping between two domains. This is because prev_dom is derived from the DID found in the context entry, which was already updated by the time error recovery is invoked. Simply introduce yet another mode flag to prevent rolling back an in-progress roll-back of a prior mapping attempt. Also drop the existing recursion prevention for having been dead anyway: Earlier in the function we already bail when prev_dom == domain. Fixes: 8f41e481b485 ("VT-d: re-assign devices directly") Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monné Reviewed-by: Kevin Tian --- v2: Extend scope of the approach taken. Leverage for some cleanup. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1599,7 +1599,7 @@ int domain_context_mapping_one( if ( !seg && !rc ) rc = me_wifi_quirk(domain, bus, devfn, domid, pgd_maddr, mode); - if ( rc ) + if ( rc && !(mode & MAP_ERROR_RECOVERY) ) { if ( !prev_dom || /* @@ -1609,13 +1609,12 @@ int domain_context_mapping_one( */ (prev_dom == dom_io && !pdev) ) ret = domain_context_unmap_one(domain, iommu, bus, devfn); - else if ( prev_dom != domain ) /* Avoid infinite recursion. */ + else ret = domain_context_mapping_one(prev_dom, iommu, bus, devfn, pdev, DEVICE_DOMID(prev_dom, pdev), DEVICE_PGTABLE(prev_dom, pdev), - mode & MAP_WITH_RMRR) < 0; - else - ret = 1; + (mode & MAP_WITH_RMRR) | + MAP_ERROR_RECOVERY) < 0; if ( !ret && pdev && pdev->devfn == devfn ) check_cleanup_domid_map(domain, pdev, iommu); --- a/xen/drivers/passthrough/vtd/vtd.h +++ b/xen/drivers/passthrough/vtd/vtd.h @@ -29,7 +29,8 @@ #define MAP_WITH_RMRR (1u << 0) #define MAP_OWNER_DYING (1u << 1) #define MAP_SINGLE_DEVICE (1u << 2) -#define UNMAP_ME_PHANTOM_FUNC (1u << 3) +#define MAP_ERROR_RECOVERY (1u << 3) +#define UNMAP_ME_PHANTOM_FUNC (1u << 4) /* Allow for both IOAPIC and IOSAPIC. */ #define IO_xAPIC_route_entry IO_APIC_route_entry From patchwork Thu Apr 7 09:27:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12804906 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E2F35C433F5 for ; Thu, 7 Apr 2022 09:28:18 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.300568.512752 (Exim 4.92) (envelope-from ) id 1ncOQq-0007mK-4n; Thu, 07 Apr 2022 09:28:00 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 300568.512752; Thu, 07 Apr 2022 09:28:00 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ncOQq-0007mD-1e; Thu, 07 Apr 2022 09:28:00 +0000 Received: by outflank-mailman (input) for mailman id 300568; Thu, 07 Apr 2022 09:27:58 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ncOQo-0007m7-NM for xen-devel@lists.xenproject.org; Thu, 07 Apr 2022 09:27:58 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 02976ab3-b655-11ec-8fbc-03012f2f19d4; Thu, 07 Apr 2022 11:27:57 +0200 (CEST) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02lp2059.outbound.protection.outlook.com [104.47.6.59]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-5-9otTH9cQNGysJqkhjb3Xyg-1; Thu, 07 Apr 2022 11:27:56 +0200 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) by AM0PR04MB5507.eurprd04.prod.outlook.com (2603:10a6:208:110::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.21; Thu, 7 Apr 2022 09:27:55 +0000 Received: from DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::914d:e08d:7798:8476]) by DU2PR04MB8616.eurprd04.prod.outlook.com ([fe80::914d:e08d:7798:8476%5]) with mapi id 15.20.5144.022; Thu, 7 Apr 2022 09:27:55 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 02976ab3-b655-11ec-8fbc-03012f2f19d4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1649323677; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0IrZylJTpCAzfeSRjCQ3TVLzNp2tEk2Z4BxiHpu3jec=; b=hg6KESjQmQE3iAhs0tDQRJHQNamemz2TRxP+zdYa4ji0rnE+WYULivPXpaDIVFIyHjfXSQ B+LIjm/Wln+5WTvVpQVe4aB+wn4CuOvfa23LFL/wyw/fxAeV+G1HtpH9XGMlcoeOzNhSgV AdnoldSHwgPEJDOV/mb2iq9VHXJ0+/Y= X-MC-Unique: 9otTH9cQNGysJqkhjb3Xyg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cKk6qagDZQFV3w5j38n2fD5jpJ1jicuw/eIZoPniNXGyTlIHc9RaTXRmpGmJ8rV6d8uJ5xhKEyzpXxyYG3qhZAFHchJ/41KW9uVIMiVu+sGUixXTcDYIJB70gmkY6Mrwbb0+mStvhQFfu5a/aEvKRCvzV4OvmrztVLXkqBqN02jByZi6kb8Ph7WWfM1N77fGl08zd/DX62+86IFg325Dao0zBVTFdkaCczWZTZuCxRlbScSN9gzllNCSkS/lZl7uIv5TiK8Oxh5/XlNjclJwcV+Uhx+dZ+EpdKV5mQGXjaOgh3g+48UP6XZS5iPMyCGdi4nKxi2pJ+KDTFIVYMlFGA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0IrZylJTpCAzfeSRjCQ3TVLzNp2tEk2Z4BxiHpu3jec=; b=bBg+IaoNUordQHDzpuCZ9riviFxnSczYx4wJPC4devL+OXB/v2jBoyYGJyeOHbDdA1Dn/l8gnrpVPMoACkqYXtqMbNzjbBx/NxdVN8x2ZqmT893MeAhJlENMEWQ/64UPENJhNRIQaIR0EW908kBXxjPaSim36xcoC0LZXTxzSx1iY1Rif2Z7LTyzduHYlV3skBryfJ6kXU/Jt+QZmbTN9ISXdmn6cJVhr0OqCVI4y9eZitz3i7xzzuuSbaSByAGm4eYa6YO/evteocIhDjB78VBm+6lfLW60kfC2ThSAg0ABHwxy3PoGDUlLlnFBQhizbzI3qy3WhUOaIn9Oh0tEVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <7671478f-e7c0-c43e-6395-1adc70333e04@suse.com> Date: Thu, 7 Apr 2022 11:27:53 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: [PATCH v2 0.9/2] VT-d: don't needlessly look up DID Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: =?utf-8?q?Roger_Pau_Monn=C3=A9?= , Kevin Tian , Andrew Cooper , Paul Durrant References: <6e1c7faf-d1ea-1a61-5452-9dec5b8fd221@suse.com> In-Reply-To: <6e1c7faf-d1ea-1a61-5452-9dec5b8fd221@suse.com> X-ClientProxiedBy: AM5P194CA0010.EURP194.PROD.OUTLOOK.COM (2603:10a6:203:8f::20) To DU2PR04MB8616.eurprd04.prod.outlook.com (2603:10a6:10:2db::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5cdd8ea7-612f-4902-7572-08da1878e562 X-MS-TrafficTypeDiagnostic: AM0PR04MB5507:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xezOVYSmxcYXWldNOhPvZNbFmg30dC/hKzq7hDgQt2ZOqjKm57qgXKFZPUX2Z5/pKk7Cr+Xm8+lWUsGD7JRuD0+p4ec3vHsP9++RA8367yjfI7t1biBUxEI3HyGFUFGWY4OTa+zMLj4Ua4WxeSp8KCfeHMafslJ3YsArZPNp6K6DyDQWiBZpfe++fP98Bn2ps0orUZm5kH71n6oBt1cmLggZJaQzocEsXe5r1NAPNerWtOVX3pWTpYsTHDzZqm/cZiYDjk54+FTUqEhaNOJ45aAR7w61lMKpLxoNHBdC8YlybqOmEM8dF6Bx6eA18z5yx2sREB0kWWwztBqtQylfcyz/Qdzya2+2zEnU1ZGYatUVDsezClD/ZxIlZvGCoR3zaCBB4vSzKr4IppFHhhjE3rkq3DahdqbEnBGOGGoy0FJ4YGYo/Izm7rZBz7de7rAbm+pytvyLjFgq9kjmY1/3UMdTbFatNSK04JWev6F23iCXFYbwTOryuGD3tnMFvLJ20oHHvB/PULyrsYKd/8uVC3fISBJYWg6ox5wL2+XeX+U4NMLzT2JiWCVgzm/wxVhzGAx10EkVZ1t3B8a3M+YxuiUjF99ZKFsRyyQlZYXmHSoNOG8xaa9kV0+v3cVmVh/chk4B6/XPolSJX6arffzYcg+JUKXSf7/KcXHcAt5S2vIvGAbEUDJ5PVH05DzOWDAZ1OnkL/55MyLQS0h/9gnvg0jwNhU3/y08Wo7cvMoq3Qc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DU2PR04MB8616.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(508600001)(6486002)(6916009)(6506007)(6512007)(26005)(54906003)(316002)(2906002)(83380400001)(2616005)(186003)(38100700002)(8676002)(66476007)(4326008)(8936002)(66556008)(66946007)(31686004)(5660300002)(86362001)(31696002)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?o/yPRXO+djqq6bhQr/ydTMqnFe7f?= =?utf-8?q?IcfCy9uRzUAZHnDw2qdOo5RdmpzOWn0brvkz4wSgk8vKvLUVpAfskoddqA6+CXYBS?= =?utf-8?q?H6q2l73vCBBywYTn/BVMWcWp+WHO2a8rVikCVbOXFPp2c0h9C2IJetrzOafjXC9QM?= =?utf-8?q?lfJmN++NeP4F2zxW5uS2g6KM6YjrshTNyHPvqYE9BR5EF24fA2zR/SYBx8cj5zWvh?= =?utf-8?q?Yb67F1Jumn/0GlQmTAr2qhE6U93JRmsx7U1xL232C6fFKKZrpLnFUjM0adMjr72nS?= =?utf-8?q?kvxVbKvkrOZwttX07azHfIHQvEmgBYabfcc8CYTpYllxp5kg+DfEL6eu0Fm98k+Ma?= =?utf-8?q?bpho6lEb5KHl9UZTcpTjfJYIklCMCYp8dYsbAHCXiUEAowxVPqm/ATEIKOUk+5Iom?= =?utf-8?q?yrYJp6tM7YSRzurvDi5I69A0qwx6z1385BEuz4iON8qzrMFkNBg1Pub+vswx6Mg3+?= =?utf-8?q?HseWmhQA3YhD87jMyo9DZ/VDTn6kx4tPMMufympC1IkG7g7QKkEKScJ3HeVMzlXDz?= =?utf-8?q?TBZFDYNKgJB+AxoZa8y69CBfoYiT/nTyQPWEfajQNGHQZwou+8IW2eTL2Xmh+ZrQi?= =?utf-8?q?4W+khvwgpaUHyccajpuNYGGx0jxcrIITr7EckxEOv8EGx0Or9AgA59vtrFSFl2Q1n?= =?utf-8?q?XXPUC4dWkGBmgkuV502hHBpZWuWAWqCzGb7rqJ0IO6X3xtjPHZuydBABDpqBXVrvp?= =?utf-8?q?TmOzGXCrmsrWcEYEinENgEUQjHbiycNxnie83SQxvCpjBzcXJJjhZHYPDdFWm8QWr?= =?utf-8?q?h9qe/MOWcHXXPTE2vmctQ2zq9l1tCJE5lb4kCDerLhao0kEaWr5HNAPxP2rjvYhjL?= =?utf-8?q?2TtbNwuXr4ikrsbmKjCUUxJYE8vZnCHZ8yLe2KMzhWEbBeNiS9XgUk3hkfAlpC6hc?= =?utf-8?q?An5EytEKhNaWxek2LcYTvrOfV3Yuj7SlV/cNqpy90m0NQL1krWj2rF60G4wbmn5ZW?= =?utf-8?q?N2pmuqbzMXloAgapWN1zMidrDupyIpxyoordYy3A8FWV3H6d8AqTEdv09++HsvZMR?= =?utf-8?q?DDxLZaCjhcYRzpJcLFOgFZBLlUwMB13jQWGHzfYfziLUR0HNoCiyV8oI3r8KlX42w?= =?utf-8?q?Rytr6fBWGhcYPHX+Qtjo6o+z4oEElrSxVKGv3I1/QNdQOydZrbHIeBEcqxt870kFd?= =?utf-8?q?SJ41ejf9Sno89I91ETP5gDnbIsLd1/k7cnlvBpuQTT/1PUuhFHzB5JCN4P8ccCAll?= =?utf-8?q?INFh09wSjyHSPYXk/V7/pwxIMUOXVR7ydqVL1JxlsAupvKC0oWRBkSIqJQK7m5br9?= =?utf-8?q?nY9ugBPonjy/DhHIj+WFICttZ/h2uxq1n03In9TCz3klEKoCL2+7e0EhKC7qIG5iI?= =?utf-8?q?M0jreB+oaOXSbfKU2v6lqGtvLJda1dzk2sI0QtAGE+Wgl1HNAB90h0SaC2Rb3H3do?= =?utf-8?q?xIIybJGIP67ylCXmS3tlqM3JlPF3BH0acg3tpaku4XblrvQbhQ7UYIQDZBQbSbzxc?= =?utf-8?q?a0O5oKvC7BuZTeIkoqUK9JE5KZ4lrKsPScluk/Xx0AHN31x513uRQyJTwn5zjPPQU?= =?utf-8?q?hdeBaRQlnOars7i8EANz/6XuvSRqD1EHeQkpUGbLIYwQfd9LWAu/MgY+ZzoUz/5X+?= =?utf-8?q?NaEzjGBsrb2NfKtxohweyFqAR/aFdU+xxudEEhXEjTUjlRThgzYvXjdIemLWIrFmf?= =?utf-8?q?Y1dMkhLOHlwOBr+isHG3qqla+TDh9JoQ=3D=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5cdd8ea7-612f-4902-7572-08da1878e562 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8616.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2022 09:27:55.1329 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yC97r7LOGS9qa2PDJ+uKnoBR3IoxliSCv+XsbTy+tsAPRkpUJciCFYfDJ9DT0f2/I48HyEotwwEPCc81HBXKpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5507 If get_iommu_domid() in domain_context_unmap_one() fails, we better wouldn't clear the context entry in the first place, as we're then unable to issue the corresponding flush. However, we have no need to look up the DID in the first place: What needs flushing is very specifically the DID that was in the context entry before our clearing of it. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monné Reviewed-by: Kevin Tian --- This (an intended follow-up to XSA-399) is actually a prereq to what was called patch 1 so far in this series. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1830,18 +1830,12 @@ int domain_context_unmap_one( return 0; } + iommu_domid = context_domain_id(*context); + context_clear_present(*context); context_clear_entry(*context); iommu_sync_cache(context, sizeof(struct context_entry)); - iommu_domid = get_iommu_did(domid, iommu, !domain->is_dying); - if ( iommu_domid == -1 ) - { - spin_unlock(&iommu->lock); - unmap_vtd_domain_page(context_entries); - return -EINVAL; - } - rc = iommu_flush_context_device(iommu, iommu_domid, PCI_BDF2(bus, devfn), DMA_CCMD_MASK_NOBIT, 0);