Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967542AbdCXU2X (ORCPT ); Fri, 24 Mar 2017 16:28:23 -0400 Received: from mail.kernel.org ([198.145.29.136]:47742 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756168AbdCXU2S (ORCPT ); Fri, 24 Mar 2017 16:28:18 -0400 MIME-Version: 1.0 In-Reply-To: <20170324202242.GA5680@worktop> References: <20170324142140.vpyzl755oj6rb5qv@hirez.programming.kicks-ass.net> <20170324164108.ibcxxqbhvx6ao54r@hirez.programming.kicks-ass.net> <20170324172342.radlrhk2z6mwmdgk@hirez.programming.kicks-ass.net> <20170324202242.GA5680@worktop> From: Andy Lutomirski Date: Fri, 24 Mar 2017 13:27:49 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: locking/atomic: Introduce atomic_try_cmpxchg() To: Peter Zijlstra Cc: Dmitry Vyukov , Andrew Morton , Andy Lutomirski , Borislav Petkov , Brian Gerst , Denys Vlasenko , "H. Peter Anvin" , Josh Poimboeuf , Linus Torvalds , Paul McKenney , Thomas Gleixner , Ingo Molnar , LKML Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1078 Lines: 28 On Fri, Mar 24, 2017 at 1:22 PM, Peter Zijlstra wrote: > On Fri, Mar 24, 2017 at 11:45:46AM -0700, Andy Lutomirski wrote: >> After playing with it a bit, I found some of the problem: you're >> passing val into EXCEPTION_VALUE, which keeps it live. If I get rid >> of that, the generated code is great. > > Right, so I needed that because I land on ud2 through 2 different paths: > > - newly saturated > - use-after-free > > And the exception handler can figure out which of the two by looking at > the variable, but then of course, it needs to be life. > > For the full horror of how to do this, look here: > > http://paste.debian.net/924190/ > > But I didn't just show you that, so you can't blame me for any damage > that might've done you. Wow, that's horrible. Could this not be done by looking at flags instead of regs? For that matter, you're effectively comparing to -1 and 0. I'm not really sure it would be faster, but you could plausibly add one then subtract one again and get the full picture just from flags and a single comparison?