From: Joerg Roedel <joro@8bytes.org> To: Borislav Petkov <bp@alien8.de> Cc: x86@kernel.org, Joerg Roedel <jroedel@suse.de>, hpa@zytor.com, Andy Lutomirski <luto@kernel.org>, Dave Hansen <dave.hansen@linux.intel.com>, Peter Zijlstra <peterz@infradead.org>, Jiri Slaby <jslaby@suse.cz>, Dan Williams <dan.j.williams@intel.com>, Tom Lendacky <thomas.lendacky@amd.com>, Juergen Gross <jgross@suse.com>, Kees Cook <keescook@chromium.org>, David Rientjes <rientjes@google.com>, Cfir Cohen <cfir@google.com>, Erdem Aktas <erdemaktas@google.com>, Masami Hiramatsu <mhiramat@kernel.org>, Mike Stunes <mstunes@vmware.com>, Sean Christopherson <seanjc@google.com>, Martin Radev <martin.b.radev@gmail.com>, Arvind Sankar <nivedita@alum.mit.edu>, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org Subject: Re: [PATCH v4 2/6] x86/sev-es: Disable IRQs while GHCB is active Date: Fri, 11 Jun 2021 16:20:36 +0200 [thread overview] Message-ID: <YMNxNEb/T3iF4TG8@8bytes.org> (raw) In-Reply-To: <YMNtmz6W1apXL5q+@zn.tnic> On Fri, Jun 11, 2021 at 04:05:15PM +0200, Borislav Petkov wrote: > On Thu, Jun 10, 2021 at 11:11:37AM +0200, Joerg Roedel wrote: > Why not simply "sandwich" them: > > local_irq_save() > sev_es_get_ghcb() > > ...blablabla > > sev_es_put_ghcb() > local_irq_restore(); > > in every call site? I am not a fan of this, because its easily forgotten to add local_irq_save()/local_irq_restore() calls around those. Yes, we can add irqs_disabled() assertions to the functions, but we can as well just disable/enable IRQs in them. Only the previous value of EFLAGS.IF needs to be carried from one function to the other. > Hmm, so why aren't you accessing/setting data->ghcb_active and > data->backup_ghcb_active safely using cmpxchg() if this path can be > interrupted by an NMI? Using cmpxchg is not necessary here. It is all per-cpu data, so local to the current cpu. If an NMI happens anywhere in sev_es_get_ghcb() it can still use the GHCB, because the interrupted #VC handler will not start writing to it before sev_es_get_ghcb() returned. Problems only come up when one path starts writing to the GHCB, but that happens long after it is marked active. Regards, Joerg
WARNING: multiple messages have this Message-ID (diff)
From: Joerg Roedel <joro@8bytes.org> To: Borislav Petkov <bp@alien8.de> Cc: kvm@vger.kernel.org, Peter Zijlstra <peterz@infradead.org>, Dave Hansen <dave.hansen@linux.intel.com>, virtualization@lists.linux-foundation.org, Arvind Sankar <nivedita@alum.mit.edu>, hpa@zytor.com, Jiri Slaby <jslaby@suse.cz>, x86@kernel.org, David Rientjes <rientjes@google.com>, Martin Radev <martin.b.radev@gmail.com>, Tom Lendacky <thomas.lendacky@amd.com>, Joerg Roedel <jroedel@suse.de>, Kees Cook <keescook@chromium.org>, Cfir Cohen <cfir@google.com>, linux-coco@lists.linux.dev, Andy Lutomirski <luto@kernel.org>, Dan Williams <dan.j.williams@intel.com>, Juergen Gross <jgross@suse.com>, Mike Stunes <mstunes@vmware.com>, Sean Christopherson <seanjc@google.com>, linux-kernel@vger.kernel.org, Masami Hiramatsu <mhiramat@kernel.org>, Erdem Aktas <erdemaktas@google.com> Subject: Re: [PATCH v4 2/6] x86/sev-es: Disable IRQs while GHCB is active Date: Fri, 11 Jun 2021 16:20:36 +0200 [thread overview] Message-ID: <YMNxNEb/T3iF4TG8@8bytes.org> (raw) In-Reply-To: <YMNtmz6W1apXL5q+@zn.tnic> On Fri, Jun 11, 2021 at 04:05:15PM +0200, Borislav Petkov wrote: > On Thu, Jun 10, 2021 at 11:11:37AM +0200, Joerg Roedel wrote: > Why not simply "sandwich" them: > > local_irq_save() > sev_es_get_ghcb() > > ...blablabla > > sev_es_put_ghcb() > local_irq_restore(); > > in every call site? I am not a fan of this, because its easily forgotten to add local_irq_save()/local_irq_restore() calls around those. Yes, we can add irqs_disabled() assertions to the functions, but we can as well just disable/enable IRQs in them. Only the previous value of EFLAGS.IF needs to be carried from one function to the other. > Hmm, so why aren't you accessing/setting data->ghcb_active and > data->backup_ghcb_active safely using cmpxchg() if this path can be > interrupted by an NMI? Using cmpxchg is not necessary here. It is all per-cpu data, so local to the current cpu. If an NMI happens anywhere in sev_es_get_ghcb() it can still use the GHCB, because the interrupted #VC handler will not start writing to it before sev_es_get_ghcb() returned. Problems only come up when one path starts writing to the GHCB, but that happens long after it is marked active. Regards, Joerg _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization
next prev parent reply other threads:[~2021-06-11 14:20 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-06-10 9:11 [PATCH v4 0/6] x86/sev-es: Fixes for SEV-ES Guest Support Joerg Roedel 2021-06-10 9:11 ` Joerg Roedel 2021-06-10 9:11 ` [PATCH v4 1/6] x86/sev-es: Fix error message in runtime #VC handler Joerg Roedel 2021-06-10 9:11 ` Joerg Roedel 2021-06-10 9:11 ` [PATCH v4 2/6] x86/sev-es: Disable IRQs while GHCB is active Joerg Roedel 2021-06-10 9:11 ` Joerg Roedel 2021-06-11 14:05 ` Borislav Petkov 2021-06-11 14:05 ` Borislav Petkov 2021-06-11 14:20 ` Joerg Roedel [this message] 2021-06-11 14:20 ` Joerg Roedel 2021-06-11 14:34 ` Borislav Petkov 2021-06-11 14:34 ` Borislav Petkov 2021-06-10 9:11 ` [PATCH v4 3/6] x86/sev-es: Split up runtime #VC handler for correct state tracking Joerg Roedel 2021-06-10 9:11 ` Joerg Roedel 2021-06-10 10:19 ` Peter Zijlstra 2021-06-10 10:19 ` Peter Zijlstra 2021-06-10 11:30 ` Joerg Roedel 2021-06-10 11:30 ` Joerg Roedel 2021-06-10 9:11 ` [PATCH v4 4/6] x86/insn-eval: Make 0 a valid RIP for insn_get_effective_ip() Joerg Roedel 2021-06-10 9:11 ` Joerg Roedel 2021-06-10 9:11 ` [PATCH v4 5/6] x86/insn: Extend error reporting from insn_fetch_from_user[_inatomic]() Joerg Roedel 2021-06-10 9:11 ` Joerg Roedel 2021-06-10 9:11 ` [PATCH v4 6/6] x86/sev-es: Propagate #GP if getting linear instruction address failed Joerg Roedel 2021-06-10 9:11 ` Joerg Roedel
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=YMNxNEb/T3iF4TG8@8bytes.org \ --to=joro@8bytes.org \ --cc=bp@alien8.de \ --cc=cfir@google.com \ --cc=dan.j.williams@intel.com \ --cc=dave.hansen@linux.intel.com \ --cc=erdemaktas@google.com \ --cc=hpa@zytor.com \ --cc=jgross@suse.com \ --cc=jroedel@suse.de \ --cc=jslaby@suse.cz \ --cc=keescook@chromium.org \ --cc=kvm@vger.kernel.org \ --cc=linux-coco@lists.linux.dev \ --cc=linux-kernel@vger.kernel.org \ --cc=luto@kernel.org \ --cc=martin.b.radev@gmail.com \ --cc=mhiramat@kernel.org \ --cc=mstunes@vmware.com \ --cc=nivedita@alum.mit.edu \ --cc=peterz@infradead.org \ --cc=rientjes@google.com \ --cc=seanjc@google.com \ --cc=thomas.lendacky@amd.com \ --cc=virtualization@lists.linux-foundation.org \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.