From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Dave Hansen <dave.hansen@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Rich Felker <dalias@libc.org>, Jann Horn <jannh@google.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Jethro Beekman <jethro@fortanix.com>,
Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
Florian Weimer <fweimer@redhat.com>,
Linux API <linux-api@vger.kernel.org>, X86 ML <x86@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
nhorman@redhat.com, npmccallum@redhat.com, "Ayoun,
Serge" <serge.ayoun@intel.com>,
shay.katz-zamir@intel.com, linux-sgx@vger.kernel.org,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@al>
Subject: Re: RFC: userspace exception fixups
Date: Fri, 2 Nov 2018 10:33:50 -0700 [thread overview]
Message-ID: <20181102173350.GF7393@linux.intel.com> (raw)
In-Reply-To: <a4d2b3ec-43ec-f062-e180-c6e5a0d9fab8@intel.com>
On Fri, Nov 02, 2018 at 10:13:23AM -0700, Dave Hansen wrote:
> On 11/2/18 10:06 AM, Sean Christopherson wrote:
> > On Fri, Nov 02, 2018 at 09:56:44AM -0700, Dave Hansen wrote:
> >> On 11/2/18 9:30 AM, Sean Christopherson wrote:
> >>> What if rather than having userspace register an address for fixup, the
> >>> kernel instead unconditionally does fixup on the ENCLU opcode?
> >>
> >> The problem is knowing what to do for the fixup. If we have a simple
> >> action to take that's universal, like backing up %RIP, or setting some
> >> other register state, it's not bad.
> >
> > Isn't the EENTER/RESUME behavior universal? Or am I missing something?
>
> Could someone write down all the ways we get in and out of the enclave?
>
> I think we always get in from userspace calling EENTER or ERESUME. We
> can't ever enter directly from the kernel, like via an IRET from what I
> understand.
Correct, the only way to get into the enclave is EENTER or ERESUME.
My understanding is that even SMIs bounce through the AEX target
before transitioning to SMM.
> We get *out* from exceptions, hardware interrupts, or enclave-explicit
> EEXITs. Did I miss any? Remind me where the hardware lands the control
> flow in each of those exit cases.
And VMExits. There are basically two cases: EEXIT and everything else.
EEXIT is a glorified indirect jump, e.g. %RBX holds the target %RIP.
Everything else is an Asynchronous Enclave Exit (AEX). On an AEX, %RIP
is set to a value specified by EENTER/ERESUME, %RBP and %RSP are
restored to pre-enclave values and all other registers are loaded with
synthetic state. The actual interrupt/exception/VMExit then triggers,
e.g. the %RIP on the stack for an exception is always the AEX target,
not the %RIP inside the enclave that actually faulted.
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Dave Hansen <dave.hansen@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Rich Felker <dalias@libc.org>, Jann Horn <jannh@google.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Jethro Beekman <jethro@fortanix.com>,
Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
Florian Weimer <fweimer@redhat.com>,
Linux API <linux-api@vger.kernel.org>, X86 ML <x86@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
nhorman@redhat.com, npmccallum@redhat.com, "Ayoun,
Serge" <serge.ayoun@intel.com>,
shay.katz-zamir@intel.com, linux-sgx@vger.kernel.org,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Carlos O'Donell <carlos@redhat.com>,
adhemerval.zanella@linaro.org
Subject: Re: RFC: userspace exception fixups
Date: Fri, 2 Nov 2018 10:33:50 -0700 [thread overview]
Message-ID: <20181102173350.GF7393@linux.intel.com> (raw)
Message-ID: <20181102173350.ZMsKV_dFpN9Mp5nL3IXswXeyBgzX4lKe05SfvYj46q0@z> (raw)
In-Reply-To: <a4d2b3ec-43ec-f062-e180-c6e5a0d9fab8@intel.com>
On Fri, Nov 02, 2018 at 10:13:23AM -0700, Dave Hansen wrote:
> On 11/2/18 10:06 AM, Sean Christopherson wrote:
> > On Fri, Nov 02, 2018 at 09:56:44AM -0700, Dave Hansen wrote:
> >> On 11/2/18 9:30 AM, Sean Christopherson wrote:
> >>> What if rather than having userspace register an address for fixup, the
> >>> kernel instead unconditionally does fixup on the ENCLU opcode?
> >>
> >> The problem is knowing what to do for the fixup. If we have a simple
> >> action to take that's universal, like backing up %RIP, or setting some
> >> other register state, it's not bad.
> >
> > Isn't the EENTER/RESUME behavior universal? Or am I missing something?
>
> Could someone write down all the ways we get in and out of the enclave?
>
> I think we always get in from userspace calling EENTER or ERESUME. We
> can't ever enter directly from the kernel, like via an IRET from what I
> understand.
Correct, the only way to get into the enclave is EENTER or ERESUME.
My understanding is that even SMIs bounce through the AEX target
before transitioning to SMM.
> We get *out* from exceptions, hardware interrupts, or enclave-explicit
> EEXITs. Did I miss any? Remind me where the hardware lands the control
> flow in each of those exit cases.
And VMExits. There are basically two cases: EEXIT and everything else.
EEXIT is a glorified indirect jump, e.g. %RBX holds the target %RIP.
Everything else is an Asynchronous Enclave Exit (AEX). On an AEX, %RIP
is set to a value specified by EENTER/ERESUME, %RBP and %RSP are
restored to pre-enclave values and all other registers are loaded with
synthetic state. The actual interrupt/exception/VMExit then triggers,
e.g. the %RIP on the stack for an exception is always the AEX target,
not the %RIP inside the enclave that actually faulted.
WARNING: multiple messages have this Message-ID (diff)
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Dave Hansen <dave.hansen@intel.com>
Cc: Andy Lutomirski <luto@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Rich Felker <dalias@libc.org>, Jann Horn <jannh@google.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Jethro Beekman <jethro@fortanix.com>,
Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>,
Florian Weimer <fweimer@redhat.com>,
Linux API <linux-api@vger.kernel.org>, X86 ML <x86@kernel.org>,
linux-arch <linux-arch@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>, <nhorman@redhat.com>,
<npmccallum@redhat.com>, "Ayoun, Serge" <serge.ayoun@intel.com>,
<shay.katz-zamir@intel.com>, <linux-sgx@vger.kernel.org>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
"Carlos O'Donell" <carlos@redhat.com>,
<adhemerval.zanella@linaro.org>
Subject: Re: RFC: userspace exception fixups
Date: Fri, 2 Nov 2018 10:33:50 -0700 [thread overview]
Message-ID: <20181102173350.GF7393@linux.intel.com> (raw)
In-Reply-To: <a4d2b3ec-43ec-f062-e180-c6e5a0d9fab8@intel.com>
On Fri, Nov 02, 2018 at 10:13:23AM -0700, Dave Hansen wrote:
> On 11/2/18 10:06 AM, Sean Christopherson wrote:
> > On Fri, Nov 02, 2018 at 09:56:44AM -0700, Dave Hansen wrote:
> >> On 11/2/18 9:30 AM, Sean Christopherson wrote:
> >>> What if rather than having userspace register an address for fixup, the
> >>> kernel instead unconditionally does fixup on the ENCLU opcode?
> >>
> >> The problem is knowing what to do for the fixup. If we have a simple
> >> action to take that's universal, like backing up %RIP, or setting some
> >> other register state, it's not bad.
> >
> > Isn't the EENTER/RESUME behavior universal? Or am I missing something?
>
> Could someone write down all the ways we get in and out of the enclave?
>
> I think we always get in from userspace calling EENTER or ERESUME. We
> can't ever enter directly from the kernel, like via an IRET from what I
> understand.
Correct, the only way to get into the enclave is EENTER or ERESUME.
My understanding is that even SMIs bounce through the AEX target
before transitioning to SMM.
> We get *out* from exceptions, hardware interrupts, or enclave-explicit
> EEXITs. Did I miss any? Remind me where the hardware lands the control
> flow in each of those exit cases.
And VMExits. There are basically two cases: EEXIT and everything else.
EEXIT is a glorified indirect jump, e.g. %RBX holds the target %RIP.
Everything else is an Asynchronous Enclave Exit (AEX). On an AEX, %RIP
is set to a value specified by EENTER/ERESUME, %RBP and %RSP are
restored to pre-enclave values and all other registers are loaded with
synthetic state. The actual interrupt/exception/VMExit then triggers,
e.g. the %RIP on the stack for an exception is always the AEX target,
not the %RIP inside the enclave that actually faulted.
next prev parent reply other threads:[~2018-11-02 17:33 UTC|newest]
Thread overview: 235+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-01 17:53 RFC: userspace exception fixups Andy Lutomirski
2018-11-01 17:53 ` Andy Lutomirski
2018-11-01 17:53 ` Andy Lutomirski
2018-11-01 18:09 ` Florian Weimer
2018-11-01 18:09 ` Florian Weimer
2018-11-01 18:09 ` Florian Weimer
2018-11-01 18:09 ` Florian Weimer
2018-11-01 18:30 ` Rich Felker
2018-11-01 18:30 ` Rich Felker
2018-11-01 18:30 ` Rich Felker
2018-11-01 19:00 ` Jarkko Sakkinen
2018-11-01 19:00 ` Jarkko Sakkinen
2018-11-01 19:00 ` Jarkko Sakkinen
2018-11-01 18:27 ` Rich Felker
2018-11-01 18:27 ` Rich Felker
2018-11-01 18:27 ` Rich Felker
2018-11-01 18:33 ` Jann Horn
2018-11-01 18:33 ` Jann Horn
2018-11-01 18:52 ` Rich Felker
2018-11-01 18:52 ` Rich Felker
2018-11-01 19:10 ` Linus Torvalds
2018-11-01 19:10 ` Linus Torvalds
2018-11-01 19:31 ` Rich Felker
2018-11-01 19:31 ` Rich Felker
2018-11-01 21:24 ` Linus Torvalds
2018-11-01 21:24 ` Linus Torvalds
2018-11-01 23:22 ` Andy Lutomirski
2018-11-01 23:22 ` Andy Lutomirski
2018-11-01 23:22 ` Andy Lutomirski
2018-11-02 16:30 ` Sean Christopherson
2018-11-02 16:30 ` Sean Christopherson
2018-11-02 16:30 ` Sean Christopherson
2018-11-02 16:37 ` Jethro Beekman
2018-11-02 16:37 ` Jethro Beekman
2018-11-02 16:52 ` Sean Christopherson
2018-11-02 16:52 ` Sean Christopherson
2018-11-02 16:56 ` Jethro Beekman
2018-11-02 16:56 ` Jethro Beekman
2018-11-02 17:01 ` Andy Lutomirski
2018-11-02 17:01 ` Andy Lutomirski
2018-11-02 17:01 ` Andy Lutomirski
2018-11-02 17:05 ` Jethro Beekman
2018-11-02 17:05 ` Jethro Beekman
2018-11-02 17:16 ` Andy Lutomirski
2018-11-02 17:16 ` Andy Lutomirski
2018-11-02 17:16 ` Andy Lutomirski
2018-11-02 17:32 ` Rich Felker
2018-11-02 17:32 ` Rich Felker
2018-11-02 17:32 ` Rich Felker
2018-11-02 17:12 ` Sean Christopherson
2018-11-02 17:12 ` Sean Christopherson
2018-11-02 22:42 ` Jarkko Sakkinen
2018-11-02 22:42 ` Jarkko Sakkinen
2018-11-02 16:56 ` Dave Hansen
2018-11-02 16:56 ` Dave Hansen
2018-11-02 16:56 ` Dave Hansen
2018-11-02 17:06 ` Sean Christopherson
2018-11-02 17:06 ` Sean Christopherson
2018-11-02 17:06 ` Sean Christopherson
2018-11-02 17:13 ` Dave Hansen
2018-11-02 17:13 ` Dave Hansen
2018-11-02 17:13 ` Dave Hansen
2018-11-02 17:33 ` Sean Christopherson [this message]
2018-11-02 17:33 ` Sean Christopherson
2018-11-02 17:33 ` Sean Christopherson
2018-11-02 17:48 ` Andy Lutomirski
2018-11-02 17:48 ` Andy Lutomirski
2018-11-02 17:48 ` Andy Lutomirski
2018-11-02 18:27 ` Sean Christopherson
2018-11-02 18:27 ` Sean Christopherson
2018-11-02 18:27 ` Sean Christopherson
2018-11-02 19:02 ` Jann Horn
2018-11-02 19:02 ` Jann Horn
2018-11-02 19:02 ` Jann Horn
2018-11-02 22:04 ` Sean Christopherson
2018-11-02 22:04 ` Sean Christopherson
2018-11-02 22:04 ` Sean Christopherson
2018-11-02 23:27 ` Jann Horn
2018-11-02 23:27 ` Jann Horn
2018-11-02 23:27 ` Jann Horn
2018-11-02 23:32 ` Andy Lutomirski
2018-11-02 23:32 ` Andy Lutomirski
2018-11-02 23:32 ` Andy Lutomirski
2018-11-02 23:36 ` Jann Horn
2018-11-02 23:36 ` Jann Horn
2018-11-02 23:36 ` Jann Horn
2018-11-06 15:37 ` Sean Christopherson
2018-11-06 15:37 ` Sean Christopherson
2018-11-06 15:37 ` Sean Christopherson
2018-11-06 16:57 ` Andy Lutomirski
2018-11-06 16:57 ` Andy Lutomirski
2018-11-06 16:57 ` Andy Lutomirski
2018-11-06 17:03 ` Dave Hansen
2018-11-06 17:03 ` Dave Hansen
2018-11-06 17:03 ` Dave Hansen
2018-11-06 17:19 ` Sean Christopherson
2018-11-06 17:19 ` Sean Christopherson
2018-11-06 17:19 ` Sean Christopherson
2018-11-06 18:20 ` Andy Lutomirski
2018-11-06 18:20 ` Andy Lutomirski
2018-11-06 18:20 ` Andy Lutomirski
2018-11-06 18:41 ` Dave Hansen
2018-11-06 18:41 ` Dave Hansen
2018-11-06 18:41 ` Dave Hansen
2018-11-06 19:02 ` Andy Lutomirski
2018-11-06 19:02 ` Andy Lutomirski
2018-11-06 19:02 ` Andy Lutomirski
2018-11-06 19:22 ` Dave Hansen
2018-11-06 19:22 ` Dave Hansen
2018-11-06 19:22 ` Dave Hansen
2018-11-06 20:12 ` Andy Lutomirski
2018-11-06 20:12 ` Andy Lutomirski
2018-11-06 20:12 ` Andy Lutomirski
2018-11-06 21:00 ` Dave Hansen
2018-11-06 21:00 ` Dave Hansen
2018-11-06 21:00 ` Dave Hansen
2018-11-06 21:07 ` Andy Lutomirski
2018-11-06 21:07 ` Andy Lutomirski
2018-11-06 21:07 ` Andy Lutomirski
2018-11-06 21:41 ` Andy Lutomirski
2018-11-06 21:41 ` Andy Lutomirski
2018-11-06 21:41 ` Andy Lutomirski
2018-11-06 21:59 ` Sean Christopherson
2018-11-06 21:59 ` Sean Christopherson
2018-11-06 21:59 ` Sean Christopherson
2018-11-06 23:00 ` Andy Lutomirski
2018-11-06 23:00 ` Andy Lutomirski
2018-11-06 23:00 ` Andy Lutomirski
2018-11-06 23:35 ` Sean Christopherson
2018-11-06 23:35 ` Sean Christopherson
2018-11-06 23:35 ` Sean Christopherson
2018-11-06 23:39 ` Andy Lutomirski
2018-11-06 23:39 ` Andy Lutomirski
2018-11-06 23:39 ` Andy Lutomirski
2018-11-07 0:02 ` Sean Christopherson
2018-11-07 0:02 ` Sean Christopherson
2018-11-07 0:02 ` Sean Christopherson
2018-11-07 1:17 ` Andy Lutomirski
2018-11-07 1:17 ` Andy Lutomirski
2018-11-07 1:17 ` Andy Lutomirski
2018-11-07 6:47 ` Jethro Beekman
2018-11-07 6:47 ` Jethro Beekman
2018-11-07 15:34 ` Sean Christopherson
2018-11-07 15:34 ` Sean Christopherson
2018-11-07 15:34 ` Sean Christopherson
2018-11-07 19:01 ` Sean Christopherson
2018-11-07 19:01 ` Sean Christopherson
2018-11-07 19:01 ` Sean Christopherson
2018-11-07 20:56 ` Dave Hansen
2018-11-07 20:56 ` Dave Hansen
2018-11-07 20:56 ` Dave Hansen
2018-11-08 15:04 ` Jarkko Sakkinen
2018-11-08 15:04 ` Jarkko Sakkinen
2018-11-08 15:04 ` Jarkko Sakkinen
2018-11-08 19:54 ` Sean Christopherson
2018-11-08 19:54 ` Sean Christopherson
2018-11-08 19:54 ` Sean Christopherson
2018-11-08 20:05 ` Andy Lutomirski
2018-11-08 20:05 ` Andy Lutomirski
2018-11-08 20:05 ` Andy Lutomirski
2018-11-08 20:10 ` Dave Hansen
2018-11-08 20:10 ` Dave Hansen
2018-11-08 20:10 ` Dave Hansen
2018-11-08 21:16 ` Sean Christopherson
2018-11-08 21:16 ` Sean Christopherson
2018-11-08 21:16 ` Sean Christopherson
2018-11-08 21:50 ` Dave Hansen
2018-11-08 21:50 ` Dave Hansen
2018-11-08 21:50 ` Dave Hansen
2018-11-08 22:04 ` Sean Christopherson
2018-11-08 22:04 ` Sean Christopherson
2018-11-08 22:04 ` Sean Christopherson
2018-11-09 7:12 ` Christoph Hellwig
2018-11-09 7:12 ` Christoph Hellwig
2018-11-09 7:12 ` Christoph Hellwig
2018-11-06 23:17 ` Rich Felker
2018-11-06 23:17 ` Rich Felker
2018-11-06 23:17 ` Rich Felker
2018-11-06 23:26 ` Sean Christopherson
2018-11-06 23:26 ` Sean Christopherson
2018-11-06 23:26 ` Sean Christopherson
2018-11-07 21:27 ` Rich Felker
2018-11-07 21:27 ` Rich Felker
2018-11-07 21:27 ` Rich Felker
2018-11-07 21:33 ` Andy Lutomirski
2018-11-07 21:33 ` Andy Lutomirski
2018-11-07 21:33 ` Andy Lutomirski
2018-11-07 21:40 ` Sean Christopherson
2018-11-07 21:40 ` Sean Christopherson
2018-11-07 21:40 ` Sean Christopherson
2018-11-08 15:11 ` Jarkko Sakkinen
2018-11-08 15:11 ` Jarkko Sakkinen
2018-11-08 15:11 ` Jarkko Sakkinen
2018-11-06 17:00 ` Dave Hansen
2018-11-06 17:00 ` Dave Hansen
2018-11-06 17:00 ` Dave Hansen
2018-11-02 22:37 ` Jarkko Sakkinen
2018-11-02 22:37 ` Jarkko Sakkinen
2018-11-02 22:37 ` Jarkko Sakkinen
2018-11-01 19:06 ` Linus Torvalds
2018-11-01 19:06 ` Linus Torvalds
2018-11-02 22:07 ` Jarkko Sakkinen
2018-11-02 22:07 ` Jarkko Sakkinen
2018-11-18 7:15 ` Jarkko Sakkinen
2018-11-18 7:18 ` Jarkko Sakkinen
2018-11-18 13:02 ` Jarkko Sakkinen
2018-11-18 13:02 ` Jarkko Sakkinen
2018-11-18 13:02 ` Jarkko Sakkinen
2018-11-19 5:17 ` Jethro Beekman
2018-11-19 5:17 ` Jethro Beekman
2018-11-19 14:05 ` Jarkko Sakkinen
2018-11-19 14:05 ` Jarkko Sakkinen
2018-11-19 14:59 ` Jarkko Sakkinen
2018-11-19 14:59 ` Jarkko Sakkinen
2018-11-19 15:29 ` Andy Lutomirski
2018-11-19 15:29 ` Andy Lutomirski
2018-11-19 16:02 ` Jarkko Sakkinen
2018-11-19 17:00 ` Andy Lutomirski
2018-11-19 17:00 ` Andy Lutomirski
2018-11-20 10:11 ` Jarkko Sakkinen
2018-11-20 15:19 ` Andy Lutomirski
2018-11-20 15:19 ` Andy Lutomirski
2018-11-20 22:55 ` Jarkko Sakkinen
2018-11-21 5:17 ` Jethro Beekman
2018-11-21 5:17 ` Jethro Beekman
2018-11-21 15:17 ` Jarkko Sakkinen
2018-11-21 15:17 ` Jarkko Sakkinen
2018-11-24 17:07 ` Jarkko Sakkinen
2018-11-24 17:07 ` Jarkko Sakkinen
2018-11-26 14:35 ` Sean Christopherson
2018-11-26 14:35 ` Sean Christopherson
2018-11-26 22:06 ` Jarkko Sakkinen
2018-11-26 22:06 ` Jarkko Sakkinen
2018-11-20 18:09 ` Sean Christopherson
2018-11-20 22:46 ` 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=20181102173350.GF7393@linux.intel.com \
--to=sean.j.christopherson@intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bp@al \
--cc=dalias@libc.org \
--cc=dave.hansen@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=fweimer@redhat.com \
--cc=jannh@google.com \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=jethro@fortanix.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sgx@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=nhorman@redhat.com \
--cc=npmccallum@redhat.com \
--cc=peterz@infradead.org \
--cc=serge.ayoun@intel.com \
--cc=shay.katz-zamir@intel.com \
--cc=tglx@linutronix.de \
--cc=torvalds@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: 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.