From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751973AbdJYXL0 (ORCPT ); Wed, 25 Oct 2017 19:11:26 -0400 Received: from out4-smtp.messagingengine.com ([66.111.4.28]:56807 "EHLO out4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751753AbdJYXLV (ORCPT ); Wed, 25 Oct 2017 19:11:21 -0400 X-ME-Sender: Date: Thu, 26 Oct 2017 10:11:16 +1100 From: "Tobin C. Harding" To: "Jason A. Donenfeld" Cc: kernel-hardening@lists.openwall.com, "Theodore Ts'o" , Linus Torvalds , Kees Cook , Paolo Bonzini , Tycho Andersen , "Roberts, William C" , Tejun Heo , Jordan Glover , Greg KH , Petr Mladek , Joe Perches , Ian Campbell , Sergey Senozhatsky , Catalin Marinas , Will Deacon , Steven Rostedt , Chris Fries , Dave Weinstein , Daniel Micay , Djalal Harouni , LKML Subject: Re: [PATCH v7] printk: hash addresses printed with %p Message-ID: <20171025231116.GC12341@eros> References: <20171025222727.GB12341@eros> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Mailer: Mutt 1.5.24 (2015-08-30) User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Oct 26, 2017 at 12:59:08AM +0200, Jason A. Donenfeld wrote: > On Thu, Oct 26, 2017 at 12:27 AM, Tobin C. Harding wrote: > > How good is unlikely()? > > It places that branch way at the bottom of the function so that it's > less likely to pollute the icache. > > > It doesn't _feel_ right adding a check on every call to printk just to > > check for a condition that was only true for the briefest time when the > > kernel booted. But if unlikely() is good then I guess it doesn't hurt. > > > > I'm leaning towards the option 1, but then all those text books I read > > are telling me to implement the simplest solution first then if we need > > to go faster implement the more complex solution. > > > > This is a pretty airy fairy discussion now, but if you have an opinion > > I'd love to hear it. > > I don't think adding a single branch there really matters that much, > considering how many random other branches there are all over the > printk code. However, if you really want to optimize on the little > bits, and sensibly don't want to go with the overcomplex > workqueue-to-statickey thing, you could consider using a plain vanilla > `bool has_gotten_random_ptr_secret` instead of using the atomic_t. The > reason is that there's only ever one single writer, changing from a 0 > to a 1. Basically the only thing doing the atomic_t got you was a > cache flush surrounding the read (and the write) so that assigning > has_gotten_random_ptr_secret=true would take effect _immediately_. > However, since you might not necessarily about that, going with a bool > instead will save you an expensive cache flush, while potentially > being a microsecond out of date the first time it's used. Seems like > an okay trade off to me. (That kind of cache latency, also, is a few > orders of magnitude better than using a work queue for the statickey > stuff.) Awesome. Patch to follow. thanks, Tobin.