From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753425AbdLDRJA (ORCPT ); Mon, 4 Dec 2017 12:09:00 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:59724 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752073AbdLDQuu (ORCPT ); Mon, 4 Dec 2017 11:50:50 -0500 Message-Id: <20171204150604.899457242@linutronix.de> User-Agent: quilt/0.63-1 Date: Mon, 04 Dec 2017 15:07:07 +0100 From: Thomas Gleixner To: LKML Cc: x86@kernel.org, Linus Torvalds , Andy Lutomirsky , Peter Zijlstra , Dave Hansen , Borislav Petkov , Greg KH , keescook@google.com, hughd@google.com, Brian Gerst , Josh Poimboeuf , Denys Vlasenko , Rik van Riel , Boris Ostrovsky , Juergen Gross , David Laight , Eduardo Valentin , aliguori@amazon.com, Will Deacon , daniel.gruss@iaik.tugraz.at, xen-devel@lists.xenproject.org Subject: [patch 01/60] x86/entry/64/paravirt: Use paravirt-safe macro to access eflags References: <20171204140706.296109558@linutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Disposition: inline; filename=x86-entry-64-paravirt--Use_paravirt-safe_macro_to_access_eflags.patch Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Boris Ostrovsky Commit 1d3e53e8624a ("x86/entry/64: Refactor IRQ stacks and make them NMI-safe") added DEBUG_ENTRY_ASSERT_IRQS_OFF macro that acceses eflags using 'pushfq' instruction when testing for IF bit. On PV Xen guests looking at IF flag directly will always see it set, resulting in 'ud2'. Introduce SAVE_FLAGS() macro that will use appropriate save_fl pv op when running paravirt. Signed-off-by: Boris Ostrovsky Signed-off-by: Thomas Gleixner Cc: jgross@suse.com Cc: xen-devel@lists.xenproject.org Cc: luto@kernel.org Link: https://lkml.kernel.org/r/1512159805-6314-1-git-send-email-boris.ostrovsky@oracle.com --- V3: * Use CLBR_RAX to preserve all registers except %rax arch/x86/entry/entry_64.S | 7 ++++--- arch/x86/include/asm/irqflags.h | 3 +++ arch/x86/include/asm/paravirt.h | 9 +++++++++ arch/x86/kernel/asm-offsets_64.c | 3 +++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index f81d50d..18474bb 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -466,12 +466,13 @@ END(irq_entries_start) .macro DEBUG_ENTRY_ASSERT_IRQS_OFF #ifdef CONFIG_DEBUG_ENTRY - pushfq - testl $X86_EFLAGS_IF, (%rsp) + pushq %rax + SAVE_FLAGS(CLBR_RAX) + testl $X86_EFLAGS_IF, %eax jz .Lokay_\@ ud2 .Lokay_\@: - addq $8, %rsp + popq %rax #endif .endm diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h index c8ef23f..89f0895 100644 --- a/arch/x86/include/asm/irqflags.h +++ b/arch/x86/include/asm/irqflags.h @@ -142,6 +142,9 @@ static inline notrace unsigned long arch_local_irq_save(void) swapgs; \ sysretl +#ifdef CONFIG_DEBUG_ENTRY +#define SAVE_FLAGS(x) pushfq; popq %rax +#endif #else #define INTERRUPT_RETURN iret #define ENABLE_INTERRUPTS_SYSEXIT sti; sysexit diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 283efca..892df37 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h @@ -927,6 +927,15 @@ static inline notrace unsigned long arch_local_irq_save(void) PARA_SITE(PARA_PATCH(pv_cpu_ops, PV_CPU_usergs_sysret64), \ CLBR_NONE, \ jmp PARA_INDIRECT(pv_cpu_ops+PV_CPU_usergs_sysret64)) + +#ifdef CONFIG_DEBUG_ENTRY +#define SAVE_FLAGS(clobbers) \ + PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_save_fl), clobbers, \ + PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE); \ + call PARA_INDIRECT(pv_irq_ops+PV_IRQ_save_fl); \ + PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);) +#endif + #endif /* CONFIG_X86_32 */ #endif /* __ASSEMBLY__ */ diff --git a/arch/x86/kernel/asm-offsets_64.c b/arch/x86/kernel/asm-offsets_64.c index 630212f..e3a5175 100644 --- a/arch/x86/kernel/asm-offsets_64.c +++ b/arch/x86/kernel/asm-offsets_64.c @@ -23,6 +23,9 @@ int main(void) #ifdef CONFIG_PARAVIRT OFFSET(PV_CPU_usergs_sysret64, pv_cpu_ops, usergs_sysret64); OFFSET(PV_CPU_swapgs, pv_cpu_ops, swapgs); +#ifdef CONFIG_DEBUG_ENTRY + OFFSET(PV_IRQ_save_fl, pv_irq_ops, save_fl); +#endif BLANK(); #endif -- 1.7.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Gleixner Subject: [patch 01/60] x86/entry/64/paravirt: Use paravirt-safe macro to access eflags Date: Mon, 04 Dec 2017 15:07:07 +0100 Message-ID: <20171204150604.899457242@linutronix.de> References: <20171204140706.296109558@linutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eLtxs-0006Hv-Hr for xen-devel@lists.xenproject.org; Mon, 04 Dec 2017 16:51:32 +0000 Content-Disposition: inline; filename=x86-entry-64-paravirt--Use_paravirt-safe_macro_to_access_eflags.patch List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: LKML Cc: Juergen Gross , Rik van Riel , Eduardo Valentin , Denys Vlasenko , aliguori@amazon.com, Brian Gerst , Peter Zijlstra , Greg KH , x86@kernel.org, hughd@google.com, Will Deacon , daniel.gruss@iaik.tugraz.at, Dave Hansen , David Laight , Josh Poimboeuf , Andy Lutomirsky , keescook@google.com, xen-devel@lists.xenproject.org, Boris Ostrovsky , Borislav Petkov , Linus Torvalds List-Id: xen-devel@lists.xenproject.org RnJvbTogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbT4KCkNvbW1p dCAxZDNlNTNlODYyNGEgKCJ4ODYvZW50cnkvNjQ6IFJlZmFjdG9yIElSUSBzdGFja3MgYW5kIG1h a2UgdGhlbQpOTUktc2FmZSIpIGFkZGVkIERFQlVHX0VOVFJZX0FTU0VSVF9JUlFTX09GRiBtYWNy byB0aGF0IGFjY2VzZXMgZWZsYWdzCnVzaW5nICdwdXNoZnEnIGluc3RydWN0aW9uIHdoZW4gdGVz dGluZyBmb3IgSUYgYml0LiBPbiBQViBYZW4gZ3Vlc3RzCmxvb2tpbmcgYXQgSUYgZmxhZyBkaXJl Y3RseSB3aWxsIGFsd2F5cyBzZWUgaXQgc2V0LCByZXN1bHRpbmcgaW4gJ3VkMicuCgpJbnRyb2R1 Y2UgU0FWRV9GTEFHUygpIG1hY3JvIHRoYXQgd2lsbCB1c2UgYXBwcm9wcmlhdGUgc2F2ZV9mbCBw diBvcCB3aGVuCnJ1bm5pbmcgcGFyYXZpcnQuCgpTaWduZWQtb2ZmLWJ5OiBCb3JpcyBPc3Ryb3Zz a3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgR2xl aXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6IGpncm9zc0BzdXNlLmNvbQpDYzogeGVuLWRl dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBsdXRvQGtlcm5lbC5vcmcKTGluazogaHR0cHM6 Ly9sa21sLmtlcm5lbC5vcmcvci8xNTEyMTU5ODA1LTYzMTQtMS1naXQtc2VuZC1lbWFpbC1ib3Jp cy5vc3Ryb3Zza3lAb3JhY2xlLmNvbQoKLS0tClYzOgoqIFVzZSBDTEJSX1JBWCB0byBwcmVzZXJ2 ZSBhbGwgcmVnaXN0ZXJzIGV4Y2VwdCAlcmF4CgoKIGFyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMg ICAgICAgIHwgICAgNyArKysrLS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFmbGFncy5oICB8 ICAgIDMgKysrCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oICB8ICAgIDkgKysrKysr KysrCiBhcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYyB8ICAgIDMgKysrCiA0IGZpbGVz IGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv YXJjaC94ODYvZW50cnkvZW50cnlfNjQuUyBiL2FyY2gveDg2L2VudHJ5L2VudHJ5XzY0LlMKaW5k ZXggZjgxZDUwZC4uMTg0NzRiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvZW50cnkvZW50cnlfNjQu UworKysgYi9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TCkBAIC00NjYsMTIgKzQ2NiwxMyBAQCBF TkQoaXJxX2VudHJpZXNfc3RhcnQpCiAKIC5tYWNybyBERUJVR19FTlRSWV9BU1NFUlRfSVJRU19P RkYKICNpZmRlZiBDT05GSUdfREVCVUdfRU5UUlkKLQlwdXNoZnEKLQl0ZXN0bCAkWDg2X0VGTEFH U19JRiwgKCVyc3ApCisJcHVzaHEgJXJheAorCVNBVkVfRkxBR1MoQ0xCUl9SQVgpCisJdGVzdGwg JFg4Nl9FRkxBR1NfSUYsICVlYXgKIAlqeiAuTG9rYXlfXEAKIAl1ZDIKIC5Mb2theV9cQDoKLQlh ZGRxICQ4LCAlcnNwCisJcG9wcSAlcmF4CiAjZW5kaWYKIC5lbmRtCiAKZGlmZiAtLWdpdCBhL2Fy Y2gveDg2L2luY2x1ZGUvYXNtL2lycWZsYWdzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFm bGFncy5oCmluZGV4IGM4ZWYyM2YuLjg5ZjA4OTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1 ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaApA QCAtMTQyLDYgKzE0Miw5IEBAIHN0YXRpYyBpbmxpbmUgbm90cmFjZSB1bnNpZ25lZCBsb25nIGFy Y2hfbG9jYWxfaXJxX3NhdmUodm9pZCkKIAlzd2FwZ3M7CQkJCQlcCiAJc3lzcmV0bAogCisjaWZk ZWYgQ09ORklHX0RFQlVHX0VOVFJZCisjZGVmaW5lIFNBVkVfRkxBR1MoeCkJCXB1c2hmcTsgcG9w cSAlcmF4CisjZW5kaWYKICNlbHNlCiAjZGVmaW5lIElOVEVSUlVQVF9SRVRVUk4JCWlyZXQKICNk ZWZpbmUgRU5BQkxFX0lOVEVSUlVQVFNfU1lTRVhJVAlzdGk7IHN5c2V4aXQKZGlmZiAtLWdpdCBh L2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9w YXJhdmlydC5oCmluZGV4IDI4M2VmY2EuLjg5MmRmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQu aApAQCAtOTI3LDYgKzkyNywxNSBAQCBzdGF0aWMgaW5saW5lIG5vdHJhY2UgdW5zaWduZWQgbG9u ZyBhcmNoX2xvY2FsX2lycV9zYXZlKHZvaWQpCiAJUEFSQV9TSVRFKFBBUkFfUEFUQ0gocHZfY3B1 X29wcywgUFZfQ1BVX3VzZXJnc19zeXNyZXQ2NCksCVwKIAkJICBDTEJSX05PTkUsCQkJCQkJXAog CQkgIGptcCBQQVJBX0lORElSRUNUKHB2X2NwdV9vcHMrUFZfQ1BVX3VzZXJnc19zeXNyZXQ2NCkp CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRU5UUlkKKyNkZWZpbmUgU0FWRV9GTEFHUyhjbG9iYmVy cykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVBBUkFfU0lURShQ QVJBX1BBVENIKHB2X2lycV9vcHMsIFBWX0lSUV9zYXZlX2ZsKSwgY2xvYmJlcnMsIFwKKwkJICBQ Vl9TQVZFX1JFR1MoY2xvYmJlcnMgfCBDTEJSX0NBTExFRV9TQVZFKTsgICAgICAgIFwKKwkJICBj YWxsIFBBUkFfSU5ESVJFQ1QocHZfaXJxX29wcytQVl9JUlFfc2F2ZV9mbCk7ICAgIFwKKwkJICBQ Vl9SRVNUT1JFX1JFR1MoY2xvYmJlcnMgfCBDTEJSX0NBTExFRV9TQVZFKTspCisjZW5kaWYKKwog I2VuZGlmCS8qIENPTkZJR19YODZfMzIgKi8KIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwpk aWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMgYi9hcmNoL3g4Ni9r ZXJuZWwvYXNtLW9mZnNldHNfNjQuYwppbmRleCA2MzAyMTJmLi5lM2E1MTc1IDEwMDY0NAotLS0g YS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwv YXNtLW9mZnNldHNfNjQuYwpAQCAtMjMsNiArMjMsOSBAQCBpbnQgbWFpbih2b2lkKQogI2lmZGVm IENPTkZJR19QQVJBVklSVAogCU9GRlNFVChQVl9DUFVfdXNlcmdzX3N5c3JldDY0LCBwdl9jcHVf b3BzLCB1c2VyZ3Nfc3lzcmV0NjQpOwogCU9GRlNFVChQVl9DUFVfc3dhcGdzLCBwdl9jcHVfb3Bz LCBzd2FwZ3MpOworI2lmZGVmIENPTkZJR19ERUJVR19FTlRSWQorCU9GRlNFVChQVl9JUlFfc2F2 ZV9mbCwgcHZfaXJxX29wcywgc2F2ZV9mbCk7CisjZW5kaWYKIAlCTEFOSygpOwogI2VuZGlmCiAK LS0gCjEuNy4xCgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZl bA==