From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg Kroah-Hartman Subject: [PATCH 4.14 074/159] x86/entry/64/paravirt: Use paravirt-safe macro to access eflags Date: Fri, 22 Dec 2017 09:45:59 +0100 Message-ID: <20171222084627.768946637@linuxfoundation.org> References: <20171222084623.668990192@linuxfoundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eSJD7-0001yt-Jy for xen-devel@lists.xenproject.org; Fri, 22 Dec 2017 09:01:45 +0000 In-Reply-To: <20171222084623.668990192@linuxfoundation.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org Cc: Peter Zijlstra , Dave Hansen , Will Deacon , Dave Hansen , "H. Peter Anvin" , Thomas Gleixner , Eduardo Valentin , hughd@google.com, Ingo Molnar , aliguori@amazon.com, xen-devel@lists.xenproject.org, Rik van Riel , Denys Vlasenko , daniel.gruss@iaik.tugraz.at, Brian Gerst , Borislav Petkov , Andy Lutomirski , Josh Poimboeuf , Boris Ostrovsky , Borislav Petkov , Juergen Gross , Greg Kroah-Hartman , stable@vger.kernel.org, David Laight , keescook@google.com, Linus Torvalds List-Id: xen-devel@lists.xenproject.org NC4xNC1zdGFibGUgcmV2aWV3IHBhdGNoLiAgSWYgYW55b25lIGhhcyBhbnkgb2JqZWN0aW9ucywg cGxlYXNlIGxldCBtZSBrbm93LgoKLS0tLS0tLS0tLS0tLS0tLS0tCgpGcm9tOiBCb3JpcyBPc3Ry b3Zza3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tPgoKY29tbWl0IGUxN2Y4MjM0NTM4ZDFm ZjcwODY3M2YyODdhNDI0NTdjNGRlZTcyMGQgdXBzdHJlYW0uCgpDb21taXQgMWQzZTUzZTg2MjRh ICgieDg2L2VudHJ5LzY0OiBSZWZhY3RvciBJUlEgc3RhY2tzIGFuZCBtYWtlIHRoZW0KTk1JLXNh ZmUiKSBhZGRlZCBERUJVR19FTlRSWV9BU1NFUlRfSVJRU19PRkYgbWFjcm8gdGhhdCBhY2Nlc2Vz IGVmbGFncwp1c2luZyAncHVzaGZxJyBpbnN0cnVjdGlvbiB3aGVuIHRlc3RpbmcgZm9yIElGIGJp dC4gT24gUFYgWGVuIGd1ZXN0cwpsb29raW5nIGF0IElGIGZsYWcgZGlyZWN0bHkgd2lsbCBhbHdh eXMgc2VlIGl0IHNldCwgcmVzdWx0aW5nIGluICd1ZDInLgoKSW50cm9kdWNlIFNBVkVfRkxBR1Mo KSBtYWNybyB0aGF0IHdpbGwgdXNlIGFwcHJvcHJpYXRlIHNhdmVfZmwgcHYgb3Agd2hlbgpydW5u aW5nIHBhcmF2aXJ0LgoKU2lnbmVkLW9mZi1ieTogQm9yaXMgT3N0cm92c2t5IDxib3Jpcy5vc3Ry b3Zza3lAb3JhY2xlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxp bnV0cm9uaXguZGU+ClJldmlld2VkLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+ CkNjOiBBbmR5IEx1dG9taXJza2kgPGx1dG9Aa2VybmVsLm9yZz4KQ2M6IEJvcmlzbGF2IFBldGtv diA8YnBAYWxpZW44LmRlPgpDYzogQm9yaXNsYXYgUGV0a292IDxicGV0a292QHN1c2UuZGU+CkNj OiBCcmlhbiBHZXJzdCA8YnJnZXJzdEBnbWFpbC5jb20+CkNjOiBEYXZlIEhhbnNlbiA8ZGF2ZS5o YW5zZW5AaW50ZWwuY29tPgpDYzogRGF2ZSBIYW5zZW4gPGRhdmUuaGFuc2VuQGxpbnV4LmludGVs LmNvbT4KQ2M6IERhdmlkIExhaWdodCA8RGF2aWQuTGFpZ2h0QGFjdWxhYi5jb20+CkNjOiBEZW55 cyBWbGFzZW5rbyA8ZHZsYXNlbmtAcmVkaGF0LmNvbT4KQ2M6IEVkdWFyZG8gVmFsZW50aW4gPGVk dXZhbEBhbWF6b24uY29tPgpDYzogR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+ CkNjOiBILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4KQ2M6IEpvc2ggUG9pbWJvZXVmIDxq cG9pbWJvZUByZWRoYXQuY29tPgpDYzogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZv dW5kYXRpb24ub3JnPgpDYzogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3JnPgpD YzogUmlrIHZhbiBSaWVsIDxyaWVsQHJlZGhhdC5jb20+CkNjOiBXaWxsIERlYWNvbiA8d2lsbC5k ZWFjb25AYXJtLmNvbT4KQ2M6IGFsaWd1b3JpQGFtYXpvbi5jb20KQ2M6IGRhbmllbC5ncnVzc0Bp YWlrLnR1Z3Jhei5hdApDYzogaHVnaGRAZ29vZ2xlLmNvbQpDYzoga2Vlc2Nvb2tAZ29vZ2xlLmNv bQpDYzogeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkxpbms6IGh0dHBzOi8vbGttbC5r ZXJuZWwub3JnL3IvMjAxNzEyMDQxNTA2MDQuODk5NDU3MjQyQGxpbnV0cm9uaXguZGUKU2lnbmVk LW9mZi1ieTogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IEdy ZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CgotLS0KIGFyY2gv eDg2L2VudHJ5L2VudHJ5XzY0LlMgICAgICAgIHwgICAgNyArKysrLS0tCiBhcmNoL3g4Ni9pbmNs dWRlL2FzbS9pcnFmbGFncy5oICB8ICAgIDMgKysrCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJh dmlydC5oICB8ICAgIDkgKysrKysrKysrCiBhcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQu YyB8ICAgIDMgKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDMgZGVsZXRp b25zKC0pCgotLS0gYS9hcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2Vu dHJ5L2VudHJ5XzY0LlMKQEAgLTQ2MiwxMiArNDYyLDEzIEBAIEVORChpcnFfZW50cmllc19zdGFy dCkKIAogLm1hY3JvIERFQlVHX0VOVFJZX0FTU0VSVF9JUlFTX09GRgogI2lmZGVmIENPTkZJR19E RUJVR19FTlRSWQotCXB1c2hmcQotCXRlc3RsICRYODZfRUZMQUdTX0lGLCAoJXJzcCkKKwlwdXNo cSAlcmF4CisJU0FWRV9GTEFHUyhDTEJSX1JBWCkKKwl0ZXN0bCAkWDg2X0VGTEFHU19JRiwgJWVh eAogCWp6IC5Mb2theV9cQAogCXVkMgogLkxva2F5X1xAOgotCWFkZHEgJDgsICVyc3AKKwlwb3Bx ICVyYXgKICNlbmRpZgogLmVuZG0KIAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFmbGFn cy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTE0Miw2ICsxNDIs OSBAQCBzdGF0aWMgaW5saW5lIG5vdHJhY2UgdW5zaWduZWQgbG9uZyBhcmNoCiAJc3dhcGdzOwkJ CQkJXAogCXN5c3JldGwKIAorI2lmZGVmIENPTkZJR19ERUJVR19FTlRSWQorI2RlZmluZSBTQVZF X0ZMQUdTKHgpCQlwdXNoZnE7IHBvcHEgJXJheAorI2VuZGlmCiAjZWxzZQogI2RlZmluZSBJTlRF UlJVUFRfUkVUVVJOCQlpcmV0CiAjZGVmaW5lIEVOQUJMRV9JTlRFUlJVUFRTX1NZU0VYSVQJc3Rp OyBzeXNleGl0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJj aC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtOTI3LDYgKzkyNywxNSBAQCBleHRlcm4g dm9pZCBkZWZhdWx0X2Jhbm5lcih2b2lkKTsKIAlQQVJBX1NJVEUoUEFSQV9QQVRDSChwdl9jcHVf b3BzLCBQVl9DUFVfdXNlcmdzX3N5c3JldDY0KSwJXAogCQkgIENMQlJfTk9ORSwJCQkJCQlcCiAJ CSAgam1wIFBBUkFfSU5ESVJFQ1QocHZfY3B1X29wcytQVl9DUFVfdXNlcmdzX3N5c3JldDY0KSkK KworI2lmZGVmIENPTkZJR19ERUJVR19FTlRSWQorI2RlZmluZSBTQVZFX0ZMQUdTKGNsb2JiZXJz KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJUEFSQV9TSVRFKFBB UkFfUEFUQ0gocHZfaXJxX29wcywgUFZfSVJRX3NhdmVfZmwpLCBjbG9iYmVycywgXAorCQkgIFBW X1NBVkVfUkVHUyhjbG9iYmVycyB8IENMQlJfQ0FMTEVFX1NBVkUpOyAgICAgICAgXAorCQkgIGNh bGwgUEFSQV9JTkRJUkVDVChwdl9pcnFfb3BzK1BWX0lSUV9zYXZlX2ZsKTsgICAgXAorCQkgIFBW X1JFU1RPUkVfUkVHUyhjbG9iYmVycyB8IENMQlJfQ0FMTEVFX1NBVkUpOykKKyNlbmRpZgorCiAj ZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0t LSBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5l bC9hc20tb2Zmc2V0c182NC5jCkBAIC0yMyw2ICsyMyw5IEBAIGludCBtYWluKHZvaWQpCiAjaWZk ZWYgQ09ORklHX1BBUkFWSVJUCiAJT0ZGU0VUKFBWX0NQVV91c2VyZ3Nfc3lzcmV0NjQsIHB2X2Nw dV9vcHMsIHVzZXJnc19zeXNyZXQ2NCk7CiAJT0ZGU0VUKFBWX0NQVV9zd2FwZ3MsIHB2X2NwdV9v cHMsIHN3YXBncyk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0VOVFJZCisJT0ZGU0VUKFBWX0lSUV9z YXZlX2ZsLCBwdl9pcnFfb3BzLCBzYXZlX2ZsKTsKKyNlbmRpZgogCUJMQU5LKCk7CiAjZW5kaWYK IAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4t ZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932751AbdLVJoB (ORCPT ); Fri, 22 Dec 2017 04:44:01 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:38344 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965223AbdLVJBk (ORCPT ); Fri, 22 Dec 2017 04:01:40 -0500 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Boris Ostrovsky , Thomas Gleixner , Juergen Gross , Andy Lutomirski , Borislav Petkov , Borislav Petkov , Brian Gerst , Dave Hansen , Dave Hansen , David Laight , Denys Vlasenko , Eduardo Valentin , "H. Peter Anvin" , Josh Poimboeuf , Linus Torvalds , Peter Zijlstra , Rik van Riel , Will Deacon , aliguori@amazon.com, daniel.gruss@iaik.tugraz.at, hughd@google.com, keescook@google.com, xen-devel@lists.xenproject.org, Ingo Molnar Subject: [PATCH 4.14 074/159] x86/entry/64/paravirt: Use paravirt-safe macro to access eflags Date: Fri, 22 Dec 2017 09:45:59 +0100 Message-Id: <20171222084627.768946637@linuxfoundation.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171222084623.668990192@linuxfoundation.org> References: <20171222084623.668990192@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Boris Ostrovsky commit e17f8234538d1ff708673f287a42457c4dee720d upstream. 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 Reviewed-by: Juergen Gross Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Borislav Petkov Cc: Brian Gerst Cc: Dave Hansen Cc: Dave Hansen Cc: David Laight Cc: Denys Vlasenko Cc: Eduardo Valentin Cc: Greg KH Cc: H. Peter Anvin Cc: Josh Poimboeuf Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Rik van Riel Cc: Will Deacon Cc: aliguori@amazon.com Cc: daniel.gruss@iaik.tugraz.at Cc: hughd@google.com Cc: keescook@google.com Cc: xen-devel@lists.xenproject.org Link: https://lkml.kernel.org/r/20171204150604.899457242@linutronix.de Signed-off-by: Ingo Molnar Signed-off-by: Greg Kroah-Hartman --- 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(-) --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -462,12 +462,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 --- a/arch/x86/include/asm/irqflags.h +++ b/arch/x86/include/asm/irqflags.h @@ -142,6 +142,9 @@ static inline notrace unsigned long arch 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 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h @@ -927,6 +927,15 @@ extern void default_banner(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__ */ --- 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