From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=209.132.183.28; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5121921E781EA for ; Tue, 3 Oct 2017 14:25:18 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5ED117F40F; Tue, 3 Oct 2017 21:28:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 5ED117F40F Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=lersek@redhat.com Received: from lacos-laptop-7.usersys.redhat.com (ovpn-122-192.rdu2.redhat.com [10.10.122.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id ED2906024A; Tue, 3 Oct 2017 21:28:36 +0000 (UTC) From: Laszlo Ersek To: edk2-devel-01 Cc: Eric Dong , Jiewen Yao , Ladi Prosek , Star Zeng Date: Tue, 3 Oct 2017 23:28:28 +0200 Message-Id: <20171003212834.25740-1-lersek@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 03 Oct 2017 21:28:38 +0000 (UTC) Subject: [PATCH 0/6] MdeModulePkg/VariableSmm: fix MOR / MorLock inconsistency X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Oct 2017 21:25:18 -0000 Repo: https://github.com/lersek/edk2.git Branch: mor_lock_init_at_end_of_dxe This patch set fixes the issue reported in the following items: * Inconsistent MOR control variables exposed by OVMF, breaks Windows Device Guard https://bugzilla.redhat.com/show_bug.cgi?id=1496170 * VariableSmm MorLockInit(): create MORLock only if / after MOR exists https://bugzilla.tianocore.org/show_bug.cgi?id=727 Patches #1 through #3 are cleanups. Patch #4 is a small helper patch for patch #5. Patch #5 is the actual fix, following Jiewen's suggestions from the edk2-devel thread * [edk2] multiple levels of support for MOR / MORLock https://lists.01.org/pipermail/edk2-devel/2017-September/015444.html https://lists.01.org/pipermail/edk2-devel/2017-October/015530.html Patch #6 is a workaround for some OSes (minimally Fedora 24-26, and some Debian versions) that create the MOR variable even if the platform doesn't offer it up-front. This patch also follows Jiewen's suggestion from the same edk2-devel thread. ( BTW, at Paolo's recommendation, I've now reported this kernel issue for Fedora, under * incorrect downstream-only Platform Reset Attack Mitigation patch in the F24-F26 kernels https://bugzilla.redhat.com/show_bug.cgi?id=1498159 ) I've checked this set for basic regressions, using OVMF, normal boot and S3 suspend/resume: * Q35, SMM, IA32: - Fedora 25 -- verified patch #6 specifically * i440fx, no SMM, X64: - Fedora 24 * Q35, SMM, IA32X64: - Fedora 26 -- verified patch #6 specifically - Windows 7 - Windows 8.1 - Windows 10 - Windows Server 2008 R2 - Windows Server 2012 R2 I didn't / couldn't test this set in the following two environments: - on platforms where TcgMor.inf is included in the firmware, and the MOR variable exists genuinely, - in the nested virt setup where Ladi reported the Device Guard breakage. (If I understand correctly, ATM this requires additional host kernel (KVM) patches.) Test results / feedback from those envs would be appreciated. Cc: Eric Dong Cc: Jiewen Yao Cc: Ladi Prosek Cc: Star Zeng Thanks, Laszlo Laszlo Ersek (6): MdeModulePkg/Variable/RuntimeDxe: move SecureBootHook() decl to new header MdeModulePkg/Variable/RuntimeDxe: move MOR func. declarations to header MdeModulePkg/Variable/RuntimeDxe: introduce MorLockInitAtEndOfDxe() hook MdeModulePkg/Variable/RuntimeDxe: permit MorLock deletion for passthru req MdeModulePkg/Variable/RuntimeDxe: delay MorLock creation until EndOfDxe MdeModulePkg/Variable/RuntimeDxe: delete and lock OS-created MOR variable MdeModulePkg/Universal/Variable/RuntimeDxe/Measurement.c | 2 + MdeModulePkg/Universal/Variable/RuntimeDxe/PrivilegePolymorphic.h | 89 ++++++++++ MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockDxe.c | 45 +++-- MdeModulePkg/Universal/Variable/RuntimeDxe/TcgMorLockSmm.c | 173 ++++++++++++++++++-- MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c | 51 ------ MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.h | 2 + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c | 2 + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf | 1 + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.c | 2 + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmm.inf | 4 + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c | 16 +- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf | 1 + 12 files changed, 294 insertions(+), 94 deletions(-) create mode 100644 MdeModulePkg/Universal/Variable/RuntimeDxe/PrivilegePolymorphic.h -- 2.14.1.3.gb7cf6e02401b