Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753993AbeAHR2d (ORCPT + 1 other); Mon, 8 Jan 2018 12:28:33 -0500 Received: from mga06.intel.com ([134.134.136.31]:55799 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753772AbeAHR2a (ORCPT ); Mon, 8 Jan 2018 12:28:30 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,330,1511856000"; d="scan'208";a="9591618" Subject: Re: [PATCH RFC 3/4] x86/pti: don't mark the user PGD with _PAGE_NX. To: Thomas Gleixner , Willy Tarreau References: <1515427939-10999-1-git-send-email-w@1wt.eu> <1515427939-10999-4-git-send-email-w@1wt.eu> Cc: linux-kernel@vger.kernel.org, x86@kernel.org, gnomes@lxorguk.ukuu.org.uk, torvalds@linux-foundation.org From: Dave Hansen Message-ID: <760b7264-1ae7-bcaa-6d20-f47cc7c7fce1@intel.com> Date: Mon, 8 Jan 2018 09:28:28 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On 01/08/2018 09:05 AM, Thomas Gleixner wrote: > On Mon, 8 Jan 2018, Willy Tarreau wrote: >> Since we're going to keep running on the same PGD when returning to >> userspace for certain performance-critical tasks, we'll need the user >> pages to be executable. So this code disables the extra protection >> that was added consisting in marking user pages _PAGE_NX so that this >> pgd remains usable for userspace. >> >> Note: it isn't necessarily the best approach, but one way or another >> if we want to be able to return to userspace from the kernel, >> we'll have to have this executable anyway. Another approach >> might consist in using another pgd for userland+kernel but >> the current core really looks like an extra careful measure >> to catch early bugs if any. > > I surely want to keep that as a safety measure. The entry code is simple to > get wrong and running with the wrong pagetables by a silly mistake and > thereby undoing the protection is surely not what we want. > > Need to find a free time slot to think about that. This does get immensely easier if we choose a mode at exec() (or fork() even) and never change it. The prctl() _could_ just be a flag to tell what your children should do.