Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754516AbcL3QPA (ORCPT ); Fri, 30 Dec 2016 11:15:00 -0500 Received: from mail-db5eur01on0105.outbound.protection.outlook.com ([104.47.2.105]:14658 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754186AbcL3QO4 (ORCPT ); Fri, 30 Dec 2016 11:14:56 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; From: Dmitry Safonov To: CC: <0x7f454c46@gmail.com>, Dmitry Safonov , "Thomas Gleixner" , Ingo Molnar , "H. Peter Anvin" , Andy Lutomirski , "Kirill A. Shutemov" , Subject: [RFC 4/4] x86/arch_prctl: add ARCH_{GET,SET}_TASK_SIZE Date: Fri, 30 Dec 2016 18:56:34 +0300 Message-ID: <20161230155634.8692-5-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20161230155634.8692-1-dsafonov@virtuozzo.com> References: <20161230155634.8692-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: VI1PR09CA0080.eurprd09.prod.outlook.com (10.174.49.152) To HE1PR0801MB1740.eurprd08.prod.outlook.com (10.168.150.7) X-MS-Office365-Filtering-Correlation-Id: 1867fd15-b2a7-4e85-54ff-08d430ccf471 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:HE1PR0801MB1740; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1740;3:IH1z2sTh4UM3qwJlQ4hI45yB3G4LBoLN9ILdxMEmM5jNliGWR75/LlYGDpoIpymWnJ35qFaPPU3LJcOB+tqYCrpLS0WiLaVYtunf5uNJBZiSP0/Jxvp+rYgts5W0j+/xQ0Jf9I3z3oo2l8f1ON+15rH8Vo3FKPR8hPByyHIE/Q8BMQ1L0V1mFpezU8HwFG3S9wt1G77Kux5jvFsVl5wxMTk7L+mqWL9QZ/U7TEAJ2Sq0YIRF/kxTKpHaRhCXM/0hJqv3KnrSrV64JjtTSqZXuQ== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1740;25:DKRqB9KGOJ3Tj3QppMeEnB/ntOSnkHWnDYW2X9VdPcf25zwimK8A8Jlk8ACSnhe/pw0iOGMlDWyg8saoMAp92l+4MNtOK7NxvEVHs9rtA9WIXpiyzS3vGdB4tLPde1W6eNpcph5GoNORlILHCD2XxsRhGr9zl3BPFn3iLe8WF78bSRf3l8ts+lrF7D2e2prlO9J36Ex4RXDKw4E8CUfKGJBvqqJYi0VNKu4EeGUu7NptXDL3D85GfzZH5npXTtozvbKQK5JhIh1AbSd4IFqRiz2GbfxkvMcV5AKjRlT3dX0Rxx4O9/JYco9QcT7R0cXHwbC1ZdjiO8bgl+tah+7K4bnR8J5nexV69VFgbCklCU0WNQDS9l5XOgfdCp7h/QsvrnRQeLjEa/UROZVr2ndYC6Cx6OsL1kkVfZEXSR+H6Qedu2/c5FZabA3glWlnRjoP4vyH017OM8bhucv3sHIQ8FyohvPdOSLVT5E/vcjzEXxYXVFSMrpeDYw0u0khtJkuCu4XCJiJOEPbeg8pCvI4ysyGvhOgflUkTG/DIlp3TTFSQL5Lth3ZgtATvDFwCQgphTvl8BNImY7npafjmIicYktH/AZQQsIJyopwr2EwQJzAvam6H7aEJNH2FA+GQ34ixokCzvQkU5KE7Fdvh9rNoYYR+hYxCMhAg1BN/mPW7MnZ+UdxTFT0zoa3JN21QUYukVcUyIXz998aSnlJFv4A1KPgOeCaQEY1QImL4LxULA0pPJIwTiDwiTvrqgNEziRK X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1740;31:Bxi0A2v/nigFAvwtHDMroHKqyeq9i0ok5AcrND1kjSugzWhDfFKowBziE/mwYQkf+rtMHEBENTA0oe6MAQc+rOu5SgWBMS10Jgs04DjjL7ynvP/1HnfXt0vxCS1Uyl203HMwBgP5ULJTMC2UnJRIPoWYCJmZNAhQ7ecBTuzTTB/s4g/3d2lnMXD7uiWylehh7xY6nMyim0EyoX2G+aHKyewi2e3pQCMmAAY2EbyT4jeJHipDRiarn/0PQJE9y3q5;20:hNReTYVpQZP/MloZIpxEYSTX7GrtDyMkKKZSYCcE71rTkHwS/CIUPcly4TXqPsb277cCX0ffc7Sioi3mHc1fbqOjI61ZWYA3zNnnOIn4Qzut2A7fvfUrC3v4trrRFiWG0QLsRdYwLP+pfwV6/WOiSTCQ9nOt0f1jMY8R9E93MazjErDFZWaULX7D0qGnsrzBBrJWo0Epg4QyI501vRf6tkpQm5hSg0jwkgP+nxGOLvvR7eImJSLRWRF8GzKHvgxv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123555025)(20161123560025)(20161123558021)(20161123564025)(20161123562025)(6072148);SRVR:HE1PR0801MB1740;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1740; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1740;4:VIav6aTHzCnktoWwLOf4p5UVGqexzWCXU70QMoQFipBFmN6M/705fR94wp1loBCc3r5E9YksNixQ2IesPJN3t2D0m/JfvZVt6XGPKPrYu+AYG7PiRsgnmXN5sXK/nyBOY1i6hbiPEk4KM7oiW7i1t9zBqVWLRSRCV/CHhbf6vss9K+fiPT1L3rFhPvPVF0d2d2f7fkX8lKnMA8a9RxNmvzsIjsJA8UB2VnZrFrtd3IHCv70uUWCKO5CdH2MZkNem1DhyZhpVl5HvRyXOXjfbG4J/8eaSg6kqRKR107LvP83AJny/KqxFOuNxQxlwQedS7EwC8/x3zJk5FbIUIr+7GGzMBzhZEIEvW9r9IpSb7huolViqfF5AX/gLKB1aYtZC+d/RgHQVTijeaj3wNOKMyTvxfAs6T0kclItvKUngX3JCUy/GlMjdasI28L7sT/vZQQqHnWZ3h4fY8zDAfNRcYB4C5Ki/JJgAbsYUewQ3qCLKd+w1Hu56VunM7FGEE+mcJGit0ZEDWN7KYbCqyq63RxSqagDyBv4Taox82OxMPyB5fPgAkIGdnD6bSLvYl7DTM6ZviVImCVpMKTuJ70QSOktwmX9a+6zP0Y6DkbMukIZ8k3Bie33JkKYx8B/YIJugVTwybc0m9WHDrzsMwU9WJA== X-Forefront-PRVS: 0172F0EF77 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(39450400003)(199003)(189002)(36756003)(81156014)(50226002)(2950100002)(6666003)(6916009)(110136003)(5003940100001)(69596002)(66066001)(6512006)(81166006)(101416001)(68736007)(8676002)(47776003)(25786008)(76176999)(86362001)(50986999)(106356001)(33646002)(92566002)(6486002)(5660300001)(2351001)(189998001)(53416004)(38730400001)(42186005)(105586002)(305945005)(1076002)(6116002)(97736004)(3846002)(39060400001)(2906002)(48376002)(7736002)(50466002)(4326007)(6506006)(142933001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1740;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR0801MB1740;23:saQdQkfj4XkT3B40a36nWB93uvhkLJxI4YeGV4D?= =?us-ascii?Q?SvOtb6n5rEpJy1Y1zbm6OOfeWNr89FTOoESMmxJUZ2GrLsGQ5dCVgNlapKkS?= =?us-ascii?Q?zUw5ylTl9QJ38dvn1KfT5jbivHoCzsOaP2t38/ACPnhy88h6S+EpBdFV4k5r?= =?us-ascii?Q?NwhB/Qs6LJkaIMfP8WtlKjzrZwKssgIEjkZ3Nu0ArdhjALPJn81f0Q/TL+7s?= =?us-ascii?Q?wDvCcsqQ6ZIoaSQLSAZjNWms+bx06oVkZgqmEh7byLCGdf+NXDAebUzwFVVz?= =?us-ascii?Q?pxKf/8GksRwiog3BLN3KFqYPmHG19N6usoPqe/vkkyugcv6TpOaFZ6MuVX8W?= =?us-ascii?Q?jKNkm54QRSg1i0AXRutpSfQMyBNsolQpAsex3kX3ZscO2anTgSTJhQkXF49+?= =?us-ascii?Q?na3GzUx6C839PVu5nB0IGjTG56taHqCiPGy1HdRinl8Oo0LAgd2dTfFCez6i?= =?us-ascii?Q?hTE/8gconNUJBo5BGNmk7E8wOXNmQGGuk3BXDDu2z/PshIMQLmJKNGabGMtp?= =?us-ascii?Q?i4EzPgX6W3mLCIzokS27St80XW7qnrEObiCKMVO1SdkaNYTQCj0KlxXAp4hT?= =?us-ascii?Q?/vrKSzZyngLTfnPWWuSWbpqWWNLPf/7Mg4Ee162sIxKAEbNrOQPDE09ER+0f?= =?us-ascii?Q?pYITXOPSFtOf7oC/CvQVaLBj38HGjRR8VNgOQ/uVY6UG25sThIiMy8QUWbph?= =?us-ascii?Q?X0EfWZcpiPFtK1yJ8xHkN72VQY8/PivmwieT8+2iepkMVRMRlvABNZpyW7rW?= =?us-ascii?Q?i0Iva/Fhkd9rmDraIBidBrT43PUYtVf+rrtbOCvPUqZta0AuxzgKaPd1ZWmr?= =?us-ascii?Q?ooKR9tHdfVx88JjPshAQyLzC/gg1y6B50y9pmHG4ShMtEfyv8I8LQL4/uhVo?= =?us-ascii?Q?QO4kUcQqFvbVHilqG0dmXtcbGCB/RdWfsiHv+VTNSrM/Qfu/4ELjqJN6IUwp?= =?us-ascii?Q?e8gFL1vtYI7MChwjEblO2Cr7URJZrEyRSL0K1uHqKsb45CIepisl9fJ1PxVW?= =?us-ascii?Q?wiXYhlFb4dspWyPWLIE3efiAk/ycV3QzZbTEA9XTXEaHUI2X8y9vzOOMH3nP?= =?us-ascii?Q?t1E1Aa62R0Sky2qPNpnI3SaoBKyRTAf3G5+G/s+uTV/IfipXTibqtaf+1fwl?= =?us-ascii?Q?06OKBOF61n0SYVGdZBkEJzI1sGwSzmGllqkTmKH6UCYZlyDcJJ0fGT4+bnUr?= =?us-ascii?Q?bMA7sKydMMYHHwnojhQ+0+ld8ZuOQpQ2znPoT?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1740;6:DU6d1ou9wbQtnynWqiPJ4Lbo/cnmpmL/XP3XTGnS3m2EV9Ei6SyioRzCiGpJBRJhMUvgmeOaQH3WSqXacUQgYDYvvXLJk9BObXmdPJwufVbNSdVVVwRVbwRtIMj7WADtsAWMRBEclGxju57aLsVVyIZLXtG80A1/63Qu47G0nCxW0IB2pTOHCggfu9zZUi0igHw3i0ZygygVGQOicmJMQW/nhw2CaWh5BG9SsfikCBsq7gMg/e20WoPk0jY+z3EnFYENDxtE+3dGkBdxWmYuem9S0642JRl35zNvyU+E5wI3NnF99ZsQFiEc+pNxeW1ria0+P2sB+8GRWStW268Z9dSzbtxHf28AYXLe9b3UVCuqlVEQdp0jF4GR3f/YvC3L0g7XiwWGX2aUfOC9tBNDlZ6DFOGSlAB5iIIcQWB4soo=;5:OX9YIcS59VIDDexpx7DaTNP+XN0CbG7eDLOeiQMSq650dUQNeTEhcSqR+ZgIxWuY031hXvmyX3UhCguEbsRuZPEPclBFRp+PusDWvzQHmABWuRoOteeqVfl+4wAEqsZs/tJxwh8dYF8AvS48LROu6w==;24:nzIUK/ByHNTf26z0JJn336NDXUQNcHaU7BIwN+XyqmcQ13Me5xNIS+eMAz9UuIGUipXUrGxEnI8eOKQysohjdFxavKkNeHTfSez8QuLuHo8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1740;7:lPT2dElSFMbh7lNly1MQtlNjkX5X0IJZnjQSVnelL/3hCaAzBZRM1qIiv2gh+fW4d+wBEOw8Ret/NJwfeRSJxJOo3amp6jG+nFH+Tc0SlAbzfoWMFhLaxSihFym7FCyNhYYC8tuL8waLMp3aW3Am5p8e2AYJTRzXJ2tccgulsqGEpi4FDGGYhWy5X5HkfXhwPzFQqI//Aj3GuTfr5hhOy+dsJ8QZpwYD/dbbFtBOWZ6HfiTdzodWUMe1DQnMdJ2qZIOk8/85Wo0RW85xVA2o9H2xz+G0wJEAR+itR1ndBhiyAh+HfB3y61hlMAhrZ7sK87bMsrhX+i23lPXlak/CuGNICegjWWE0945q/MjoKejql8ESnofBS2yLHMSK7T8H8kSEuY4wqLmlJB1vd/BfUWaLzDELcezQ2mJOF2zQ5foLXZEu9QS+BT0J2uS4yerDJQMOdDdARoPhHfrdzAdLbA==;20:WfirlpZB38DSqD7Vkyt2RkQ6NH3bqPd7nzvMAPmiNXztH2LcgGBdzwgKME3BTY9vF7z58nEDy4+iiMzgTTuvj6OoDvgqW+91Mm1kkTrHWJ848e2w1Q1+Sadd898VWECbFCQdMUGIUDgQzEnaCs5ctOMkyHb+0jYRkipgPhx/eKU= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Dec 2016 16:00:18.8383 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1740 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2106 Lines: 58 Add arch_prctl getters/setters for size of virtual address space of task. This adds ability to change task's virtual address space limit. I need this for correctly restore virtual address space limits in CRIU. Currently, on x86 there are three task sizes: 3GB for some old 32 bit java apps, 4Gb for ordinary 32-bit compatible apps and 47-bits for native x86_64 processes. 32-bit applications are restored by CRIU with the help of 64-bit clone()-d child, and on restore we need to place correct address space limitations back - otherwise 32-bit restored application may mmap() address over 4Gb space and as this address will not fit into 4-byte pointer, it will silently reuse/corrupt the pointer that has the same lower 4-bytes. Signed-off-by: Dmitry Safonov --- arch/x86/include/uapi/asm/prctl.h | 3 +++ arch/x86/kernel/process_64.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/arch/x86/include/uapi/asm/prctl.h b/arch/x86/include/uapi/asm/prctl.h index 835aa51c7f6e..122a8ce5b051 100644 --- a/arch/x86/include/uapi/asm/prctl.h +++ b/arch/x86/include/uapi/asm/prctl.h @@ -6,6 +6,9 @@ #define ARCH_GET_FS 0x1003 #define ARCH_GET_GS 0x1004 +#define ARCH_SET_TASK_SIZE 0x1005 +#define ARCH_GET_TASK_SIZE 0x1006 + #define ARCH_MAP_VDSO_X32 0x2001 #define ARCH_MAP_VDSO_32 0x2002 #define ARCH_MAP_VDSO_64 0x2003 diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 8ce30d40bb33..ed6a792f7932 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c @@ -599,6 +599,19 @@ long do_arch_prctl(struct task_struct *task, int code, unsigned long addr) } #ifdef CONFIG_CHECKPOINT_RESTORE + case ARCH_SET_TASK_SIZE: + if (addr >= TASK_SIZE_MAX) + return -EINVAL; + if (find_vma(current->mm, addr) != 0) + return -ENOMEM; + current->mm->task_size = addr; + break; + + case ARCH_GET_TASK_SIZE: + ret = put_user(current->mm->task_size, + (unsigned long __user *)addr); + break; + # ifdef CONFIG_X86_X32_ABI case ARCH_MAP_VDSO_X32: return prctl_map_vdso(&vdso_image_x32, addr); -- 2.11.0