Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751444AbeAPVK7 (ORCPT + 1 other); Tue, 16 Jan 2018 16:10:59 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:44332 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750772AbeAPVK6 (ORCPT ); Tue, 16 Jan 2018 16:10:58 -0500 Date: Tue, 16 Jan 2018 22:10:52 +0100 (CET) From: Thomas Gleixner To: Joerg Roedel cc: Ingo Molnar , "H . Peter Anvin" , x86@kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Linus Torvalds , Andy Lutomirski , Dave Hansen , Josh Poimboeuf , Juergen Gross , Peter Zijlstra , Borislav Petkov , Jiri Kosina , Boris Ostrovsky , Brian Gerst , David Laight , Denys Vlasenko , Eduardo Valentin , Greg KH , Will Deacon , aliguori@amazon.com, daniel.gruss@iaik.tugraz.at, hughd@google.com, keescook@google.com, Andrea Arcangeli , Waiman Long , jroedel@suse.de Subject: Re: [PATCH 12/16] x86/mm/pae: Populate the user page-table with user pgd's In-Reply-To: <1516120619-1159-13-git-send-email-joro@8bytes.org> Message-ID: References: <1516120619-1159-1-git-send-email-joro@8bytes.org> <1516120619-1159-13-git-send-email-joro@8bytes.org> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On Tue, 16 Jan 2018, Joerg Roedel wrote: > > +#ifdef CONFIG_X86_64 > /* > * If this is normal user memory, make it NX in the kernel > * pagetables so that, if we somehow screw up and return to > @@ -134,10 +135,16 @@ pgd_t __pti_set_user_pgd(pgd_t *pgdp, pgd_t pgd) > * may execute from it > * - we don't have NX support > * - we're clearing the PGD (i.e. the new pgd is not present). > + * - We run on a 32 bit kernel. 2-level paging doesn't support NX at > + * all and PAE paging does not support it on the PGD level. We can > + * set it in the PMD level there in the future, but that means we > + * need to unshare the PMDs between the kernel and the user > + * page-tables. > */ > if ((pgd.pgd & (_PAGE_USER|_PAGE_PRESENT)) == (_PAGE_USER|_PAGE_PRESENT) && > (__supported_pte_mask & _PAGE_NX)) > pgd.pgd |= _PAGE_NX; I'd suggest to have: static inline pteval_t supported_pgd_mask(void) { if (IS_ENABLED(CONFIG_X86_64)) return __supported_pte_mask; return __supported_pte_mask & ~_PAGE_NX); } and get rid of the ifdeffery completely. Thanks, tglx