Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933125AbeAJH3d (ORCPT + 1 other); Wed, 10 Jan 2018 02:29:33 -0500 Received: from wtarreau.pck.nerim.net ([62.212.114.60]:39318 "EHLO 1wt.eu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932359AbeAJH3a (ORCPT ); Wed, 10 Jan 2018 02:29:30 -0500 Date: Wed, 10 Jan 2018 08:29:00 +0100 From: Willy Tarreau To: Ingo Molnar Cc: linux-kernel@vger.kernel.org, x86@kernel.org, Andy Lutomirski , Borislav Petkov , Brian Gerst , Dave Hansen , Linus Torvalds , Peter Zijlstra , Thomas Gleixner , Josh Poimboeuf , "H. Peter Anvin" , Kees Cook Subject: Re: [RFC PATCH v2 3/6] x86/pti: add a per-cpu variable pti_disable Message-ID: <20180110072900.GC14066@1wt.eu> References: <1515502580-12261-1-git-send-email-w@1wt.eu> <1515502580-12261-4-git-send-email-w@1wt.eu> <20180110071951.t4vbwlnlw2qycnpm@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180110071951.t4vbwlnlw2qycnpm@gmail.com> User-Agent: Mutt/1.6.1 (2016-04-27) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On Wed, Jan 10, 2018 at 08:19:51AM +0100, Ingo Molnar wrote: > > * Willy Tarreau wrote: > > > +#ifdef CONFIG_PAGE_TABLE_ISOLATION > > + this_cpu_write(pti_disable, > > + next_p->mm && next_p->mm->context.pti_disable); > > +#endif > > Another pet peeve, please write: > > > + this_cpu_write(pti_disable, next_p->mm && next_p->mm->context.pti_disable); > > or consider introducing an 'mm_next' local variable, set to next_p->mm, and use > that to shorten the sequence. OK. > More importantly, any strong reasons why the flag is logic-inverted? I.e. why not > ::pti_enabled? For me it's a matter of default case. Having a "pti_enabled" flag makes one think the default is disabled and an action is required to turn it on. With "pti_disabled", it becomes clearer that the default is enabled and an action is required to turn it off. While it causes a double inversion for the user due to the temporary choice of prctl name (we could have ARCH_SET_PTI for example), I think it results on more readable code in the sensitive parts like the asm one where these tests could possibly end up inside #ifdefs. If we had "pit_enabled", something like this could be confusing because it's not obvious whether this pti_enabled *enforces* PTI or if its absence disables it : #ifdef CONFIG_ALLOW_DISABLE_PTI cmpb $0, PER_CPU_VAR(pti_enabled) jz .Lend\@ #endif But this is open to discussion of course. Willy