From: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
To: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
Cc: Ard Biesheuvel
<ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Andy Lutomirski <luto-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Sai Praneeth Prakhya
<sai.praneeth.prakhya-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
"linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
joeyli <jlee-IBi9RG/b67k@public.gmane.org>,
Borislav Petkov <bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org>,
"Michael S. Tsirkin"
<mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
"Neri,
Ricardo" <ricardo.neri-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Matt Fleming
<matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>,
"Ravi V. Shankar"
<ravi.v.shankar-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCH 3/3] x86/efi: Use efi_switch_mm() rather than manually twiddling with cr3
Date: Wed, 16 Aug 2017 11:07:10 +0100 [thread overview]
Message-ID: <20170816100709.GG12845@arm.com> (raw)
In-Reply-To: <20170816095338.GB17270@leverpostej>
On Wed, Aug 16, 2017 at 10:53:38AM +0100, Mark Rutland wrote:
> On Wed, Aug 16, 2017 at 10:31:12AM +0100, Ard Biesheuvel wrote:
> > (+ Mark, Will)
> >
> > On 15 August 2017 at 22:46, Andy Lutomirski <luto-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> wrote:
> > > On Tue, Aug 15, 2017 at 12:18 PM, Sai Praneeth Prakhya
> > > <sai.praneeth.prakhya-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> wrote:
> > >> +/*
> > >> + * Makes the calling kernel thread switch to/from efi_mm context
> > >> + * Can be used from SetVirtualAddressMap() or during efi runtime calls
> > >> + * (Note: This routine is heavily inspired from use_mm)
> > >> + */
> > >> +void efi_switch_mm(struct mm_struct *mm)
> > >> +{
> > >> + struct task_struct *tsk = current;
> > >> +
> > >> + task_lock(tsk);
> > >> + efi_scratch.prev_mm = tsk->active_mm;
> > >> + if (efi_scratch.prev_mm != mm) {
> > >> + mmgrab(mm);
> > >> + tsk->active_mm = mm;
> > >> + }
> > >> + switch_mm(efi_scratch.prev_mm, mm, NULL);
> > >> + task_unlock(tsk);
> > >> +
> > >> + if (efi_scratch.prev_mm != mm)
> > >> + mmdrop(efi_scratch.prev_mm);
> > >
> > > I'm confused. You're mmdropping an mm that you are still keeping a
> > > pointer to. This is also a bit confusing in the case where you do
> > > efi_switch_mm(efi_scratch.prev_mm).
> > >
> > > This whole manipulation seems fairly dangerous to me for another
> > > reason -- you're taking a user thread (I think) and swapping out its
> > > mm to something that the user in question should *not* have access to.
> > > What if a perf interrupt happens while you're in the alternate mm?
> > > What if you segfault and dump core? Should we maybe just have a flag
> > > that says "this cpu is using a funny mm", assert that the flag is
> > > clear when scheduling, and teach perf, coredumps, etc not to touch
> > > user memory when the flag is set?
> >
> > It appears we may have introduced this exact issue on arm64 and ARM by
> > starting to run the UEFI runtime services with interrupts enabled.
> > (perf does not use NMI on ARM, so the issue did not exist beforehand)
> >
> > Mark, Will, any thoughts?
>
> Yup, I can cause perf to take samples from the EFI FW code, so that's
> less than ideal.
But that should only happen if you're profiling EL1, right, which needs
root privileges? (assuming the skid issue is solved -- not sure what
happened to those patches after they broke criu).
> The "funny mm" flag sounds like a good idea to me, though given recent
> pain with sampling in the case of skid, I don't know exactly what we
> should do if/when we take an overflow interrupt while in EFI.
I don't think special-casing perf interrupts is the right thing to do here.
If we're concerned about user-accesses being made off the back of interrupts
taken whilst in EFI, then we should probably either swizzle back in the
user page table on the IRQ path or postpone handling it until we're done
with the firmware. Having a flag feels a bit weird: would the uaccess
routines return -EFAULT if it's set?
Will
next prev parent reply other threads:[~2017-08-16 10:07 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-15 19:18 [PATCH 0/3] Use mm_struct and switch_mm() instead of manually Sai Praneeth Prakhya
2017-08-15 19:18 ` [PATCH 1/3] efi: Use efi_mm in x86 as well as ARM Sai Praneeth Prakhya
[not found] ` <1502824706-30762-1-git-send-email-sai.praneeth.prakhya-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-15 19:18 ` [PATCH 2/3] x86/efi: Replace efi_pgd with efi_mm.pgd Sai Praneeth Prakhya
2017-08-15 19:18 ` [PATCH 3/3] x86/efi: Use efi_switch_mm() rather than manually twiddling with cr3 Sai Praneeth Prakhya
2017-08-15 21:46 ` Andy Lutomirski
[not found] ` <CALCETrUnT0YL_F3mXyJzi=NE5jvFUUQbwjdK5224zDKkTts-UQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-16 0:23 ` Sai Praneeth Prakhya
[not found] ` <1502843039.9150.19.camel-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-16 0:47 ` Andy Lutomirski
2017-08-16 9:31 ` Ard Biesheuvel
[not found] ` <CAKv+Gu8AySQSXtRWfHA4y5DbH-DQ7jpqkp=tS+snSTar_sKBJw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-16 9:53 ` Mark Rutland
2017-08-16 10:07 ` Will Deacon [this message]
2017-08-16 11:03 ` Mark Rutland
2017-08-16 12:57 ` Matt Fleming
[not found] ` <20170816125715.GB3384-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
2017-08-16 16:14 ` Andy Lutomirski
2017-08-15 22:35 ` Mark Rutland
2017-08-17 10:35 ` Will Deacon
[not found] ` <20170817103514.GC27872-5wv7dgnIgG8@public.gmane.org>
2017-08-17 15:52 ` Andy Lutomirski
[not found] ` <CALCETrVhLmntPArQiuOcQeNf9Y2kDxa+mUY=v1P8rVOkeCZn4Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-21 10:33 ` Peter Zijlstra
[not found] ` <20170821103359.jt2xf2cx5wxjldau-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-08-21 13:56 ` Andy Lutomirski
2017-08-21 14:08 ` Peter Zijlstra
[not found] ` <20170821140813.idloyrk4lowann3j-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-08-21 15:23 ` Andy Lutomirski
[not found] ` <6E0248C9-19AB-474E-A901-2A0422337DD0-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org>
2017-08-21 15:59 ` Peter Zijlstra
[not found] ` <20170821155913.7bmmy7zaihpd6s7h-Nxj+rRp3nVydTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2017-08-21 16:08 ` Ard Biesheuvel
2017-08-23 22:52 ` Sai Praneeth Prakhya
[not found] ` <1503528742.30475.17.camel-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-25 15:13 ` Andy Lutomirski
2017-08-21 17:24 ` Peter Zijlstra
2017-08-25 2:36 ` Sai Praneeth Prakhya
2017-08-25 15:13 ` Andy Lutomirski
-- strict thread matches above, loose matches on Subject: below --
2017-12-17 0:06 [PATCH 3/3] x86/efi: Use efi_switch_mm() rather than manually twiddling with %cr3 Sai Praneeth Prakhya
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=20170816100709.GG12845@arm.com \
--to=will.deacon-5wv7dgnigg8@public.gmane.org \
--cc=ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org \
--cc=jlee-IBi9RG/b67k@public.gmane.org \
--cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=luto-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org \
--cc=mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=ravi.v.shankar-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=ricardo.neri-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=sai.praneeth.prakhya-ral2JQCrhuEAvxtiuMwx3w@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox