From: Andy Lutomirski <luto@kernel.org> To: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, x86@kernel.org, Borislav Petkov <bp@alien8.de> Cc: Nadav Amit <nadav.amit@gmail.com>, Kees Cook <keescook@chromium.org>, Brian Gerst <brgerst@gmail.com>, "kernel-hardening@lists.openwall.com" <kernel-hardening@lists.openwall.com>, Linus Torvalds <torvalds@linux-foundation.org>, Josh Poimboeuf <jpoimboe@redhat.com>, Andy Lutomirski <luto@kernel.org> Subject: [kernel-hardening] [PATCH 02/13] x86/cpa: In populate_pgd, don't set the pgd entry until it's populated Date: Wed, 15 Jun 2016 17:28:24 -0700 Message-ID: <832aa0209ca4bd94b043add243ac36ab56285639.1466036668.git.luto@kernel.org> (raw) In-Reply-To: <cover.1466036668.git.luto@kernel.org> In-Reply-To: <cover.1466036668.git.luto@kernel.org> This avoids pointless races in which another CPU or task might see a partially populated global pgd entry. These races should normally be harmless, but, if another CPU propagates the entry via vmalloc_fault and then populate_pgd fails (due to memory allocation failure, for example), this prevents a use-after-free of the pgd entry. Signed-off-by: Andy Lutomirski <luto@kernel.org> --- arch/x86/mm/pageattr.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 7a1f7bbf4105..6a8026918bf6 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c @@ -1113,7 +1113,9 @@ static int populate_pgd(struct cpa_data *cpa, unsigned long addr) ret = populate_pud(cpa, addr, pgd_entry, pgprot); if (ret < 0) { - unmap_pgd_range(cpa->pgd, addr, + if (pud) + free_page((unsigned long)pud); + unmap_pud_range(pgd_entry, addr, addr + (cpa->numpages << PAGE_SHIFT)); return ret; } -- 2.7.4
next prev parent reply index Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-06-16 0:28 [kernel-hardening] [PATCH 00/13] Virtually mapped stacks with guard pages (x86, core) Andy Lutomirski 2016-06-16 0:28 ` [kernel-hardening] [PATCH 01/13] x86/mm/hotplug: Don't remove PGD entries in remove_pagetable() Andy Lutomirski 2016-06-16 0:28 ` Andy Lutomirski [this message] 2016-06-16 0:28 ` [kernel-hardening] [PATCH 03/13] x86/cpa: Warn if kernel_unmap_pages_in_pgd is used inappropriately Andy Lutomirski 2016-06-16 0:28 ` [kernel-hardening] [PATCH 04/13] mm: Track NR_KERNEL_STACK in pages instead of number of stacks Andy Lutomirski 2016-06-16 11:10 ` [kernel-hardening] " Vladimir Davydov 2016-06-16 17:21 ` Andy Lutomirski 2016-06-16 19:20 ` Andy Lutomirski 2016-06-16 15:33 ` Josh Poimboeuf 2016-06-16 17:39 ` Andy Lutomirski 2016-06-16 19:39 ` Josh Poimboeuf 2016-06-16 0:28 ` [kernel-hardening] [PATCH 05/13] mm: Move memcg stack accounting to account_kernel_stack Andy Lutomirski 2016-06-16 0:28 ` [kernel-hardening] [PATCH 06/13] fork: Add generic vmalloced stack support Andy Lutomirski 2016-06-16 17:25 ` [kernel-hardening] " Kees Cook 2016-06-16 17:37 ` Andy Lutomirski 2016-06-16 0:28 ` [kernel-hardening] [PATCH 07/13] x86/die: Don't try to recover from an OOPS on a non-default stack Andy Lutomirski 2016-06-16 0:28 ` [kernel-hardening] [PATCH 08/13] x86/dumpstack: When OOPSing, rewind the stack before do_exit Andy Lutomirski 2016-06-16 17:50 ` [kernel-hardening] " Josh Poimboeuf 2016-06-16 17:57 ` Andy Lutomirski 2016-06-16 0:28 ` [kernel-hardening] [PATCH 09/13] x86/dumpstack: When dumping stack bytes due to OOPS, start with regs->sp Andy Lutomirski 2016-06-16 11:56 ` [kernel-hardening] " Borislav Petkov 2016-06-16 0:28 ` [kernel-hardening] [PATCH 10/13] x86/dumpstack: Try harder to get a call trace on stack overflow Andy Lutomirski 2016-06-16 18:16 ` [kernel-hardening] " Josh Poimboeuf 2016-06-16 18:22 ` Andy Lutomirski 2016-06-16 18:33 ` Josh Poimboeuf 2016-06-16 18:37 ` Andy Lutomirski 2016-06-16 18:54 ` Josh Poimboeuf 2016-06-16 0:28 ` [kernel-hardening] [PATCH 11/13] x86/dumpstack/64: Handle faults when printing the "Stack:" part of an OOPS Andy Lutomirski 2016-06-16 0:28 ` [kernel-hardening] [PATCH 12/13] x86/mm/64: Enable vmapped stacks Andy Lutomirski 2016-06-16 4:17 ` [kernel-hardening] " Mika Penttilä 2016-06-16 5:33 ` Andy Lutomirski 2016-06-16 13:11 ` Rik van Riel 2016-06-16 0:28 ` [kernel-hardening] [PATCH 13/13] x86/mm: Improve stack-overflow #PF handling Andy Lutomirski 2016-06-16 6:05 ` [kernel-hardening] Re: [PATCH 00/13] Virtually mapped stacks with guard pages (x86, core) Heiko Carstens 2016-06-16 17:50 ` Andy Lutomirski 2016-06-16 18:14 ` Andy Lutomirski 2016-06-16 21:27 ` Andy Lutomirski 2016-06-17 3:58 ` Andy Lutomirski 2016-06-17 7:27 ` Heiko Carstens 2016-06-17 17:38 ` Andy Lutomirski 2016-06-20 5:58 ` Heiko Carstens 2016-06-20 6:01 ` Andy Lutomirski 2016-06-20 7:07 ` Heiko Carstens 2016-06-16 17:24 ` Kees Cook
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=832aa0209ca4bd94b043add243ac36ab56285639.1466036668.git.luto@kernel.org \ --to=luto@kernel.org \ --cc=bp@alien8.de \ --cc=brgerst@gmail.com \ --cc=jpoimboe@redhat.com \ --cc=keescook@chromium.org \ --cc=kernel-hardening@lists.openwall.com \ --cc=linux-kernel@vger.kernel.org \ --cc=nadav.amit@gmail.com \ --cc=torvalds@linux-foundation.org \ --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
Kernel-hardening Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/kernel-hardening/0 kernel-hardening/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 kernel-hardening kernel-hardening/ https://lore.kernel.org/kernel-hardening \ kernel-hardening@lists.openwall.com public-inbox-index kernel-hardening Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/com.openwall.lists.kernel-hardening AGPL code for this site: git clone https://public-inbox.org/public-inbox.git