From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751574AbcDFQpI (ORCPT ); Wed, 6 Apr 2016 12:45:08 -0400 Received: from mail-db3on0115.outbound.protection.outlook.com ([157.55.234.115]:48342 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750973AbcDFQpG (ORCPT ); Wed, 6 Apr 2016 12:45:06 -0400 X-Greylist: delayed 879 seconds by postgrey-1.27 at vger.kernel.org; Wed, 06 Apr 2016 12:45:05 EDT Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=virtuozzo.com; From: Dmitry Safonov To: CC: , , , , , , , , , , , , <0x7f454c46@gmail.com>, Dmitry Safonov Subject: [PATCH 0/2] x86: add arch_prctl to switch between native/compat modes Date: Wed, 6 Apr 2016 19:29:28 +0300 Message-ID: <1459960170-4454-1-git-send-email-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: AM4PR01CA0012.eurprd01.prod.exchangelabs.com (10.164.74.150) To DB5PR08MB0983.eurprd08.prod.outlook.com (10.166.13.154) X-MS-Office365-Filtering-Correlation-Id: 13408354-c0f2-4cff-1cbb-08d35e38bf6f X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0983;2:YP8Z32sKez84p2TeK4D9n3N5F0dyMO64zvIUZKJ3m1T87vI1Ead9NjW20sEVd8Deq+/vNd/6PS7zK9tCLSHOW71iJhw4sQRJMpsKKBsIDqn83YF9epquPz6yX4gE7vWGcGLwZ0Wnd/zQknSsXCpTY3lZsXoZi13y163/VU52aUU3lCM0ya8XczKfliv3aN/p;3:wIy9J5h/dcV6Ermp8dviljtE8lVN7GexBLJ2tto9m+0tzkfoSBxnp6AEFNPp5uL4N3ojCdmi39IR49xgNBYoxSnsBTOzaWUSObO4C1zMUZqwalHQf2NhRvGPXofb5qx7 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR08MB0983; X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0983;25:1k5Zoo0D2N8o+vic3r5MVAsiFwkA9osPPXuJLN9vsxS2dRVWJfJD9mKKp7a0r8YWUWJoP+k4lXmPs2p6vRixQhYHx3BPZ536wDgV/1KFHhd8cXf79dx/kSphd9leTDwnIB96LkmbdgJ3lXrYcYrBRwjGqvcohtDEvWXri7XVPbfCquoWadfppBBZxphleRUrEXWQgO2B/d3AMcXv0wb3Npx9gkfe5nZgnb4d4ICpGw1FFGBlbQgdgIWUh3S2H0HIxRkb8Ciewzm5fUfloHjzd6hbFBVWcQRJ8Cpn8WGpZHSw85/2aTNeXsVxLaMBF36KEzS6+GIaOir+858pX490go+qKF+Ctjcd1cxkk3sMyvKLQHHkEcvsWVP85Y24+nzMRsvtiduB+UbcJMJ7hOsclRdZ9vz7nRTt9Wt61pekAcLcEd4scJiH4KLwQi6T9ISVrIMd8ZLsZRxsBQ3OvNhiq502G+MS1IREPR39GbNQVEr93DISVJDPaimGmiRs19JeJKc3I/81uaDS2969UTCNe5UdhXUd3qCFWY8pJ68Dpvar+IZK4ZwXJUN6BFQfPiCbtrIgSjyxDWjMG3vX4JnXvzotANPaQStS9oQf9Z9UW2WAPrRaMzimxpokHxlIvvB42aaqSvAxwqUCYhpjHYKk27qmdGgLXSZURsDRJuphPtw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040074)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041046)(6043046);SRVR:DB5PR08MB0983;BCL:0;PCL:0;RULEID:;SRVR:DB5PR08MB0983; X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0983;4:/Kcz5GJOvMLY/LYOVguGrZiTemfu37v+4ntX6lwL5pgbaNa6Kb0tngQfPchW0bM+WcbqsYdg2j+BlAcrLCRi7FAofSVBh+Aw94S2xbXtfs+Jf1EGAEUJHkpkmZVK+AwTLxJU9G9N0l/GY3pjWSkfYy1wQz1YXHQHnLqKm4Oecl/4PFUnQ/Q02ES9W3SFqKYtZhX7QrVriISY0U1QkxecoQZ7O4G0mCckRH55j8TRy8CkOLSV0l7rSnxgpB++xeGeWuyndiCkISwQDF2Eyxz2lY5la54BxnhCi5HXjeDJ8BJlJyTFG0a399xEpJmGuIZtb4Ih/Zb2p7/1qlCkvhV0I7XDeI6sKrxuShSrzFGIj0STPZCysd5O+qTINCd0bNpu2FdJoec4tHy5lCAEEtmeTM3VvaHbMNbe4wKr8BVO8y0= X-Forefront-PRVS: 0904004ECB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(189998001)(48376002)(5004730100002)(81166005)(50466002)(19580395003)(86362001)(110136002)(42186005)(66066001)(15975445007)(107886002)(36756003)(4326007)(92566002)(53416004)(3846002)(2906002)(586003)(50986999)(77096005)(1096002)(6116002)(5008740100001)(229853001)(4001430100002)(5003940100001)(33646002)(50226001)(2351001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB5PR08MB0983;H:dsafonov.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0983;23:qURGEIkZscNMAm5eHsMFP52EY9i1iqd7smpY9jqhheKtd8kbJUEFU/fXHVvtcgsQWak/G3FPqPloOCvTN2JH82oDQuTYR6t7oXIj/J7upar1WatNN0B8pwSro8eQEc+rAoY/BwJc+v/dz3fjDXgHsA8lUNdAhZ8QUlU+gneo4TBwBtrdexVn/JnfbghIjT1e797gaCoUZJ6O16ZdVhrxrHt4FKBGdpyVKhVs6QeJbL6+oN4wR38YaSxHXzLX/eTMTmDwMxen+NXIotTMpuTusobUdCOoM993TjKVlTolV2Gnn4Yd6b4rEPKxwZ5lYCEtPWANmL7dLIHqeLQdQkLj9smNlUuUfBjWdIm2O7y3AHBMrb01C5mBx+//b6r9B0WTLns+fI5s0W3LQzJgsZpfB23+dyiX4Otd59KLvDjSU11sHaBaI1Syw3+WjY0zI4UsoP132uokL20It2q9ircKghOhY9DkKRK7UlnJUukQ6vCFv128c8/yDhugchusG6Vq/GhFDqn3ShNJ/jYbTcI1DZ3qLYusYaiUSryuIVqhRuaamFHJ/qMJ3VxzFPFcHagC6fTEKk8DKbeegQRPcrYLsSXSMzPyfzySJI/SInLvjj9cmSu0nW1Y27rjsqD4j1R7w2vUOQITsARrUnG2yuRaqZjuInoxBtS+3lLIbkER5LzuhwZWoYi9PRKUN5UeKpqGLfz6zNmzUXHfTg15rw3TzWulaosoUi1ETABuFE1FJ5WuWTmEslbgLKyHzywGxW19qhjTWEkudmUldhbJOXERBXBNAr2XulSbwIId2d3a6wUYxsMvb/uoImURhVo6OqQetDZjnxY48Q4r+h/e/ptNbuk+V9FgGCuO/Mwi42sXuWNJkXCtExP4Od0w9Sp90jkcCr0lksxSoSd20se6l5jtMQ== X-Microsoft-Exchange-Diagnostics: 1;DB5PR08MB0983;5:UqgYh/HfwB9YUlVLyfxHUrS3xhcEwVc9NkawMf7Yx7/25YjMy8LqNpW4xhcQwNy2axPNh9qCXngEq+zCWYzb3N7K3vXK++DdZ1iqyiwSgRkTPAigKA/BB1edlUv2Pd4sA461BqkdmWgF3XSX+GT7Aw==;24:/VjPIN1BpukYcblkGS/Q61dkOPsHHN+7TyF9H1yBJv9Cfke/Uz/5rF3eD3yd64SUGjjVxiYJ22kGC2TSa2AOkIkD1XeQEiipvJpim5eeagM=;20:vMmVdjYUPzZP4Jl39DwdrHuxSXoZEJqsWth0c3cmSFNRy+/F5z+nVLh7ZYEBdTySMV8l7mrHGxf+NN1pIO57w5GIpCZS4DR8LKzmf6hPhlVEQUqPsKbsYkaSHNP5ZOtfZo13DvvLoRIgwOLE/33SSmnCi8IylWxNS7l+aetecto= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2016 16:30:19.9937 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR08MB0983 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With those patches it becomes possible to tell the kernel in which mode current task is. I need it for compatibility process C/R: restorer is native x86_64 process, that maps vmas, restore task parameters, does clone to add threads and so on. To restore 32-bit application, that runs on x86_64 (in compatibility mode), I need to set proper CS selector for USER32_CS and tell the kernel, that the process is now in compat mode. Switching selector isn't a hard task (and it's done in other selftests with long jump/lret). This patch makes possible to tell Linux kernel in which mode you are. I also did vdso/vvar blob remapping on compat <-> native switch. This part isn't really needed by CRIU, as on restore stage we already have dumped vdso/vvar vma images. So, this part is for other processes that may need to switch their mode. (I will drop this part if no one else needs this possibility). I add a selftest and I did CRIU branch that uses this to C/R 32-bit processes: https://github.com/0x7f454c46/criu/tree/compat-2 There are dozens of patches there and I will prepare them for CRIU master branch after mainstreaming this switching patch. Dmitry Safonov (2): x86/arch_prctl: add ARCH_SET_{COMPAT,NATIVE} to change compatible mode x86/tools/testing: add test for ARCH_SET_COMPAT arch/x86/entry/vdso/vma.c | 76 ++++-- arch/x86/include/asm/vdso.h | 5 + arch/x86/include/uapi/asm/prctl.h | 6 + arch/x86/kernel/process_64.c | 87 ++++++ tools/testing/selftests/x86/Makefile | 1 + .../testing/selftests/x86/arch_prctl_set_compat.c | 295 +++++++++++++++++++++ 6 files changed, 453 insertions(+), 17 deletions(-) create mode 100644 tools/testing/selftests/x86/arch_prctl_set_compat.c -- 2.7.4