From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753235AbbD0QK7 (ORCPT ); Mon, 27 Apr 2015 12:10:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46205 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753174AbbD0QK4 (ORCPT ); Mon, 27 Apr 2015 12:10:56 -0400 Message-ID: <553E5F69.1020809@redhat.com> Date: Mon, 27 Apr 2015 18:10:17 +0200 From: Denys Vlasenko User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Brian Gerst , Andy Lutomirski CC: Borislav Petkov , Linus Torvalds , Andy Lutomirski , X86 ML , "H. Peter Anvin" , Denys Vlasenko , Ingo Molnar , Steven Rostedt , Oleg Nesterov , Frederic Weisbecker , Alexei Starovoitov , Will Drewry , Kees Cook , Linux Kernel Mailing List Subject: Re: [PATCH] x86_64, asm: Work around AMD SYSRET SS descriptor attribute issue References: <5d120f358612d73fc909f5bfa47e7bd082db0af0.1429841474.git.luto@kernel.org> <20150425211206.GE32099@pd.tnic> <20150427085305.GB6774@pd.tnic> <20150427113506.GG6774@pd.tnic> <20150427154631.GB28871@pd.tnic> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/27/2015 06:04 PM, Brian Gerst wrote: > On Mon, Apr 27, 2015 at 11:56 AM, Andy Lutomirski wrote: >> On Mon, Apr 27, 2015 at 8:46 AM, Borislav Petkov wrote: >>> On Mon, Apr 27, 2015 at 07:57:36AM -0700, Linus Torvalds wrote: >>>> On Mon, Apr 27, 2015 at 4:35 AM, Borislav Petkov wrote: >>>>> >>>>> /* >>>>> * Change top 16 bits to be the sign-extension of 47th bit, if this >>>>> * changed %rcx, it was not canonical. >>>>> */ >>>>> ALTERNATIVE "", \ >>>>> "shl $(64 - (47+1)), %rcx; \ >>>>> sar $(64 - (47+1)), %rcx; \ >>>>> cmpq %rcx, %r11; \ >>>>> jne opportunistic_sysret_failed", X86_BUG_SYSRET_CANON_RCX >>>> >>>> Guys, if we're looking at cycles for this, then don't do the "exact >>>> canonical test". and go back to just doing >>>> >>>> shr $__VIRTUAL_MASK_SHIFT, %rcx >>>> jnz opportunistic_sysret_failed >>>> >>>> which is much smaller. >>> >>> Right, what about the false positives: >>> >>> 17be0aec74fb ("x86/asm/entry/64: Implement better check for canonical addresses") >>> >>> ? We don't care? >> >> The false positives only matter for very strange workloads, e.g. >> vsyscall=native with old libc. If it's a measurable regression, we >> could revert it. >> >> --Andy > > Another alternative is to do the canonical check in the paths that can > set user RIP with an untrusted value, ie, sigreturn and exec. It is already done only on that path. Fast path doesn't check RCX for canonicalness.