From: Andy Lutomirski <luto@kernel.org>
To: Nadav Amit <nadav.amit@gmail.com>
Cc: Andy Lutomirski <luto@kernel.org>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
Ingo Molnar <mingo@redhat.com>,
LKML <linux-kernel@vger.kernel.org>, X86 ML <x86@kernel.org>,
"H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Damian Tometzki <linux_dti@icloud.com>,
linux-integrity <linux-integrity@vger.kernel.org>,
LSM List <linux-security-module@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Kernel Hardening <kernel-hardening@lists.openwall.com>,
Linux-MM <linux-mm@kvack.org>, Will Deacon <will.deacon@arm.com>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
Kristen Carlson Accardi <kristen@linux.intel.com>,
"Dock, Deneen T" <deneen.t.dock@intel.com>,
Kees Cook <keescook@chromium.org>,
Dave Hansen <dave.hansen@intel.com>
Subject: Re: [PATCH v2 05/20] x86/alternative: initializing temporary mm for patching
Date: Mon, 11 Feb 2019 14:47:39 -0800 [thread overview]
Message-ID: <CALCETrXE0n4BrkX2ZLDJjdLqD-N_WwSZHt=S2KKBrTV6Zt5Teg@mail.gmail.com> (raw)
In-Reply-To: <3EA322C6-5645-4900-AEC6-97FC05716F75@gmail.com>
On Mon, Feb 11, 2019 at 11:18 AM Nadav Amit <nadav.amit@gmail.com> wrote:
>
> > On Feb 11, 2019, at 11:07 AM, Andy Lutomirski <luto@kernel.org> wrote:
> >
> > I'm certainly amenable to other solutions, but this one does seem the
> > least messy. I looked at my old patch, and it doesn't do what you
> > want. I'd suggest you just add a percpu variable like cpu_dr7 and rig
> > up some accessors so that it stays up to date. Then you can skip the
> > dr7 writes if there are no watchpoints set.
> >
> > Also, EFI is probably a less interesting example than rare_write.
> > With rare_write, especially the dynamically allocated variants that
> > people keep coming up with, we'll need a swath of address space fully
> > as large as the vmalloc area. and getting *that* right while still
> > using the kernel address range might be more of a mess than we really
> > want to deal with.
>
> As long as you feel comfortable with this solution, I’m fine with it.
>
> Here is what I have (untested). I prefer to save/restore all the DRs,
> because IIRC DR6 indications are updated even if breakpoints are disabled
> (in DR7). And anyhow, that is the standard interface.
Seems reasonable, but:
>
>
> -- >8 --
>
> From: Nadav Amit <namit@vmware.com>
> Date: Mon, 11 Feb 2019 03:07:08 -0800
> Subject: [PATCH] mm: save DRs when loading temporary mm
>
> Signed-off-by: Nadav Amit <namit@vmware.com>
> ---
> arch/x86/include/asm/mmu_context.h | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
> index d684b954f3c0..4f92ec3df149 100644
> --- a/arch/x86/include/asm/mmu_context.h
> +++ b/arch/x86/include/asm/mmu_context.h
> @@ -13,6 +13,7 @@
> #include <asm/tlbflush.h>
> #include <asm/paravirt.h>
> #include <asm/mpx.h>
> +#include <asm/debugreg.h>
>
> extern atomic64_t last_mm_ctx_id;
>
> @@ -358,6 +359,7 @@ static inline unsigned long __get_current_cr3_fast(void)
>
> typedef struct {
> struct mm_struct *prev;
> + unsigned short bp_enabled : 1;
> } temp_mm_state_t;
>
> /*
> @@ -380,6 +382,15 @@ static inline temp_mm_state_t use_temporary_mm(struct mm_struct *mm)
> lockdep_assert_irqs_disabled();
> state.prev = this_cpu_read(cpu_tlbstate.loaded_mm);
> switch_mm_irqs_off(NULL, mm, current);
> +
> + /*
> + * If breakpoints are enabled, disable them while the temporary mm is
> + * used - they do not belong and might cause wrong signals or crashes.
> + */
Maybe clarify this? Add some mention that the specific problem is
that user code could set a watchpoint on an address that is also used
in the temporary mm.
Arguably we should not disable *kernel* breakpoints a la perf, but
that seems like quite a minor issue, at least as long as
use_temporary_mm() doesn't get wider use. But a comment that this
also disables perf breakpoints and that this could be undesirable
might be in order as well.
next prev parent reply other threads:[~2019-02-11 22:47 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-29 0:34 [PATCH v2 00/20] Merge text_poke fixes and executable lockdowns Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 01/20] Fix "x86/alternatives: Lockdep-enforce text_mutex in text_poke*()" Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 02/20] x86/jump_label: Use text_poke_early() during early init Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 03/20] x86/mm: temporary mm struct Rick Edgecombe
2019-01-31 11:29 ` Borislav Petkov
2019-01-31 22:19 ` Nadav Amit
2019-02-01 0:08 ` Borislav Petkov
2019-02-01 0:25 ` Nadav Amit
2019-02-04 14:28 ` Borislav Petkov
2019-01-29 0:34 ` [PATCH v2 04/20] fork: provide a function for copying init_mm Rick Edgecombe
2019-02-05 8:53 ` Borislav Petkov
2019-02-05 9:03 ` Nadav Amit
2019-01-29 0:34 ` [PATCH v2 05/20] x86/alternative: initializing temporary mm for patching Rick Edgecombe
2019-02-05 9:18 ` Borislav Petkov
2019-02-11 0:39 ` Nadav Amit
2019-02-11 5:18 ` Andy Lutomirski
2019-02-11 18:04 ` Nadav Amit
2019-02-11 19:07 ` Andy Lutomirski
2019-02-11 19:18 ` Nadav Amit
2019-02-11 22:47 ` Andy Lutomirski [this message]
2019-02-12 18:23 ` Nadav Amit
2019-01-29 0:34 ` [PATCH v2 06/20] x86/alternative: use temporary mm for text poking Rick Edgecombe
2019-02-05 9:58 ` Borislav Petkov
2019-02-05 11:31 ` Peter Zijlstra
2019-02-05 12:35 ` Borislav Petkov
2019-02-05 13:25 ` Peter Zijlstra
2019-02-05 17:54 ` Nadav Amit
2019-02-05 13:29 ` Peter Zijlstra
2019-01-29 0:34 ` [PATCH v2 07/20] x86/kgdb: avoid redundant comparison of patched code Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 08/20] x86/ftrace: set trampoline pages as executable Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 09/20] x86/kprobes: instruction pages initialization enhancements Rick Edgecombe
2019-02-11 18:22 ` Borislav Petkov
2019-02-11 19:36 ` Nadav Amit
2019-01-29 0:34 ` [PATCH v2 10/20] x86: avoid W^X being broken during modules loading Rick Edgecombe
2019-02-11 18:29 ` Borislav Petkov
2019-02-11 18:45 ` Nadav Amit
2019-02-11 19:01 ` Borislav Petkov
2019-02-11 19:09 ` Nadav Amit
2019-02-11 19:10 ` Borislav Petkov
2019-02-11 19:27 ` Nadav Amit
2019-02-11 19:42 ` Borislav Petkov
2019-02-11 20:32 ` Nadav Amit
2019-03-07 15:10 ` [PATCH] x86/cpufeature: Remove __pure attribute to _static_cpu_has() Borislav Petkov
2019-03-07 16:43 ` hpa
2019-03-07 17:02 ` Borislav Petkov
2019-03-07 7:29 ` [PATCH v2 10/20] x86: avoid W^X being broken during modules loading Borislav Petkov
2019-03-07 16:53 ` hpa
2019-03-07 17:06 ` Borislav Petkov
2019-03-07 20:02 ` Andy Lutomirski
2019-03-07 20:25 ` Borislav Petkov
2019-01-29 0:34 ` [PATCH v2 11/20] x86/jump-label: remove support for custom poker Rick Edgecombe
2019-02-11 18:37 ` Borislav Petkov
2019-01-29 0:34 ` [PATCH v2 12/20] x86/alternative: Remove the return value of text_poke_*() Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 13/20] Add set_alias_ function and x86 implementation Rick Edgecombe
2019-02-11 19:09 ` Borislav Petkov
2019-02-11 19:27 ` Edgecombe, Rick P
2019-02-11 22:59 ` Andy Lutomirski
2019-02-12 0:01 ` Edgecombe, Rick P
2019-01-29 0:34 ` [PATCH v2 14/20] mm: Make hibernate handle unmapped pages Rick Edgecombe
2019-02-19 11:04 ` Borislav Petkov
2019-02-19 21:28 ` Edgecombe, Rick P
2019-02-20 16:07 ` Borislav Petkov
2019-01-29 0:34 ` [PATCH v2 15/20] vmalloc: New flags for safe vfree on special perms Rick Edgecombe
2019-02-19 12:48 ` Borislav Petkov
2019-02-19 19:42 ` Edgecombe, Rick P
2019-02-20 16:14 ` Borislav Petkov
2019-01-29 0:34 ` [PATCH v2 16/20] modules: Use vmalloc special flag Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 17/20] bpf: " Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 18/20] x86/ftrace: " Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 19/20] x86/kprobes: " Rick Edgecombe
2019-01-29 0:34 ` [PATCH v2 20/20] x86/alternative: comment about module removal races Rick Edgecombe
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='CALCETrXE0n4BrkX2ZLDJjdLqD-N_WwSZHt=S2KKBrTV6Zt5Teg@mail.gmail.com' \
--to=luto@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=ard.biesheuvel@linaro.org \
--cc=bp@alien8.de \
--cc=dave.hansen@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=deneen.t.dock@intel.com \
--cc=hpa@zytor.com \
--cc=keescook@chromium.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=kristen@linux.intel.com \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-security-module@vger.kernel.org \
--cc=linux_dti@icloud.com \
--cc=mingo@redhat.com \
--cc=nadav.amit@gmail.com \
--cc=peterz@infradead.org \
--cc=rick.p.edgecombe@intel.com \
--cc=tglx@linutronix.de \
--cc=will.deacon@arm.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).