Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp3537467imm; Mon, 2 Jul 2018 00:30:21 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcfKnFEJRajMMPbLOinXrT7FJqzHANGrJEbvqTFD3e4YwcagwFg26QHA1xOTsmSof4DMnpL X-Received: by 2002:a62:3687:: with SMTP id d129-v6mr24180950pfa.137.1530516621345; Mon, 02 Jul 2018 00:30:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530516621; cv=none; d=google.com; s=arc-20160816; b=wJXUp8xXwYDUre+FUsbT24wMgyWsTHYbZZAxSz2Y2Mwev2F5HL9bpIrCwHugigpreX ARzPzuxuv+ggOLFfwXDMQvH0I4KpdQhKI7T0LkGa5dDEkBS/vBfRZixfGDlS6i/MJT1o tUkgV8UjSZYvWq1pCmPXplDjevitzdiHc1mSgAMfCSWV4z0UnvF/aNQryBilU26PDk2M K0xi8b2H4u3jQ82vxwCc8o6SMjsN5+z63dEomgucJR7xYg71EFfsSkiKIh56CiYu6u5A JnQmHJmGAo/q8MITHlSzRNdsB6+xi5SLXXvmDtyCVUirEXRrhXYYUQf3XDu8OyMc+R3H M61A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=D7zaiqSIGM9II3uxsXda2i3ZY3hpZhxQtj4UvwLidmE=; b=Mb0Gb7GQgfKHHREaLcOMn8rFwBxhoNhUVuVfUdtB6EWN4XXsoPJXvnPHGX7fQgbZ+/ JII9IIbuyS369UueLL9as7C+mGmPQ0CilwYyK+s45BtDtJbqBxpLY6wuv9ULf1fws6P4 FLK+7NtEy8dTZXd9sWdH9yJWSR6Z4svwFI7N3Eer/p1hnMwcqt2MYJn21KMNFXRmE0zQ DrZdm/s5HqpFJiReW78tVwtbGNps7Bk6lbdt+8GxcVK2qKtCj6R9qYWBPQz/dfuFw1Ap Zg6ebrRQqo4XoXkX7JInxVppiINqqvBwxDqzR11phm//46ZE6tCb5sbxYQa4uSYRsPXK ud6Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d5-v6si8833570pla.337.2018.07.02.00.30.06; Mon, 02 Jul 2018 00:30:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932092AbeGBH1T (ORCPT + 99 others); Mon, 2 Jul 2018 03:27:19 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:36812 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753777AbeGBH1O (ORCPT ); Mon, 2 Jul 2018 03:27:14 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5F5EE81A4EBE; Mon, 2 Jul 2018 07:27:13 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-12-103.pek2.redhat.com [10.72.12.103]) by smtp.corp.redhat.com (Postfix) with ESMTP id 162107C2B; Mon, 2 Jul 2018 07:27:05 +0000 (UTC) From: Lianbo Jiang To: linux-kernel@vger.kernel.org Cc: mingo@redhat.com, tglx@linutronix.de, hpa@zytor.com, ebiederm@xmission.com, joro@8bytes.org, thomas.lendacky@amd.com, dyoung@redhat.com, kexec@lists.infradead.org, iommu@lists.linux-foundation.org, bhe@redhat.com Subject: [PATCH 3/5 V5] Remap the device table of IOMMU in encrypted manner for kdump Date: Mon, 2 Jul 2018 15:26:37 +0800 Message-Id: <20180702072639.10110-4-lijiang@redhat.com> In-Reply-To: <20180702072639.10110-1-lijiang@redhat.com> References: <20180702072639.10110-1-lijiang@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Mon, 02 Jul 2018 07:27:13 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Mon, 02 Jul 2018 07:27:13 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lijiang@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In kdump mode, it will copy the device table of IOMMU from the old device table, which is encrypted when SME is enabled in the first kernel. So we must remap it in encrypted manner in order to be automatically decrypted when we read. Signed-off-by: Lianbo Jiang --- Some changes: 1. add some comments 2. clean compile warning. 3. remove unnecessary code when we clear sme mask bit. drivers/iommu/amd_iommu_init.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 904c575..4cebb00 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -888,12 +888,22 @@ static bool copy_device_table(void) } } - old_devtb_phys = entry & PAGE_MASK; + /* + * When SME is enabled in the first kernel, the entry includes the + * memory encryption mask(sme_me_mask), we must remove the memory + * encryption mask to obtain the true physical address in kdump mode. + */ + old_devtb_phys = __sme_clr(entry) & PAGE_MASK; + if (old_devtb_phys >= 0x100000000ULL) { pr_err("The address of old device table is above 4G, not trustworthy!\n"); return false; } - old_devtb = memremap(old_devtb_phys, dev_table_size, MEMREMAP_WB); + old_devtb = (sme_active() && is_kdump_kernel()) + ? (__force void *)ioremap_encrypted(old_devtb_phys, + dev_table_size) + : memremap(old_devtb_phys, dev_table_size, MEMREMAP_WB); + if (!old_devtb) return false; -- 2.9.5