From nobody Mon May 20 19:11:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1664317840; cv=none; d=zohomail.com; s=zohoarc; b=SlinjXvZHVkv95lgqieUE87AGsfQ86hML/zC/E7lZp0Q9kqDcsisMm9zfRLMfMgn9JUi2J4RRxZxLAuTnKBcjxqA5Mtzgeiay0WB1FbbadoEOO58Rt0vy5F34UDA+4xGUDdncsIsHpMPBV4KaGViwDc/0DCJ5unwiJQLYMjkog4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664317840; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=MqizROy4T5G7gPBbSq3l0KrOthWsU+ke3X7Gin+EV9A=; b=EfEbtxr+arfsf8HwWo82e+ZX1SKG5YCVfDvVew2vcKpQmw4081ulzPAcLxslRGvQqDCI2j15mTU5Vi+1hZAlSkhWdZSgTrI18EQk/aa9cIsdPd1azIZQ22xqE/WTXr1/4m4p8zUrBBvPOPK9bfO9Zb+YYCXEyeqZ2eB0vpehcqo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664317840214989.9088225610927; Tue, 27 Sep 2022 15:30:40 -0700 (PDT) Received: from localhost ([::1]:49312 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1odJ5x-0007E1-OR for importer@patchew.org; Tue, 27 Sep 2022 18:30:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49950) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1odJ4g-00058S-Kk for qemu-devel@nongnu.org; Tue, 27 Sep 2022 18:29:10 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:36836) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1odJ4d-0006Oe-OX for qemu-devel@nongnu.org; Tue, 27 Sep 2022 18:29:09 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-631-m_k-4WyhOhej0YltfWvIOA-1; Tue, 27 Sep 2022 18:29:06 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AF06880206D for ; Tue, 27 Sep 2022 22:29:05 +0000 (UTC) Received: from [172.30.42.193] (unknown [10.22.8.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 78EBA2027061; Tue, 27 Sep 2022 22:29:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664317747; 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=MqizROy4T5G7gPBbSq3l0KrOthWsU+ke3X7Gin+EV9A=; b=H4Z/yuvPRu5QXCv+Nyv8Wv552rhcpsPmkUmuPDKq/8s473DZQO6Ey5uSsxrMn9bAuQyoKC ilQdh4hBcItzG8pMGvijlCKefb/9TPNRTjMbVxw4EGh1NcQPQtQ4IQno5ON3TVyB8JMa0V +27PG5zk2dHIfIMdh9CPScQx5fIWGvU= X-MC-Unique: m_k-4WyhOhej0YltfWvIOA-1 Subject: [PULL 1/2] vfio/migration: Fix incorrect initialization value for parameters in VFIOMigration From: Alex Williamson To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com Date: Tue, 27 Sep 2022 16:29:04 -0600 Message-ID: <166431773251.2571033.17308966326809405523.stgit@omen> In-Reply-To: <166431760265.2571033.4930197108505513269.stgit@omen> References: <166431760265.2571033.4930197108505513269.stgit@omen> User-Agent: StGit/1.5.dev2+g9ce680a52bd9 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=alex.williamson@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1664317841788100001 From: Kunkun Jiang The structure VFIOMigration of a VFIODevice is allocated and initialized in vfio_migration_init(). "device_state" and "vm_running" are initialized to 0, indicating that VFIO device is_STOP and VM is not-running. The initialization value is incorrect. According to the agreement, default state of VFIO device is _RUNNING. And if a VFIO device is hot-plugged while the VM is running, "vm_running" should be 1. This patch fixes it. Fixes: 02a7e71b1e5b ("vfio: Add VM state change handler to know state of VM= ") Signed-off-by: Kunkun Jiang Link: https://lore.kernel.org/r/20220711014651.1327-1-jiangkunkun@huawei.com Signed-off-by: Alex Williamson --- hw/vfio/migration.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index a6ad1f894561..3de4252111ee 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -806,6 +806,8 @@ static int vfio_migration_init(VFIODevice *vbasedev, } =20 vbasedev->migration =3D g_new0(VFIOMigration, 1); + vbasedev->migration->device_state =3D VFIO_DEVICE_STATE_RUNNING; + vbasedev->migration->vm_running =3D runstate_is_running(); =20 ret =3D vfio_region_setup(obj, vbasedev, &vbasedev->migration->region, info->index, "migration"); From nobody Mon May 20 19:11:39 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1664317963; cv=none; d=zohomail.com; s=zohoarc; b=V6Vj5e5hnMkjasZVHqw6uFnAvytqSMZdJdaoAqe5J0ocCeB3abMlzf9J/DXSGBIfZm5CJ/wh4aCD653OuE3KJsLAnYZAQa446nU+Ser/umw3PVv5rZpWCWW54pCwfpprXobl1es47PVzdDZCchI1ZEv9HB8nJSCQOwhCQVhveZc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1664317963; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=G0GZU0dDY6FAr4ysEAlZnz2tbitpsUoqJeeFfNt+VEg=; b=bGPH/NdNl4v3Cr76MZ5sP+TtUwqNg1tVz/s1wKNl8XveCL1jDvPNSjNjHwui4bTpvskPAAgHynjlgzOst5qzP5gUR47R+C3o6n42fLLeW8zEzcuWmMTjbzpASY3OqJ1KqDcD/vvHjUZMuvUMZ8YQMLC+huiB5Cracw0dczGJPoU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1664317963334785.0243082653146; Tue, 27 Sep 2022 15:32:43 -0700 (PDT) Received: from localhost ([::1]:35192 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1odJ86-0000mT-Bh for importer@patchew.org; Tue, 27 Sep 2022 18:32:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51588) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1odJ4v-0005pu-D8 for qemu-devel@nongnu.org; Tue, 27 Sep 2022 18:29:25 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:23563) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1odJ4t-0006Rs-Mi for qemu-devel@nongnu.org; Tue, 27 Sep 2022 18:29:25 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-576-Q31c9S99MnWr58pvemzjoA-1; Tue, 27 Sep 2022 18:29:21 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7800F85A5A6 for ; Tue, 27 Sep 2022 22:29:21 +0000 (UTC) Received: from [172.30.42.193] (unknown [10.22.8.99]) by smtp.corp.redhat.com (Postfix) with ESMTP id 42B9340C2064; Tue, 27 Sep 2022 22:29:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1664317763; 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=G0GZU0dDY6FAr4ysEAlZnz2tbitpsUoqJeeFfNt+VEg=; b=RYOsfn0XGO8XoEwrimmSHUozvXdojARTbLPhTB4BZ7+1UHXhioL4HmG1vSpjUakmx0BKTO ujnR5q2vSinV6qO0XHwkAdIEOvDZJHfs8RqRnHbwQ6KTQcProY251/yR/hOFNIrvsmBjdR DP8eoeNC2+JxTfmx81h5stYJ/T/Jwqc= X-MC-Unique: Q31c9S99MnWr58pvemzjoA-1 Subject: [PULL 2/2] vfio/common: Fix vfio_iommu_type1_info use after free From: Alex Williamson To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com Date: Tue, 27 Sep 2022 16:29:20 -0600 Message-ID: <166431775079.2571033.16205179227202320273.stgit@omen> In-Reply-To: <166431760265.2571033.4930197108505513269.stgit@omen> References: <166431760265.2571033.4930197108505513269.stgit@omen> User-Agent: StGit/1.5.dev2+g9ce680a52bd9 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=alex.williamson@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1664317964431100001 On error, vfio_get_iommu_info() frees and clears *info, but vfio_connect_container() continues to use the pointer regardless of the return value. Restructure the code such that a failure of this function triggers an error and clean up the remainder of the function, including updating an outdated comment that had drifted from its relevant line of code and using host page size for a default for better compatibility on non-4KB systems. Reported-by: Nicolin Chen Link: https://lore.kernel.org/all/20220910004245.2878-1-nicolinc@nvidia.com/ Signed-off-by: Alex Williamson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Nicolin Chen Tested-by: Nicolin Chen Link: https://lore.kernel.org/r/166326219630.3388898.12882473157184946072.s= tgit@omen Signed-off-by: Alex Williamson --- hw/vfio/common.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index ace9562a9ba1..6b5d8c0bf694 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -2111,29 +2111,31 @@ static int vfio_connect_container(VFIOGroup *group,= AddressSpace *as, { struct vfio_iommu_type1_info *info; =20 - /* - * FIXME: This assumes that a Type1 IOMMU can map any 64-bit - * IOVA whatsoever. That's not actually true, but the current - * kernel interface doesn't tell us what it can map, and the - * existing Type1 IOMMUs generally support any IOVA we're - * going to actually try in practice. - */ ret =3D vfio_get_iommu_info(container, &info); + if (ret) { + error_setg_errno(errp, -ret, "Failed to get VFIO IOMMU info"); + goto enable_discards_exit; + } =20 - if (ret || !(info->flags & VFIO_IOMMU_INFO_PGSIZES)) { - /* Assume 4k IOVA page size */ - info->iova_pgsizes =3D 4096; + if (info->flags & VFIO_IOMMU_INFO_PGSIZES) { + container->pgsizes =3D info->iova_pgsizes; + } else { + container->pgsizes =3D qemu_real_host_page_size(); } - vfio_host_win_add(container, 0, (hwaddr)-1, info->iova_pgsizes); - container->pgsizes =3D info->iova_pgsizes; =20 - /* The default in the kernel ("dma_entry_limit") is 65535. */ - container->dma_max_mappings =3D 65535; - if (!ret) { - vfio_get_info_dma_avail(info, &container->dma_max_mappings); - vfio_get_iommu_info_migration(container, info); + if (!vfio_get_info_dma_avail(info, &container->dma_max_mappings)) { + container->dma_max_mappings =3D 65535; } + vfio_get_iommu_info_migration(container, info); g_free(info); + + /* + * FIXME: We should parse VFIO_IOMMU_TYPE1_INFO_CAP_IOVA_RANGE + * information to get the actual window extent rather than assume + * a 64-bit IOVA address space. + */ + vfio_host_win_add(container, 0, (hwaddr)-1, container->pgsizes); + break; } case VFIO_SPAPR_TCE_v2_IOMMU: