From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
x86@kernel.org, linux-sgx@vger.kernel.org,
linux-kernel@vger.kernel.org,
Andy Lutomirski <luto@amacapital.net>,
Jethro Beekman <jethro@fortanix.com>,
akpm@linux-foundation.org, andriy.shevchenko@linux.intel.com,
asapek@google.com, cedric.xing@intel.com,
chenalexchen@google.com, conradparker@google.com,
cyhanish@google.com, dave.hansen@intel.com,
haitao.huang@intel.com, josh@joshtriplett.org,
kai.huang@intel.com, kai.svahn@intel.com, kmoy@google.com,
ludloff@google.com, luto@kernel.org, nhorman@redhat.com,
npmccallum@redhat.com, puiterwijk@redhat.com,
rientjes@google.com, tglx@linutronix.de, yaozhangx@google.com
Subject: Re: [PATCH v33 15/21] x86/vdso: Add support for exception fixup in vDSO functions
Date: Mon, 29 Jun 2020 23:00:55 -0700 [thread overview]
Message-ID: <20200630060055.GS12312@linux.intel.com> (raw)
In-Reply-To: <20200629171022.GC32176@zn.tnic>
On Mon, Jun 29, 2020 at 07:10:22PM +0200, Borislav Petkov wrote:
> On Thu, Jun 18, 2020 at 01:08:37AM +0300, Jarkko Sakkinen wrote:
> ...
> > intended benefit of massaging GCC's inlining algorithm is unlikely to
> > realized in the vDSO any time soon, if ever.
>
> That is a very good explanation and I would prefer if it would be in a
> sgx-specific README or so instead of it getting lost in git...
>
> > +bool fixup_vdso_exception(struct pt_regs *regs, int trapnr,
> > + unsigned long error_code, unsigned long fault_addr)
> > +{
> > + const struct vdso_image *image = current->mm->context.vdso_image;
> > + const struct vdso_exception_table_entry *extable;
> > + unsigned int nr_entries, i;
> > + unsigned long base;
> > +
> > + /*
> > + * Do not attempt to fixup #DB or #BP. It's impossible to identify
> > + * whether or not a #DB/#BP originated from within an SGX enclave and
> > + * SGX enclaves are currently the only use case for vDSO fixup.
> > + */
>
> So this is all fine and dandy but nowhere do I see the code doing:
>
> if (am_I_an_sgx_enclave(tsk))
> fixup_vdso_exception()
>
> because that vDSO exception fixup, albeit it looking kinda generic, is
> SGX-only for now. So it should be designed to run only for SGX enclaves
> for now.
That's not really feasible as there is no readily available identifier for
an SGX task. The only indication that a relevant task is an SGX task is if
it has mmap()'d /dev/sgx/enclave, and hooking that would be heinous. And
adding flag just to tag the task as SGX seems wasteful.
Even if we could easily condition the vDSO fixup on SGX tasks, I don't think
that'd be a good ABI for the SGX vDSO code. The intended contract is that
fixup will happen simply by virtue of the code at the related IP taking a
fault (in userspace). E.g. the vDSO function should get the fixup even if
userspace screws up mmap() and invokes __vdso_sgx_enter_enclave() without
being tagged an SGX task.
> Also, is there any particular reason for fixup_vdso_exception() to be in
> arch/x86/entry/vdso/extable.c instead of in arch/x86/mm/extable.c?
>
> I mean, it gets called by traps.c so it looks like normal kernel code to
> me or am I missing some vdso magic?
No hard dependency, it's normal kernel code. My reasoning for dropping it
in .../vdso was largely to co-locate it with vdso/extable.h due to the
dependency on the format of 'struct vdso_exception_table_entry'. And I
put extable.h in .../vdso because it contains macros that are only for use
in actual vDSO code.
> And built only when CONFIG_INTEL_SGX is enabled.
Ya, shouldn't be a problem to stub it out for SGX=n.
next prev parent reply other threads:[~2020-06-30 6:00 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-17 22:08 [PATCH v33 00/21] Intel SGX foundations Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 01/21] x86/cpufeatures: x86/msr: Add Intel SGX hardware bits Jarkko Sakkinen
2020-06-22 17:37 ` Borislav Petkov
2020-06-25 1:25 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 02/21] x86/cpufeatures: x86/msr: Add Intel SGX Launch Control " Jarkko Sakkinen
2020-06-24 13:04 ` Borislav Petkov
2020-06-24 14:34 ` Sean Christopherson
2020-06-25 1:28 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 03/21] x86/mm: x86/sgx: Signal SIGSEGV with PF_SGX Jarkko Sakkinen
2020-06-25 8:59 ` Borislav Petkov
2020-06-25 15:34 ` Sean Christopherson
2020-06-25 16:49 ` Borislav Petkov
2020-06-25 20:52 ` Jarkko Sakkinen
2020-06-25 21:11 ` Borislav Petkov
2020-06-26 13:34 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 04/21] x86/sgx: Add SGX microarchitectural data structures Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 05/21] x86/sgx: Add wrappers for ENCLS leaf functions Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 06/21] x86/cpu/intel: Detect SGX support Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 07/21] x86/cpu/intel: Add nosgx kernel parameter Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 08/21] x86/sgx: Initialize metadata for Enclave Page Cache (EPC) sections Jarkko Sakkinen
2020-06-25 10:14 ` Borislav Petkov
2020-06-25 20:11 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 09/21] x86/sgx: Add __sgx_alloc_epc_page() and sgx_free_epc_page() Jarkko Sakkinen
2020-06-25 17:06 ` Borislav Petkov
2020-06-25 20:55 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 10/21] mm: Introduce vm_ops->may_mprotect() Jarkko Sakkinen
2020-06-25 17:14 ` Borislav Petkov
2020-06-25 17:30 ` Matthew Wilcox
2020-06-25 18:06 ` Sean Christopherson
2020-06-25 22:40 ` Jarkko Sakkinen
2020-06-25 22:26 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 11/21] x86/sgx: Linux Enclave Driver Jarkko Sakkinen
2020-06-25 17:23 ` Borislav Petkov
2020-06-25 18:34 ` Sean Christopherson
2020-06-25 18:45 ` Borislav Petkov
2020-06-26 14:19 ` Jarkko Sakkinen
2020-06-25 20:21 ` Jarkko Sakkinen
2020-06-25 20:25 ` Borislav Petkov
2020-06-26 13:40 ` Jarkko Sakkinen
2020-06-25 18:53 ` Borislav Petkov
2020-06-26 14:17 ` Jarkko Sakkinen
2020-06-26 9:14 ` Borislav Petkov
2020-06-26 14:16 ` Sean Christopherson
2020-06-26 14:20 ` Borislav Petkov
2020-07-03 23:04 ` Jarkko Sakkinen
2020-07-03 3:09 ` Jarkko Sakkinen
2020-06-26 15:34 ` Borislav Petkov
2020-07-04 0:13 ` Jarkko Sakkinen
2020-10-26 21:26 ` Dave Hansen
2020-10-27 1:52 ` Jarkko Sakkinen
2020-10-27 10:05 ` Borislav Petkov
2020-10-27 15:20 ` Dave Hansen
2020-10-27 15:37 ` Borislav Petkov
2020-06-27 17:43 ` Borislav Petkov
2020-06-29 15:27 ` Sean Christopherson
2020-06-29 15:37 ` Borislav Petkov
2020-07-04 1:43 ` Jarkko Sakkinen
2020-07-07 1:38 ` Sean Christopherson
2020-07-07 3:29 ` Jarkko Sakkinen
2020-07-04 1:42 ` Jarkko Sakkinen
2020-07-02 3:59 ` Sean Christopherson
2020-07-04 3:31 ` Jarkko Sakkinen
2020-09-02 3:06 ` Haitao Huang
2020-09-02 16:10 ` Sean Christopherson
2020-09-02 18:40 ` Haitao Huang
2020-09-04 12:01 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 12/21] x86/sgx: Allow a limited use of ATTRIBUTE.PROVISIONKEY for attestation Jarkko Sakkinen
2020-06-29 16:02 ` Borislav Petkov
2020-06-29 22:04 ` Sean Christopherson
2020-06-30 8:49 ` Borislav Petkov
2020-06-30 14:20 ` Sean Christopherson
2020-06-30 17:13 ` Andy Lutomirski
2020-07-02 20:47 ` Dr. Greg
2020-07-03 2:43 ` Jarkko Sakkinen
2020-07-03 2:38 ` Jarkko Sakkinen
2020-07-03 2:32 ` Jarkko Sakkinen
2020-07-03 2:55 ` Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 13/21] x86/sgx: Add a page reclaimer Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 14/21] x86/sgx: ptrace() support for the SGX driver Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 15/21] x86/vdso: Add support for exception fixup in vDSO functions Jarkko Sakkinen
2020-06-29 17:10 ` Borislav Petkov
2020-06-30 6:00 ` Sean Christopherson [this message]
2020-06-30 8:41 ` Borislav Petkov
2020-06-30 14:55 ` Sean Christopherson
2020-06-30 16:48 ` Andy Lutomirski
2020-06-30 17:23 ` Sean Christopherson
2020-07-02 12:52 ` Thomas Gleixner
2020-06-17 22:08 ` [PATCH v33 16/21] x86/fault: Add helper function to sanitize error code Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 17/21] x86/traps: Attempt to fixup exceptions in vDSO before signaling Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 18/21] x86/vdso: Implement a vDSO for Intel SGX enclave call Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 19/21] selftests/x86: Add a selftest for SGX Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 20/21] docs: x86/sgx: Document SGX micro architecture and kernel internals Jarkko Sakkinen
2020-06-17 22:08 ` [PATCH v33 21/21] x86/sgx: Update MAINTAINERS Jarkko Sakkinen
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=20200630060055.GS12312@linux.intel.com \
--to=sean.j.christopherson@intel.com \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=asapek@google.com \
--cc=bp@alien8.de \
--cc=cedric.xing@intel.com \
--cc=chenalexchen@google.com \
--cc=conradparker@google.com \
--cc=cyhanish@google.com \
--cc=dave.hansen@intel.com \
--cc=haitao.huang@intel.com \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=jethro@fortanix.com \
--cc=josh@joshtriplett.org \
--cc=kai.huang@intel.com \
--cc=kai.svahn@intel.com \
--cc=kmoy@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sgx@vger.kernel.org \
--cc=ludloff@google.com \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=nhorman@redhat.com \
--cc=npmccallum@redhat.com \
--cc=puiterwijk@redhat.com \
--cc=rientjes@google.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=yaozhangx@google.com \
/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: link
Be 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.