linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andy Lutomirski <luto@kernel.org>
To: Dave Hansen <dave.hansen@linux.intel.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Kees Cook <keescook@google.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@kernel.org>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Juergen Gross <jgross@suse.com>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Hugh Dickins <hughd@google.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Borislav Petkov <bp@alien8.de>,
	Andrew Lutomirski <luto@kernel.org>,
	Andi Kleen <ak@linux.intel.com>
Subject: Re: [PATCH 5/7] x86/mm/init: remove freed kernel image areas from alias mapping
Date: Sat, 4 Aug 2018 14:38:04 -0700	[thread overview]
Message-ID: <CALCETrV3O8WexN_zvksYWersyLu1K9GCiYJoLCB2-Jsxq9MGGQ@mail.gmail.com> (raw)
In-Reply-To: <20180802225831.5F6A2BFC@viggo.jf.intel.com>

On Thu, Aug 2, 2018 at 3:58 PM, Dave Hansen <dave.hansen@linux.intel.com> wrote:
>
> From: Dave Hansen <dave.hansen@linux.intel.com>
>
> The kernel image is mapped into two places in the virtual address
> space (addresses without KASLR, of course):
>
>         1. The kernel direct map (0xffff880000000000)
>         2. The "high kernel map" (0xffffffff81000000)
>
> We actually execute out of #2.  If we get the address of a kernel
> symbol, it points to #2, but almost all physical-to-virtual
> translations point to #1.
>
> Parts of the "high kernel map" alias are mapped in the userspace
> page tables with the Global bit for performance reasons.  The
> parts that we map to userspace do not (er, should not) have
> secrets.
>
> This is fine, except that some areas in the kernel image that
> are adjacent to the non-secret-containing areas are unused holes.
> We free these holes back into the normal page allocator and
> reuse them as normal kernel memory.  The memory will, of course,
> get *used* via the normal map, but the alias mapping is kept.
>
> This otherwise unused alias mapping of the holes will, by default
> keep the Global bit, be mapped out to userspace, and be
> vulnerable to Meltdown.
>
> Remove the alias mapping of these pages entirely.  This is likely
> to fracture the 2M page mapping the kernel image near these areas,
> but this should affect a minority of the area.
>
> The pageattr code changes *all* aliases mapping the physical pages
> that it operates on (by default).  We only want to modify a single
> alias, so we need to tweak its behavior.
>
> This unmapping behavior is currently dependent on PTI being in
> place.  Going forward, we should at least consider doing this for
> all configurations.  Having an extra read-write alias for memory
> is not exactly ideal for debugging things like random memory
> corruption and this does undercut features like DEBUG_PAGEALLOC
> or future work like eXclusive Page Frame Ownership (XPFO).
>

I like this patch, and I tend to think we should (eventually) enable
it regardless of PTI.  Cleaning up the memory map is generally a good
thing.

Also, just to make sure I fully understand: the kernel text is aliased
in both the direct map and the high map, right?  This means that we
should be able to make the high kernel mapping have proper RO
permissions very early without breaking text_poke() at the minor cost
of needing to force a serializing instruction at the end of each big
block of text pokes.  I think this would be worthwhile, although I
suspect we'll uncover *tons* of bugs in the process.

  parent reply	other threads:[~2018-08-04 21:38 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-02 22:58 [PATCH 0/7] [v2] x86/mm/pti: close two Meltdown leaks with Global kernel mapping Dave Hansen
2018-08-02 22:58 ` [PATCH 1/7] x86/mm/pti: clear Global bit more aggressively Dave Hansen
2018-08-05 20:30   ` [tip:x86/pti] x86/mm/pti: Clear " tip-bot for Dave Hansen
2018-08-02 22:58 ` [PATCH 2/7] mm: allow non-direct-map arguments to free_reserved_area() Dave Hansen
2018-08-05 20:31   ` [tip:x86/pti] mm: Allow " tip-bot for Dave Hansen
2018-08-02 22:58 ` [PATCH 3/7] x86/mm/init: pass unconverted symbol addresses to free_init_pages() Dave Hansen
2018-08-04  0:18   ` Hugh Dickins
2018-08-04 17:31     ` Linus Torvalds
2018-08-04 18:23       ` Hugh Dickins
2018-08-05  6:11       ` Andi Kleen
2018-08-05 20:31   ` [tip:x86/pti] x86/mm/init: Pass " tip-bot for Dave Hansen
2018-08-02 22:58 ` [PATCH 4/7] x86/mm/init: add helper for freeing kernel image pages Dave Hansen
2018-08-05 20:32   ` [tip:x86/pti] x86/mm/init: Add " tip-bot for Dave Hansen
2018-08-02 22:58 ` [PATCH 5/7] x86/mm/init: remove freed kernel image areas from alias mapping Dave Hansen
2018-08-04  0:35   ` Hugh Dickins
2018-08-04 21:38   ` Andy Lutomirski [this message]
2018-08-06 15:17     ` Dave Hansen
2018-08-05 20:32   ` [tip:x86/pti] x86/mm/init: Remove " tip-bot for Dave Hansen
2018-08-06 20:21   ` [tip:x86/pti-urgent] " tip-bot for Dave Hansen
2018-08-02 22:58 ` [PATCH 6/7] x86/mm/pageattr: pass named flag instead of 0/1 Dave Hansen
2018-08-05 20:09   ` Thomas Gleixner
2018-08-06 15:09     ` Dave Hansen
2018-08-02 22:58 ` [PATCH 7/7] x86/mm/pageattr: Remove implicit NX behavior Dave Hansen

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=CALCETrV3O8WexN_zvksYWersyLu1K9GCiYJoLCB2-Jsxq9MGGQ@mail.gmail.com \
    --to=luto@kernel.org \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hughd@google.com \
    --cc=jgross@suse.com \
    --cc=jpoimboe@redhat.com \
    --cc=keescook@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.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).