Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp250881pxb; Fri, 15 Jan 2021 02:15:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJx0qh2qbexBUvCs5WoRv0ALcV9dp90Kigg6LwbDJWXMmRirQ0RzpDCJzMGvK68S7lGSmRMQ X-Received: by 2002:a50:b742:: with SMTP id g60mr8826260ede.113.1610705753664; Fri, 15 Jan 2021 02:15:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610705753; cv=none; d=google.com; s=arc-20160816; b=g0tHvHhO/ShcFxAMqM1ZrMJ0UfuJTL3NhJs4aMzpz1tu8HQ61crlOY9HuEjs7mXABg qJjI4YlWnCDm9I7OIQoLSgzicgWQ4+BNGX4/kIcCDRWYJiBpFXvY/EvWaomREorVGMxi 3xTNYuXRM2JxDgLO4KxT7cf6oBv3Un85WRQu09zyqk6y7XGPX7/aWQK+ds3eALEHbe6+ WHfGIA1Sm3XKEAttQ8P+IpBcJr2fiuoAzLuf/K8IMGdE8yg7/8G3U7FUGk4M4Mc2LtBe RllXbC+JdMraNVtO3F2QdlROeR7ftwyVPjDsuUxsVG1SxlmbBlCuYqc5uC+4K/c1Nhtt gd4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=tDX5VoZJxudPK4qQtAYYuXWeF2xqFvPWbtrk4Nh10TA=; b=0+cA1E6Y7sUsNQHF0E/54vzEIPzJVkLW+7j4RYfkfHSinlCICZRwZLgcT1IxL7RFa8 4r2ewoHCupEvmAPMymMrcsxoHyL68kT74W16HLSV6+4/uMwPpSOJxpTjtj028Iw8SjNI 7paj7dA8ROdhKNC2M71VvJk7C5TKume8l7xJYijFyHgScTpdvNqg8g1N2JxQ5cjdi1Cg D3Q2KrN2y8o8822rZCzSHLajHzhFrJspPTD9SCy3Tm+EJoWNUjBKur12xkQFa3KfxOto OKAX/cypqxSAK/QSkQDYMOY8uT6iJWDIq7LUTIQtb3If2J0gIdYSoDAeu4JxuGRMXfAq V+jQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w6si3871866edt.581.2021.01.15.02.15.29; Fri, 15 Jan 2021 02:15:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730528AbhAOKOi (ORCPT + 99 others); Fri, 15 Jan 2021 05:14:38 -0500 Received: from szxga04-in.huawei.com ([45.249.212.190]:10660 "EHLO szxga04-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728088AbhAOKOf (ORCPT ); Fri, 15 Jan 2021 05:14:35 -0500 Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4DHH74456Wz15tPH; Fri, 15 Jan 2021 18:12:48 +0800 (CST) Received: from DESKTOP-5IS4806.china.huawei.com (10.174.184.42) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.498.0; Fri, 15 Jan 2021 18:13:42 +0800 From: Keqian Zhu To: , , , , , Alex Williamson , Kirti Wankhede , Cornelia Huck , Will Deacon , Marc Zyngier , Catalin Marinas CC: Mark Rutland , James Morse , Robin Murphy , Joerg Roedel , "Daniel Lezcano" , Thomas Gleixner , Suzuki K Poulose , Julien Thierry , Andrew Morton , Alexios Zavras , , Subject: [RESEND PATCH v2 2/2] vfio/iommu_type1: Sanity check pfn_list when remove vfio_dma Date: Fri, 15 Jan 2021 18:13:21 +0800 Message-ID: <20210115101321.12084-3-zhukeqian1@huawei.com> X-Mailer: git-send-email 2.8.4.windows.1 In-Reply-To: <20210115101321.12084-1-zhukeqian1@huawei.com> References: <20210115101321.12084-1-zhukeqian1@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.174.184.42] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org vfio_sanity_check_pfn_list() is used to check whether pfn_list of vfio_dma is empty when remove the external domain, so it makes a wrong assumption that only external domain will add pfn to dma pfn_list. Now we apply this check when remove a specific vfio_dma and extract the notifier check just for external domain. Fixes: a54eb55045ae ("vfio iommu type1: Add support for mediated devices") Signed-off-by: Keqian Zhu --- drivers/vfio/vfio_iommu_type1.c | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index c16924cd54e7..9b7fcff6bd81 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -958,6 +958,7 @@ static long vfio_unmap_unpin(struct vfio_iommu *iommu, struct vfio_dma *dma, static void vfio_remove_dma(struct vfio_iommu *iommu, struct vfio_dma *dma) { + WARN_ON(!RB_EMPTY_ROOT(&dma->pfn_list)); vfio_unmap_unpin(iommu, dma, true); vfio_unlink_dma(iommu, dma); put_task_struct(dma->task); @@ -2251,23 +2252,6 @@ static void vfio_iommu_unmap_unpin_reaccount(struct vfio_iommu *iommu) } } -static void vfio_sanity_check_pfn_list(struct vfio_iommu *iommu) -{ - struct rb_node *n; - - n = rb_first(&iommu->dma_list); - for (; n; n = rb_next(n)) { - struct vfio_dma *dma; - - dma = rb_entry(n, struct vfio_dma, node); - - if (WARN_ON(!RB_EMPTY_ROOT(&dma->pfn_list))) - break; - } - /* mdev vendor driver must unregister notifier */ - WARN_ON(iommu->notifier.head); -} - /* * Called when a domain is removed in detach. It is possible that * the removed domain decided the iova aperture window. Modify the @@ -2367,7 +2351,8 @@ static void vfio_iommu_type1_detach_group(void *iommu_data, kfree(group); if (list_empty(&iommu->external_domain->group_list)) { - vfio_sanity_check_pfn_list(iommu); + /* mdev vendor driver must unregister notifier */ + WARN_ON(iommu->notifier.head); if (!IS_IOMMU_CAP_DOMAIN_IN_CONTAINER(iommu)) vfio_iommu_unmap_unpin_all(iommu); @@ -2492,7 +2477,8 @@ static void vfio_iommu_type1_release(void *iommu_data) if (iommu->external_domain) { vfio_release_domain(iommu->external_domain, true); - vfio_sanity_check_pfn_list(iommu); + /* mdev vendor driver must unregister notifier */ + WARN_ON(iommu->notifier.head); kfree(iommu->external_domain); } -- 2.19.1