Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753739AbcDVLfn (ORCPT ); Fri, 22 Apr 2016 07:35:43 -0400 Received: from mail-am1on0124.outbound.protection.outlook.com ([157.56.112.124]:6724 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751618AbcDVLfe (ORCPT ); Fri, 22 Apr 2016 07:35:34 -0400 Authentication-Results: virtuozzo.com; dkim=none (message not signed) header.d=none;virtuozzo.com; dmarc=none action=none header.from=virtuozzo.com; Subject: Re: [PATCHv5 3/3] selftest/x86: add mremap vdso 32-bit test To: Andy Lutomirski References: <1460388169-13340-1-git-send-email-dsafonov@virtuozzo.com> <1460987025-30360-1-git-send-email-dsafonov@virtuozzo.com> <1460987025-30360-3-git-send-email-dsafonov@virtuozzo.com> CC: "linux-kernel@vger.kernel.org" , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , X86 ML , Andrew Morton , "linux-mm@kvack.org" , Dmitry Safonov <0x7f454c46@gmail.com>, Shuah Khan , From: Dmitry Safonov Message-ID: <571A0C3F.8090807@virtuozzo.com> Date: Fri, 22 Apr 2016 14:34:23 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: HE1PR06CA0077.eurprd06.prod.outlook.com (10.164.28.173) To AM5PR0801MB1298.eurprd08.prod.outlook.com (10.167.216.149) X-MS-Office365-Filtering-Correlation-Id: 3d0617bd-adfd-4199-3254-08d36aa2358d X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;2:pQfp+X/l1a/+RHNkmV8724rLLbCgiCJ1DeuySztlP509mZrF8cPV4jjITxEFMqmKYiC3OpzkhXZLkvi0jZqGjp/lPJksKfL2Ep7GKBQUdya4QP9xgF9PbYgZ9+x2OsE8fSjcyCI3WaLvi634tp+2xLtRmJAq/4ghUEuQ8l5Hmj/sYdTUqPieUBojzOLGZSQv;3:2tt+ZFfAeuqyiZ4EPzJRJxUhRazIjzW0PQeZsycxlyiXCcYALnaIcSFbAwQ8pDFyntJh2ql7QS9sYiMY7S/q/cQq4aIX8awbYQn82+NJx6L1c5Vd45natQNTBO68hfo3;25:8WDkGWoS7FdrE8NNRFRh/pDnT/KbaQU77knOrG0dHhv+cWBDXT9vmbkmahZxtc8OMiR56HbWCBB6dl83+MPnfoBF2eeC1CtvJEHKivmB2CXjm+AyC+qvcYNQTRGaTuWQe5qoHvMi3uWzT+HUkKErPumTiWWjx9ETfaAJYexV9x98Ita8Pj+QPRS9XUvcuoH467QrM/dqbLbkv0N/iveQ6NzZBS2eyZNAxHdoYiI4CsyiBZmmffWce5Vf39Dju4VvBMTKn69XEeHqqZewjfKiZi5IN159yQZ51fL0OV2wNW0IGVroUQLknZuZwNRDXMt3KQBpvTOGK/t7dwpf8nqGwdLa/n8KVOVp5y+b7Nl32jqSKAuDS0k4bUwbpfyKw+dLGimhrS/fjByA05tfKdqSyZB9+MIFN/QrSHETQc0gFQMwnbhlH3gONamvExMYqA4APKjupaWeX88mHqCHDS5w8YSNmWtarPAaw5AEgOzfBSoroCprsD6Tcf+GkaYIgYpmMA7jHIoM8C9CxmyCNoeNiVwioZzZIkZbLTAKBYNkwgTTRBqpqFivFcLMT+odeIHkpBCyoF/FnmAhW9C+nR1fM+DnVke2WrFXx6s8qtiYt6zM4HD/nymkcT9BgDPxadre X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1298; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(9101521026)(6040130)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041072)(6043046);SRVR:AM5PR0801MB1298;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0801MB1298; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;4:SpDau7NLqMRp3tym1INK0qRpfwRMQJmc6VoJ7wO1jb5FJNaHToxXeBCLmzWcJIu0U6h6Dmc1Y9ake8VVNGHp9IvTz6Hzl7PKxNSlOnyGdw0IrT4gah222Qn19l9lMvPP9QOhXW6z25PYeza7ipXOrSjV53PFANwB6BUydZhUuqX6ZAE2B+Rcyd6ZPKLXjkykbdzCA7hYDVxkcUHkxhvOXUUhMFMZYv/YWBllp7kVSyi2LcSoHQCROKuevIQaKl4mErKf5gHtKnKlbuDe+rpJDuJiPo4PpTG4AYJnnDNoNUhHlRS+TbtHlgRWGnwwl5hrzKHqprnVRXykno8z0OR78+m7vxC0mbKwixFRm6yKLAAA5sc/NKrukUZbWdbIa++xaGSYEZYc5GoDTNnkVr8NU8vFcTYiPDbnJ/nrEjCNfz7MOjNYaw6fvqbe68gjiXK5lj3tdrhTTkMO3X+IbrUGgQ== X-Forefront-PRVS: 0920602B08 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(24454002)(377454003)(19580405001)(19580395003)(36756003)(80316001)(50466002)(81166005)(64126003)(33656002)(42186005)(83506001)(47776003)(65806001)(54356999)(87266999)(50986999)(76176999)(65956001)(66066001)(93886004)(230700001)(77096005)(3846002)(6116002)(1096002)(110136002)(189998001)(586003)(2950100001)(65816999)(59896002)(4326007)(2906002)(575784001)(92566002)(86362001)(5008740100001)(4001350100001)(23676002)(5004730100002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0801MB1298;H:[10.30.26.154];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDFNQjEyOTg7MjM6MFpVWXdxWmVZMEtFbmdtTjVMcHNCcThT?= =?utf-8?B?OEhzanliQnBhYlVDWTJwUEkyaDRKZTl2bitKWlA0cVVKdmwzUkhqR3JaWlg4?= =?utf-8?B?M0MxRkZIQmhEZzl1VFZhaVpCZ0lYNEdZazBCUXJLUVNabnBIQjlwUnZySUpk?= =?utf-8?B?UHBDR1V1ZStheGNVcXZwdnpOVDNBUDZQTHVHbERaS2dob3BxVWdFYjY0QnhX?= =?utf-8?B?aHpqdklIMWVoVGVFd0ZyN2pzS01hcnozb2g4ekhyNmVMdGwzYWowakw3eExz?= =?utf-8?B?OW0wUndSQ0p4aUZqR0dkSWpjQ2xFa05uYmRzQnBwTFRrbkRLNTRBQllrbVBa?= =?utf-8?B?dnp4ekRtMTkwVmhMK0MrUnZidWJKWGNucS9vam5JWFZkMnBkV0NpMEVFTjA4?= =?utf-8?B?Y2p0ZThQbklqTDNzeWlYamcrNUhXNlhKU3Y0QUp0SDc3V2pQY2pMTUMwdWQy?= =?utf-8?B?NG84TXNOMU05RWpURXZHOUllNWkzS0I1WnhqeDNzWHEybDhGUVQwRGk0cFdH?= =?utf-8?B?YWZ1d09SOExlYkhPRkdCdmJBeUI1S3h4ZTZmd0VSN2JiU1RvZTNXRFA5RUs2?= =?utf-8?B?SFd0ZTZYSTEwUnVHbnNpdk5nV05UZXpHaWhXNFRLdDNGenFLelZOU0pmancw?= =?utf-8?B?V3VRK3hTaE96YzRxTWhCWHUwc3YwWmtwR1FremtBT0htVEtzSXlyV1FZTFhx?= =?utf-8?B?RWZXNUM1MHBOQ1JGc3U5WEEwbEZnQUd5ZEloSDVLeWkvTnFRaEhWUWhyZVBR?= =?utf-8?B?TlI4YmpJU2psblQ5MVFYZzdRTVZLaDhnWGRCRWcveFp3Z1VOcld5cERDU3VG?= =?utf-8?B?eTB3ZmZVZkFTUVh2U2lUTU1jcXU3bmVWcDN2aWFibzBxanNPZS9rOVhQZzBJ?= =?utf-8?B?TXNGZ1loNy9nemxpbVhvclQ4NlE0Z2YxdTl1N2N5UXFmTWRjdHgzVTNwOWlw?= =?utf-8?B?eXlpK2ZWdHNCS3lYUkZuUStRMVZuM2ExekZPTG52eE1GdUpKOU12WllnRksr?= =?utf-8?B?TkZ3dUcwRWl4RytZUkZuWHpKOXI0UHJFamtFZVNlNVhFRlRPcFhoL2JXMksv?= =?utf-8?B?ZktONlhDZU1tUDlNS0phUm0yanN6TkppTHpKbW1YemZSem5lQUxhdHdML0x3?= =?utf-8?B?TzIwUEpaSkJ1TUFOSXNkR05kemVTVzBTb0UxZ3J2aXVScXJscW1KaWJDNHlo?= =?utf-8?B?akpHbjgrc1I4RWJlTXBkRUwyWjdGcEdqZ3lFdDZHRHV5eUFIdTdqWHNjZU9n?= =?utf-8?B?d3Nhbm00V09XbmtoQS8zNm9lTFFXWVlsaHI1Vm9CTEtONjUzc20veWdSVjhk?= =?utf-8?B?bmdiMnplcmQ5SURnMXkzeFI0ZHQ5UjdLSlRaWUZTZ1dteCtXNHVpZkFsbnJR?= =?utf-8?B?OS84Rk1NVzBveGFDRzllNU5mMUk3YUl0RjEyWGZTSENwOUNRUlJ5cFAvUVov?= =?utf-8?B?VjFNSm5rWG5yWmpqYS9jM2pHRXdXVG5qaUw3WEljZkZxUXRNdUtMNG9MMWk1?= =?utf-8?B?NHdMRlh6bXlWdmp6MUZ5aCtrRFpsRE5NMXZxTWNSM3pmUFNsNjhnV3FQaEZM?= =?utf-8?B?Rm5NQVl4V29EMVFPS2dUdUc2TE8wTmttZz09?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0801MB1298;5:hUJdJ3rNI53FL6y/XMqRiyrcTg+/+yNuPIlTBw87bcjO12BRrz+FzCrlu8vo4EqDNrjJezNHxWTOa4ASL7J/4NzRSMy+46ZfdVAVtolKs+WoPg760COv8I1Sslu2qQRfuoeNMbB7ogdFuAP9n4D2UoMIhRTIV0RqnO3hA7zkFN+s1F5df52UFymhIwDVftEX;24:oRSBB+iPDxe4D+Aux3JYrZpo+k2jQQN5EJ554KTK5A1mNlzWJ3TFngwL5y4OGXxnHJ/JhWRxBmVe+MFE72Ae/mmQxX2YAG/CiFBLrnKibek=;7:XaAMVOtvWQHDr8JXMpb39TsfIDAzqMXl2o6qie/C29BIo1+Mx4bprva7Qxnweg1KAwqmc7NWGsbbrvjz21DTP9rq68pF9LEduLYIqbgNnYh1SqoEgv1TqOiv+4bbjfYzUOPXX/L3ah+gw+nxQjrFtP4VgNQC45+R+RElm2jUjDHmDxN9ZFpmnta9eXN/XrYtYmutljabq0+a0sCL4PyBAUCe6t7cUya1LQRlSXw0VkA=;20:uwPcs1f9SZKX7Lz/LgQglE18yzD/1SjDSHyoD9iTwyWRtegUdbkLKqfUtrKj08Lkc7bidRIATFbYBzRDJUEV10CLpNSarMxdvkKrgW5HCyN9GgCdkPMaqIU5fv+NVllqbjY2v4HDJUkIlS5HMicKRMFSdAfghgMeD53ZBRiEQVY= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Apr 2016 11:35:28.7250 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1298 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5151 Lines: 148 On 04/21/2016 11:01 PM, Andy Lutomirski wrote: > On Mon, Apr 18, 2016 at 6:43 AM, Dmitry Safonov wrote: >> Should print on success: >> [root@localhost ~]# ./test_mremap_vdso_32 >> AT_SYSINFO_EHDR is 0xf773f000 >> [NOTE] Moving vDSO: [f773f000, f7740000] -> [a000000, a001000] >> [OK] >> Or segfault if landing was bad (before patches): >> [root@localhost ~]# ./test_mremap_vdso_32 >> AT_SYSINFO_EHDR is 0xf774f000 >> [NOTE] Moving vDSO: [f774f000, f7750000] -> [a000000, a001000] >> Segmentation fault (core dumped) >> >> Cc: Shuah Khan >> Cc: linux-kselftest@vger.kernel.org >> Suggested-by: Andy Lutomirski >> Signed-off-by: Dmitry Safonov >> --- >> v5: initial version >> >> tools/testing/selftests/x86/Makefile | 2 +- >> tools/testing/selftests/x86/test_mremap_vdso.c | 72 ++++++++++++++++++++++++++ >> 2 files changed, 73 insertions(+), 1 deletion(-) >> create mode 100644 tools/testing/selftests/x86/test_mremap_vdso.c >> >> diff --git a/tools/testing/selftests/x86/Makefile b/tools/testing/selftests/x86/Makefile >> index b47ebd170690..c7162b511ab0 100644 >> --- a/tools/testing/selftests/x86/Makefile >> +++ b/tools/testing/selftests/x86/Makefile >> @@ -7,7 +7,7 @@ include ../lib.mk >> TARGETS_C_BOTHBITS := single_step_syscall sysret_ss_attrs syscall_nt ptrace_syscall \ >> check_initial_reg_state sigreturn ldt_gdt iopl >> TARGETS_C_32BIT_ONLY := entry_from_vm86 syscall_arg_fault test_syscall_vdso unwind_vdso \ >> - test_FCMOV test_FCOMI test_FISTTP \ >> + test_FCMOV test_FCOMI test_FISTTP test_mremap_vdso \ >> vdso_restorer >> >> TARGETS_C_32BIT_ALL := $(TARGETS_C_BOTHBITS) $(TARGETS_C_32BIT_ONLY) >> diff --git a/tools/testing/selftests/x86/test_mremap_vdso.c b/tools/testing/selftests/x86/test_mremap_vdso.c >> new file mode 100644 >> index 000000000000..a470790e2118 >> --- /dev/null >> +++ b/tools/testing/selftests/x86/test_mremap_vdso.c >> @@ -0,0 +1,72 @@ >> +/* >> + * 32-bit test to check vdso mremap. >> + * >> + * Copyright (c) 2016 Dmitry Safonov >> + * Suggested-by: Andrew Lutomirski >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms and conditions of the GNU General Public License, >> + * version 2, as published by the Free Software Foundation. >> + * >> + * This program is distributed in the hope it will be useful, but >> + * WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + * General Public License for more details. >> + */ >> +/* >> + * Can be built statically: >> + * gcc -Os -Wall -static -m32 test_mremap_vdso.c >> + */ >> +#define _GNU_SOURCE >> +#include >> +#include >> +#include >> +#include >> + >> +#include >> +#include >> +#include >> + >> +#if !defined(__i386__) >> +int main(int argc, char **argv, char **envp) >> +{ >> + printf("[SKIP]\tNot a 32-bit x86 userspace\n"); >> + return 0; > What's wrong with testing on 64-bit systems? Ok, will drop this. >> +} >> +#else >> + >> +#define PAGE_SIZE 4096 >> +#define VDSO_SIZE PAGE_SIZE > The vdso is frequently bigger than a page. Ok, will enlarge this. Are two pages big enough? >> + >> +int main(int argc, char **argv, char **envp) >> +{ >> + unsigned long vdso_addr, dest_addr; >> + void *new_addr; >> + const char *ok_string = "[OK]\n"; >> + >> + vdso_addr = getauxval(AT_SYSINFO_EHDR); >> + printf("\tAT_SYSINFO_EHDR is 0x%lx\n", vdso_addr); >> + if (!vdso_addr || vdso_addr == -ENOENT) { >> + printf("[FAIL]\tgetauxval failed\n"); >> + return 1; > Let's make this [WARN] and return 0. The vdso is optional, and > getauxval is missing on many systems. Ok >> + } >> + >> + /* to low for stack, to high for lib/data/code mappings */ >> + dest_addr = 0x0a000000; > This could be make reliable -- map a big enough area PROT_NONE and use > that address. Oh, that's good, will do. >> + printf("[NOTE]\tMoving vDSO: [%lx, %lx] -> [%lx, %lx]\n", >> + vdso_addr, vdso_addr + VDSO_SIZE, >> + dest_addr, dest_addr + VDSO_SIZE); > fflush(stdout), please, for the benefit of test harnesses that use pipes. Will add. >> + new_addr = mremap((void *)vdso_addr, VDSO_SIZE, VDSO_SIZE, >> + MREMAP_FIXED|MREMAP_MAYMOVE, dest_addr); >> + if ((unsigned long)new_addr == (unsigned long)-1) { >> + printf("[FAIL]\tmremap failed (%d): %m\n", errno); >> + return 1; >> + } >> + >> + asm volatile ("int $0x80" : : "a" (__NR_write), "b" (STDOUT_FILENO), >> + "c" (ok_string), "d" (strlen(ok_string))); >> + asm volatile ("int $0x80" : : "a" (__NR_exit), "b" (0)); >> + >> + return 0; >> +} >> +#endif >> -- >> 2.8.0 >> > > -- Regards, Dmitry Safonov