Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752102AbbGRNoT (ORCPT ); Sat, 18 Jul 2015 09:44:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40022 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750925AbbGRNoR (ORCPT ); Sat, 18 Jul 2015 09:44:17 -0400 Date: Sat, 18 Jul 2015 08:44:15 -0500 From: Josh Poimboeuf To: Borislav Petkov Cc: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Michal Marek , Peter Zijlstra , Andy Lutomirski , Linus Torvalds , Andi Kleen , Pedro Alves , x86@kernel.org, live-patching@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH 04/21] x86/hweight: Add stack frame dependency for __arch_hweight*() Message-ID: <20150718134415.GA24587@treble.redhat.com> References: <0d8517b7ab757e00a13b3abe2b677d9eb23362be.1437150175.git.jpoimboe@redhat.com> <20150717171726.GA21568@nazgul.tnic> <20150717173220.GA12761@treble.redhat.com> <20150718050536.GA23478@nazgul.tnic> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20150718050536.GA23478@nazgul.tnic> User-Agent: Mutt/1.5.23.1-rc1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2386 Lines: 62 On Sat, Jul 18, 2015 at 07:05:36AM +0200, Borislav Petkov wrote: > On Fri, Jul 17, 2015 at 12:32:20PM -0500, Josh Poimboeuf wrote: > > Well, but this isn't some whitelist code to make stackvalidate happy. > > > > It's actually a real runtime frame pointer bug, and the rsp dependency > > is real. If it does the call without first creating the stack frame > > then it breaks frame pointer based stack traces. > > I think we can live with the stack trace being a little wrong in those > __sw_* variants. And besides, we're talking about the very very small > percentage of machines (which keeps getting smaller) which don't > support POPCNT. And from those, only for the cases where the arg is not > __builtin_constant_p() because there we do the __const_hweight* thing. > > I'd prefer to not clutter the code more in that case. Ok, so would you rather adding a whitelist to tell stackvalidate to ignore it? Something like this? diff --git a/arch/x86/include/asm/arch_hweight.h b/arch/x86/include/asm/arch_hweight.h index 9686c3d..d604691 100644 --- a/arch/x86/include/asm/arch_hweight.h +++ b/arch/x86/include/asm/arch_hweight.h @@ -1,6 +1,8 @@ #ifndef _ASM_X86_HWEIGHT_H #define _ASM_X86_HWEIGHT_H +#include + #ifdef CONFIG_64BIT /* popcnt %edi, %eax -- redundant REX prefix for alignment */ #define POPCNT32 ".byte 0xf3,0x40,0x0f,0xb8,0xc7" @@ -25,7 +27,9 @@ static inline unsigned int __arch_hweight32(unsigned int w) { unsigned int res = 0; - asm (ALTERNATIVE("call __sw_hweight32", POPCNT32, X86_FEATURE_POPCNT) + asm (ALTERNATIVE(STACKVALIDATE_IGNORE_INSN + "call __sw_hweight32", + POPCNT32, X86_FEATURE_POPCNT) : "="REG_OUT (res) : REG_IN (w)); @@ -50,7 +54,9 @@ static inline unsigned long __arch_hweight64(__u64 w) return __arch_hweight32((u32)w) + __arch_hweight32((u32)(w >> 32)); #else - asm (ALTERNATIVE("call __sw_hweight64", POPCNT64, X86_FEATURE_POPCNT) + asm (ALTERNATIVE(STACKVALIDATE_IGNORE_INSN + "call __sw_hweight64", + POPCNT64, X86_FEATURE_POPCNT) : "="REG_OUT (res) : REG_IN (w)); #endif /* CONFIG_X86_32 */ -- Josh -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/