From: Sai Praneeth Prakhya <sai.praneeth.prakhya-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Andy Lutomirski <luto-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org>
Cc: Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
Andy Lutomirski <luto-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Matt Fleming
<matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>,
Ard Biesheuvel
<ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@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>,
"Shankar,
Ravi V" <ravi.v.shankar-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"Luck, Tony" <tony.luck-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: Re: [PATCH 3/3] x86/efi: Use efi_switch_mm() rather than manually twiddling with cr3
Date: Wed, 23 Aug 2017 15:52:22 -0700 [thread overview]
Message-ID: <1503528742.30475.17.camel@intel.com> (raw)
In-Reply-To: <6E0248C9-19AB-474E-A901-2A0422337DD0-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org>
On Mon, 2017-08-21 at 08:23 -0700, Andy Lutomirski wrote:
>
> > On Aug 21, 2017, at 7:08 AM, Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org> wrote:
> >
> >> On Mon, Aug 21, 2017 at 06:56:01AM -0700, Andy Lutomirski wrote:
> >>
> >>
> >>> On Aug 21, 2017, at 3:33 AM, Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org> wrote:
> >
> >>>>
> >>>> Using a kernel thread solves the problem for real. Anything that
> >>>> blindly accesses user memory in kernel thread context is terminally
> >>>> broken no matter what.
> >>>
> >>> So perf-callchain doesn't do it 'blindly', it wants either:
> >>>
> >>> - user_mode(regs) true, or
> >>> - task_pt_regs() set.
> >>>
> >>> However I'm thinking that if the kernel thread has ->mm == &efi_mm, the
> >>> EFI code running could very well have user_mode(regs) being true.
> >>>
> >>> intel_pmu_pebs_fixup() OTOH 'blindly' assumes that the LBR addresses are
> >>> accessible. It bails on error though. So while its careful, it does
> >>> attempt to access the 'user' mapping directly. Which should also trigger
> >>> with the EFI code.
> >>>
> >>> And I'm not seeing anything particularly broken with either. The PEBS
> >>> fixup relies on the CPU having just executed the code, and if it could
> >>> fetch and execute the code, why shouldn't it be able to fetch and read?
> >>
> >> There are two ways this could be a problem. One is that u privileged
> >> user apps shouldn't be able to read from EFI memory.
> >
> > Ah, but only root can create per-cpu events or attach events to kernel
> > threads (with sensible paranoia levels).
>
> But this may not need to be percpu. If a non root user can trigger, say, an EFI variable read in their own thread context, boom.
>
+ Tony
Hi Andi,
I am trying to reproduce the issue that we are discussing and hence
tried an experiment like this:
A user process continuously reads efi variable by
"cat /sys/firmware/efi/efivars/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c" for specified time (Eg: 100 seconds) and simultaneously I ran "perf top" as root (which I suppose should trigger NMI's). I see that everything is fine, no lockups, no kernel crash, no warnings/errors in dmesg.
I see that perf top reports 50% of time is spent in efi function
(probably efi_get_variable()).
Overhead Shared Object Symbol
50% [unknown] [k] 0xfffffffeea967416
50% is max, on avg it's 35%.
I have tested this on two kernels v4.12 and v3.19. My machine has 8
cores and to stress test, I further offlined all cpus except cpu0.
Could you please let me know a way to reproduce the issue that we are
discussing here.
I think the issue we are concerned here is, when kernel is in efi
context and an NMI happens and if the NMI handler tries to access user
space, boom! we don't have user space in efi context. Am I right in
understanding the issue or is it something else?
Regards,
Sai
next prev parent reply other threads:[~2017-08-23 22:52 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
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 [this message]
[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=1503528742.30475.17.camel@intel.com \
--to=sai.praneeth.prakhya-ral2jqcrhueavxtiumwx3w@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=luto-kltTT9wpgjJwATOyAt5JVQ@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=tony.luck-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@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