Received: by 10.223.185.116 with SMTP id b49csp2244252wrg; Thu, 15 Feb 2018 08:39:35 -0800 (PST) X-Google-Smtp-Source: AH8x225Aoczjib4kvCWB6gO01zH0J9jBs6cbP7p+GDaEyLUbmH36TkJm4YrSc1mAZyz7QtzMZ2fb X-Received: by 10.101.81.12 with SMTP id f12mr2633071pgq.81.1518712775085; Thu, 15 Feb 2018 08:39:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518712775; cv=none; d=google.com; s=arc-20160816; b=x6o5Hm61M/hD8PCaDlqpa197uhGis0fsa9oID9Yp/8iK2Uye0NgHcWEe60pOCVW8sh f6Yon746ZsGqE8sDCcLdlZIfDGpkyKFNc4SLA+kGcRLANFCwXcFu6rtqkoI9NWpdchZL wbpfB/SXE/22nXmby6AKoMuNyAFU4AV+beLPAudCD++mXjyKUgB1SRrvC/vXV2Z9e1RQ bWXbAR4F3m9/csehKPzYOrXSq5UdGCpIjfPbd2RhRN1qYNMp9TXqAKMrV5iUCKdhme8B 47QcHeMXEk1eqGiB3k3r58kWGW1ULh5LgN83bkyLaanYoFhVYV+VyxEs6ylUeJtcR3uy JpLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=udcD01i3qlZvgzcbn0q6xWs3GJM4x7VTQFXftLUarQE=; b=vxT7M4v1D3POXArkFO3LYV8OzZkx3rCIdYjyAaBy8xgcOHok93Bq9CMNKA2bnkm1H8 vlriuPfIRoxE/P8ncAtRK3/vtFLwT6wG2oim6tVkhzcGZH9NoZf+agixhA3wWSefAUcY FJusiONDZ/cYNHCHInq3AEQOmoTiKtKL7cr30QVA5v9BTQKCqR12D4sOaIcMqi728Hju yR/l5T98HAGjjbNYcRJDBt8jwJba7Ck6L4fyje/np39zdLAe0WWrdcNH5w8AvtPjI2pV S/HlUwlKdyMZspi1GhKI7tENh/8eWRJW+x4jx4xTHyjX7i4/OCvFcMRkVN57xw9tzqti boMw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g4-v6si1736768plp.818.2018.02.15.08.39.19; Thu, 15 Feb 2018 08:39:35 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1426040AbeBOQg7 (ORCPT + 99 others); Thu, 15 Feb 2018 11:36:59 -0500 Received: from ex13-edg-ou-001.vmware.com ([208.91.0.189]:57791 "EHLO EX13-EDG-OU-001.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1426076AbeBOQgT (ORCPT ); Thu, 15 Feb 2018 11:36:19 -0500 Received: from sc9-mailhost3.vmware.com (10.113.161.73) by EX13-EDG-OU-001.vmware.com (10.113.208.155) with Microsoft SMTP Server id 15.0.1156.6; Thu, 15 Feb 2018 08:36:08 -0800 Received: from ubuntu.localdomain (unknown [10.2.101.129]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id D3B4C40B35; Thu, 15 Feb 2018 08:36:16 -0800 (PST) From: Nadav Amit To: Ingo Molnar CC: Thomas Gleixner , Andy Lutomirski , Peter Zijlstra , Dave Hansen , Willy Tarreau , Nadav Amit , , , Nadav Amit Subject: [PATCH RFC v2 6/6] selftest: x86: test using CS64 on compatibility-mode Date: Thu, 15 Feb 2018 08:36:02 -0800 Message-ID: <20180215163602.61162-7-namit@vmware.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180215163602.61162-1-namit@vmware.com> References: <20180215163602.61162-1-namit@vmware.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: None (EX13-EDG-OU-001.vmware.com: namit@vmware.com does not designate permitted sender hosts) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As we mask the 64-bit code segment in compatibility-mode, and since applications, most notably CRIU, might still use it, add a test to ensure it does not break. Signed-off-by: Nadav Amit --- tools/testing/selftests/x86/ldt_gdt.c | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tools/testing/selftests/x86/ldt_gdt.c b/tools/testing/selftests/x86/ldt_gdt.c index 1aef72df20a1..40b442e5c514 100644 --- a/tools/testing/selftests/x86/ldt_gdt.c +++ b/tools/testing/selftests/x86/ldt_gdt.c @@ -50,6 +50,11 @@ # define INT80_CLOBBERS "r8", "r9", "r10", "r11" #else # define INT80_CLOBBERS + +/* copied from asm/segment.h */ +#define GDT_ENTRY_DEFAULT_USER_CS 14 +#define GDT_ENTRY_DEFAULT_USER_DS 15 + #endif static int nerrs; @@ -907,6 +912,40 @@ static void test_gdt_invalidation(void) #endif } +struct far_jmp_addr { + unsigned long addr; + unsigned short seg; +} __packed; + +static void switch_to_cs64(void) +{ +#ifdef __i386__ + struct far_jmp_addr far_jmp_compat, far_jmp_64; + unsigned short ds; + + /* Poor's man detection of compatibility mode; */ + asm volatile ("mov %%ds, %0" : [ds]"=r"(ds)); + if (ds >> 3 != 5) + return; + + far_jmp_64.seg = (6 << 3) | 3; /* __USER_CS */ + far_jmp_compat.seg = (4 << 3) | 3; /* __USER32_CS */ + + asm volatile ("movl $.cs64_target, (%[target64])\n\t" + "movl $.cs32_target, (%[target32])\n\t" + "ljmp *%[jmp_addr_64]\n\t" + ".cs64_target:\n\t" + "ljmp *%[jmp_addr_32]\n\t" + ".cs32_target:\n\t" : : + [jmp_addr_64]"m"(far_jmp_64), + [jmp_addr_32]"m"(far_jmp_compat), + [target64]"r"(&far_jmp_64.addr), + [target32]"r"(&far_jmp_compat.addr) : "memory"); + + printf("[OK]\tSwitching to CS64 and back\n"); +#endif +} + int main(int argc, char **argv) { if (argc == 1 && !strcmp(argv[0], "ldt_gdt_test_exec")) @@ -923,5 +962,7 @@ int main(int argc, char **argv) test_gdt_invalidation(); + switch_to_cs64(); + return nerrs ? 1 : 0; } -- 2.14.1