Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030822AbbDWTut (ORCPT ); Thu, 23 Apr 2015 15:50:49 -0400 Received: from mail-qk0-f177.google.com ([209.85.220.177]:36137 "EHLO mail-qk0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030609AbbDWTus convert rfc822-to-8bit (ORCPT ); Thu, 23 Apr 2015 15:50:48 -0400 MIME-Version: 1.0 In-Reply-To: <20150423185202.GQ28327@pd.tnic> References: <5538C1C5.7010408@redhat.com> <20150423101840.GC28327@pd.tnic> <5538C8E3.60009@redhat.com> <20150423104401.GF28327@pd.tnic> <20150423171440.GP28327@pd.tnic> <20150423185202.GQ28327@pd.tnic> From: Denys Vlasenko Date: Thu, 23 Apr 2015 21:50:26 +0200 Message-ID: Subject: Re: [tip:x86/vdso] x86/vdso32/syscall.S: Do not load __USER32_DS to %ss To: Borislav Petkov Cc: Andy Lutomirski , Denys Vlasenko , Brian Gerst , Steven Rostedt , Oleg Nesterov , Ingo Molnar , "H. Peter Anvin" , Linus Torvalds , Andy Lutomirski , Will Drewry , =?UTF-8?B?RnLDqWTDqXJpYyBXZWlzYmVja2Vy?= , Alexei Starovoitov , Linux Kernel Mailing List , Kees Cook , Thomas Gleixner , "linux-tip-commits@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1823 Lines: 70 On Thu, Apr 23, 2015 at 8:52 PM, Borislav Petkov wrote: > On Thu, Apr 23, 2015 at 11:24:14AM -0700, Andy Lutomirski wrote: >> That nails it. We really do leak segment limits to other tasks on AMD >> chips. I see at least two questions we should answer before fixing >> this: > > Ok, WTF is going on?! Even this trivial test case causes a Bus Error: > > --- > static unsigned short GDT3(int idx) > { > return (idx << 3) | 3; > } > > static void *threadproc(void *ctx) > { > printf("Hello world\n"); > return NULL; > } > > int main() > { > pthread_t thread; > if (pthread_create(&thread, 0, threadproc, 0) != 0) > err(1, "pthread_create"); > > while (1) { > usleep(1); > } > > return 0; > } > --- > > $ make sysret_ss_attrs_32 > gcc -m32 -o sysret_ss_attrs_32 -O2 -g -std=gnu99 -pthread -Wall sysret_ss_attrs.c -lrt -ldl > sysret_ss_attrs.c:23:23: warning: ‘GDT3’ defined but not used [-Wunused-function] > static unsigned short GDT3(int idx) > ^ > $ taskset -c 0 ./sysret_ss_attrs_32 > Hello world > Bus error > > in dmesg: > > [ 583.389368] traps: sysret_ss_attrs[2135] trap stack segment ip:f7784b87 sp:ffb640c0 error:0 I reproduced it. I also confirm that the patch fixes it. In fact, the simplest reproducer is int main() { while (1) usleep(1); return 0; } - no threads necessary. You only need to do a lot of sysret32's, and eventually it happens. If you omit -m32, it doesn't happen. -- vda -- 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/