From: Rick Edgecombe <rick.p.edgecombe@intel.com>
To: Andy Lutomirski <luto@kernel.org>, Ingo Molnar <mingo@redhat.com>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org, hpa@zytor.com,
Thomas Gleixner <tglx@linutronix.de>,
Borislav Petkov <bp@alien8.de>, Nadav Amit <nadav.amit@gmail.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Peter Zijlstra <peterz@infradead.org>,
linux_dti@icloud.com, linux-integrity@vger.kernel.org,
linux-security-module@vger.kernel.org, akpm@linux-foundation.org,
kernel-hardening@lists.openwall.com, linux-mm@kvack.org,
will.deacon@arm.com, ard.biesheuvel@linaro.org,
kristen@linux.intel.com, deneen.t.dock@intel.com,
Rick Edgecombe <rick.p.edgecombe@intel.com>
Subject: [PATCH v2 00/20] Merge text_poke fixes and executable lockdowns
Date: Mon, 28 Jan 2019 16:34:02 -0800 [thread overview]
Message-ID: <20190129003422.9328-1-rick.p.edgecombe@intel.com> (raw)
This patchset improves several overlapping issues around stale TLB
entries and W^X violations. It is combined from a slightly tweaked
"x86/alternative: text_poke() enhancements v7" [1] and a next version of
the "Don’t leave executable TLB entries to freed pages v2" [2]
patchsets that were conflicting.
The related issues that this fixes:
1. Fixmap PTEs that are used for patching are available for access from
other cores and might be exploited. They are not even flushed from
the TLB in remote cores, so the risk is even higher. Address this
issue by introducing a temporary mm that is only used during
patching. Unfortunately, due to init ordering, fixmap is still used
during boot-time patching. Future patches can eliminate the need for
it.
2. Missing lockdep assertion to ensure text_mutex is taken. It is
actually not always taken, so fix the instances that were found not
to take the lock (although they should be safe even without taking
the lock).
3. Module_alloc returning memory that is RWX until a module is finished
loading.
4. Sometimes when memory is freed via the module subsystem, an
executable permissioned TLB entry can remain to a freed page. If the
page is re-used to back an address that will receive data from
userspace, it can result in user data being mapped as executable in
the kernel. The root of this behavior is vfree lazily flushing the
TLB, but not lazily freeing the underlying pages.
Changes for v2:
- Adding “Reviewed-by tag” [Masami]
- Comment instead of code to warn against module removal while patching [Masami]
- Avoiding open-coded TLB flush [Andy]
- Remove "This patch" [Borislav Petkov]
- Not set global bit during text poking [Andy, hpa]
- Add Ack from [Pavel Machek]
- Split patch 16 "Plug in new special vfree flag" into 4 patches (16-19)
to make it easier to review. There were no code changes.
The changes from "Don’t leave executable TLB entries to freed pages
v2" to v1:
- Add support for case of hibernate trying to save an unmapped page
on the directmap. (Ard Biesheuvel)
- No week arch breakout for vfree-ing special memory (Andy Lutomirski)
- Avoid changing deferred free code by moving modules init free to work
queue (Andy Lutomirski)
- Plug in new flag for kprobes and ftrace
- More arch generic names for set_pages functions (Ard Biesheuvel)
- Fix for TLB not always flushing the directmap (Nadav Amit)
Changes from "x86/alternative: text_poke() enhancements v7" to v1
- Fix build failure on CONFIG_RANDOMIZE_BASE=n (Rick)
- Remove text_poke usage from ftrace (Nadav)
[1] https://lkml.org/lkml/2018/12/5/200
[2] https://lkml.org/lkml/2018/12/11/1571
Andy Lutomirski (1):
x86/mm: temporary mm struct
Nadav Amit (12):
Fix "x86/alternatives: Lockdep-enforce text_mutex in text_poke*()"
x86/jump_label: Use text_poke_early() during early init
fork: provide a function for copying init_mm
x86/alternative: initializing temporary mm for patching
x86/alternative: use temporary mm for text poking
x86/kgdb: avoid redundant comparison of patched code
x86/ftrace: set trampoline pages as executable
x86/kprobes: instruction pages initialization enhancements
x86: avoid W^X being broken during modules loading
x86/jump-label: remove support for custom poker
x86/alternative: Remove the return value of text_poke_*()
x86/alternative: comment about module removal races
Rick Edgecombe (7):
Add set_alias_ function and x86 implementation
mm: Make hibernate handle unmapped pages
vmalloc: New flags for safe vfree on special perms
modules: Use vmalloc special flag
bpf: Use vmalloc special flag
x86/ftrace: Use vmalloc special flag
x86/kprobes: Use vmalloc special flag
arch/Kconfig | 4 +
arch/x86/Kconfig | 1 +
arch/x86/include/asm/fixmap.h | 2 -
arch/x86/include/asm/mmu_context.h | 32 +++++
arch/x86/include/asm/pgtable.h | 3 +
arch/x86/include/asm/set_memory.h | 3 +
arch/x86/include/asm/text-patching.h | 7 +-
arch/x86/kernel/alternative.c | 199 ++++++++++++++++++++-------
arch/x86/kernel/ftrace.c | 14 +-
arch/x86/kernel/jump_label.c | 19 ++-
arch/x86/kernel/kgdb.c | 25 +---
arch/x86/kernel/kprobes/core.c | 19 ++-
arch/x86/kernel/module.c | 2 +-
arch/x86/mm/init_64.c | 36 +++++
arch/x86/mm/pageattr.c | 16 ++-
arch/x86/xen/mmu_pv.c | 2 -
include/linux/filter.h | 18 +--
include/linux/mm.h | 18 +--
include/linux/sched/task.h | 1 +
include/linux/set_memory.h | 10 ++
include/linux/vmalloc.h | 13 ++
init/main.c | 3 +
kernel/bpf/core.c | 1 -
kernel/fork.c | 24 +++-
kernel/module.c | 82 ++++++-----
mm/page_alloc.c | 7 +-
mm/vmalloc.c | 122 +++++++++++++---
27 files changed, 494 insertions(+), 189 deletions(-)
--
2.17.1
next reply other threads:[~2019-01-29 0:41 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-29 0:34 Rick Edgecombe [this message]
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
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=20190129003422.9328-1-rick.p.edgecombe@intel.com \
--to=rick.p.edgecombe@intel.com \
--cc=akpm@linux-foundation.org \
--cc=ard.biesheuvel@linaro.org \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=deneen.t.dock@intel.com \
--cc=hpa@zytor.com \
--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=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=nadav.amit@gmail.com \
--cc=peterz@infradead.org \
--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).