From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933309AbaDVRET (ORCPT ); Tue, 22 Apr 2014 13:04:19 -0400 Received: from mail-vc0-f169.google.com ([209.85.220.169]:45982 "EHLO mail-vc0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932737AbaDVRER (ORCPT ); Tue, 22 Apr 2014 13:04:17 -0400 MIME-Version: 1.0 In-Reply-To: References: <5355A9E9.9070102@zytor.com> <1dbe8155-58da-45c2-9dc0-d9f4b5a6e643@email.android.com> <20140422112312.GB15882@pd.tnic> <20140422144659.GF15882@pd.tnic> <53569467.1030809@zytor.com> Date: Tue, 22 Apr 2014 10:04:16 -0700 X-Google-Sender-Auth: hKjtKjfTCtKu_-mWn5ijPEoMblk Message-ID: Subject: Re: [PATCH] x86-64: espfix for 64-bit mode *PROTOTYPE* From: Linus Torvalds To: Andrew Lutomirski Cc: "H. Peter Anvin" , Borislav Petkov , "H. Peter Anvin" , Linux Kernel Mailing List , Ingo Molnar , Alexander van Heukelum , Konrad Rzeszutek Wilk , Boris Ostrovsky , Arjan van de Ven , Brian Gerst , Alexandre Julliard , Andi Kleen , Thomas Gleixner Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Apr 22, 2014 at 10:00 AM, Andrew Lutomirski wrote: > > My point is that it may be safe to remove the special espfix fixup > from #PF, which is probably the most performance-critical piece here, > aside from iret itself. Actually, even that is unsafe. Why? The segment table is shared for a process. So you can have one thread doing a load_ldt() that invalidates a segment, while another thread is busy taking a page fault. The segment was valid at page fault time and is saved on the kernel stack, but by the time the page fault returns, it is no longer valid and the iretq will fault. Anyway, if done correctly, this whole espfix should be totally free for normal processes, since it should only trigger if SS is a LDT entry (bit #2 set in the segment descriptor). So the normal fast-path should just have a simple test for that. And if you have a SS that is a descriptor in the LDT, nobody cares about performance any more. Linus