Received: by 2002:ac0:8845:0:0:0:0:0 with SMTP id g63csp1164172img; Tue, 26 Feb 2019 15:37:48 -0800 (PST) X-Google-Smtp-Source: AHgI3IZa8Q0P3cIYqmuCnU+K3iQOmWoFDOVzLh3vyfO6rIXNRbOOBKJ+gXgsP/nWWk/KqYQi9pR7 X-Received: by 2002:a17:902:6804:: with SMTP id h4mr28719295plk.115.1551224268816; Tue, 26 Feb 2019 15:37:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551224268; cv=none; d=google.com; s=arc-20160816; b=JesQz0s2SI/5YGIH4s1tihTzHR91B+JEVpk4R1giOsqFzOf0Doh2un/lYF1KSiixc+ w+05tB7ROSDGBrFdnpA3K5qDEPam0o2SMnrPb3/v2eByws/gNfARskmRr/qGmn4OcfI1 Aywv6sqRUhuCl0BpsrAlSWWdZwWNeaPbxvgPQTfuM3RyfOHYSQ4Zqg+WlumI6K+EYX88 Oub0VTFgsTti163+R6l/ZsHdVhz2hS6ubvh2I0ZH4aYzTyDvLVL03/DVHjoHTTqeLJvT 6uovTpg+MlZxgm76uqG5T9808DkM7PKMHck1WUk8h87Qi7EOgliTzlIXQvYblN3nD9J3 VxcQ== 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:dkim-signature; bh=+oYY7xbWtmy3I3xAdK40RKuX5lYtH9k01cC1Ag26GTE=; b=Si/2fei1cZ2X+a0QrlwGWZC4Mm6wZv1EVxmtcGQn9od3sS3PRzucnyAGh8YVyWzbe+ aYN2o92DnlVEOIJ9kORZWUdDKBI024huG+HAttlCzXddJ1G7FscP+SsVPhRCr65pv22K uLVafIZOI/KutNnfr48sUXEJwubHsLlwhJycoYxfA4itUoM9IVW21NZ77p0GFOBlTXRM aEx5mk5CIZM2+7o6nNFyujSbfFgq0hDV7KApvg54826Wnr0F47uX8NHW+ca13IyANoEI qHuPjOzXFdn4r/5NAA0LimnpgQ7kNW5atGPP6D6W8GD4gAIgK84pp06xJklXmvtey8/A glRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=UFpQQXyv; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p6si9580962pga.151.2019.02.26.15.37.34; Tue, 26 Feb 2019 15:37:48 -0800 (PST) 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; dkim=pass header.i=@chromium.org header.s=google header.b=UFpQQXyv; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729509AbfBZXhA (ORCPT + 99 others); Tue, 26 Feb 2019 18:37:00 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:37247 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728729AbfBZXg5 (ORCPT ); Tue, 26 Feb 2019 18:36:57 -0500 Received: by mail-pl1-f194.google.com with SMTP id q3so7010507pll.4 for ; Tue, 26 Feb 2019 15:36:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+oYY7xbWtmy3I3xAdK40RKuX5lYtH9k01cC1Ag26GTE=; b=UFpQQXyv1WlG+vQ2VGQVeBpekJEgGJm2XiXC/0iqN9nei8flgJHMUhw+1gO/u6r5Z7 0vm0yI+z26dsUE9TactgLhLPQvgHVxBI9LzDiQ3XZ2VyxREYHaViUVTcnjLuZEl7BgO0 yrwaIBLzjSsVT03OTDfX79+D30OJwPVl2oPoA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+oYY7xbWtmy3I3xAdK40RKuX5lYtH9k01cC1Ag26GTE=; b=t8G91vRKdOiNjxIJ5UFYnI7SZDyWQBKTb5R0mAcpcoeoOLye10Ek+7kh3tXc9JtegB dCIpBZN4305kiJzSSIs4dKOSkifqjJhrmHDs+pOF5X9jMqjiDNzFVdcSpiPtvcHuDhPd U4yzT1Fj7MXx7hwqOA1588YKaRe4tl1kR70yI3CLd9gJtjuL0H+tqA0+ajGIhN2UzJzM 5/10R7cjPQT9bmTz816q01c0ZM5ptPAmgXufe/oNYmEkR96UUthcIiG3VTDOK92qTujX FZrQ2j6DuNvx7kAl7i0qJckjTDAMyP0UGxmHt8WGeMny2rQYsXiI387YF/zqQZozNp1c DGeg== X-Gm-Message-State: AHQUAuYwJf2TePAgNugXIANGlydfPVfwmojASpVK8ja5r7z8Px0qofC9 2Tlo/xaUEgSKzT2GVZkvk8aL5Q== X-Received: by 2002:a17:902:6b8c:: with SMTP id p12mr29293448plk.282.1551224217159; Tue, 26 Feb 2019 15:36:57 -0800 (PST) Received: from www.outflux.net (173-164-112-133-Oregon.hfc.comcastbusiness.net. [173.164.112.133]) by smtp.gmail.com with ESMTPSA id y14sm22436097pgc.17.2019.02.26.15.36.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 26 Feb 2019 15:36:54 -0800 (PST) From: Kees Cook To: Thomas Gleixner Cc: Kees Cook , Peter Zijlstra , Jann Horn , Sean Christopherson , Dominik Brodowski , Kernel Hardening , linux-kernel@vger.kernel.org Subject: [PATCH 2/3] x86/asm: Avoid taking an exception before cr4 restore Date: Tue, 26 Feb 2019 15:36:46 -0800 Message-Id: <20190226233647.28547-3-keescook@chromium.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190226233647.28547-1-keescook@chromium.org> References: <20190226233647.28547-1-keescook@chromium.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Instead of taking a full WARN() exception before restoring a potentially missed CR4 bit, this retains the missing bit for later reporting. This matches the logic done for the CR0 pinning. Signed-off-by: Kees Cook --- arch/x86/include/asm/special_insns.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h index 8416d6b31084..6f649eaecc73 100644 --- a/arch/x86/include/asm/special_insns.h +++ b/arch/x86/include/asm/special_insns.h @@ -97,6 +97,8 @@ extern volatile unsigned long cr4_pin; static inline void native_write_cr4(unsigned long val) { + unsigned long warn = 0; + again: val |= cr4_pin; asm volatile("mov %0,%%cr4": : "r" (val), "m" (__force_order)); @@ -105,10 +107,12 @@ static inline void native_write_cr4(unsigned long val) * notice the lack of pinned bits in "val" and start the function * from the beginning to gain the cr4_pin bits for sure. */ - if (WARN_ONCE((val & cr4_pin) != cr4_pin, - "Attempt to unpin cr4 bits: %lx, cr4 bypass attack?!", - ~val & cr4_pin)) + if ((val & cr4_pin) != cr4_pin) { + warn = ~val & cr4_pin; goto again; + } + WARN_ONCE(warn, "Attempt to unpin cr4 bits: %lx; bypass attack?!\n", + warn); } #ifdef CONFIG_X86_64 -- 2.17.1