Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932640AbdCFOhi (ORCPT ); Mon, 6 Mar 2017 09:37:38 -0500 Received: from mail-he1eur01on0133.outbound.protection.outlook.com ([104.47.0.133]:45235 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932547AbdCFOhF (ORCPT ); Mon, 6 Mar 2017 09:37:05 -0500 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 , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Andy Lutomirski , Borislav Petkov , , , Cyrill Gorcunov , "Kirill A. Shutemov" Subject: [PATCHv6 1/5] x86/mm: introduce arch_rnd() to compute 32/64 mmap rnd Date: Mon, 6 Mar 2017 17:17:17 +0300 Message-ID: <20170306141721.9188-2-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170306141721.9188-1-dsafonov@virtuozzo.com> References: <20170306141721.9188-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0021.EURPRD10.PROD.OUTLOOK.COM (10.171.79.31) To VI1PR0801MB1742.eurprd08.prod.outlook.com (10.168.67.20) X-MS-Office365-Filtering-Correlation-Id: 0d440e14-2710-4a87-3197-08d4649c0ef5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:VI1PR0801MB1742; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1742;3:Cwn7qsI7tIqmdxdSyCC5XHuopychHqgiTyC0rzW6/m59dswegToIpFf6kPfFduCqrIFQqqaesUiBWiZmFXZuTiDZbaD8VkegVz7QPxxzDz1c1tB/vK/ptHYxKjCNk9bsxP2Mw7iAR+TS6XfPjLsaZI3x3AQYGjY9b7lb53hv+2brYsTJg9b43yxGmqTP85kRbCZPLy1OFi0lifbtERKQ/RhUKYuOwHjI3nHBcWqjTmx7Ap5OOuk0dS5+foP+IH0XJXGg7vjn2vErqfUG2qSZEQ==;25:pmVXK6IN3xcO0BOhtUnTWsWKTOSQHMDbhya/tdy1tUMNypy+s6SqEFo6CAlaL7XbWmUcYJhGBOZ/eJlURUIuFS64cwyydjKHDoIS9TmJBDy/fhPLe4DBxzpSsAqtlz/M/Mb8XyaF97aCWzDb7HlP0XnUdd0pV7iY+8vW3AL6igVnGo14DBqhPFS59+G9S58fkPd4GCtSw7DCRpTGCR3YeJfkRZ3E+0oxBPY5XJn8W8S+pAwI6s6x4b16SdZd0rwymqH6VaaODLgB/SOo1afSBFcRbNwXh39/TBU7SBmQ9M5w5cUdXkPjzGOhWf4biPdNaSWv+jypRohlKBJyQMFWicWD1rXX1DnHBOuxALyis4FeUHHbRxRH0qmmu9asPLL+IlEXPFAOOYkhCAp86m15ocvYhHw5us8k9zON6hK2Z2Z2BHA+nzr5UP5eRlut1IADD9RYG4rOqfvviyQnvsJfCg== X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1742;31:74vaR9yA6WmkNGtjno+tRUuX4FEuvTZeLDYibzFRqqt1Yn9FN0hifO3hTrq1DYG4vUOx8EQ7ckNimIxaaJaNVax7OIfXYJKSlWwx09ZLLnfnqDy0F17iGmy4mA/1+UnVU1Dqc/2SrNs0U4k2hvOXdHodx23FdJMnY1ulvFucmG12/pIY5kpwI2XPFhe2MbtUPXmTpRFYd2GX26LhnS6Xdfm3zTh4Z+8CoR1nsUmY17tKl9frW1E7jO/NcjtWb+GM;20:1ud6aqEDn1XaJmzKwxsHrvJlDGAjN2znyOR1T5ZTZcinRK0eeeA4M4UcQz4sTc5jL4qwL/P2e4MAsHWIAf/2hd4t05DgHMCoItKJR/dLOB4LpimAYShqXOutKBP8v25k8k6WotkYX8V99RLwzc50WwftCEtTEbHqGEFUbzqzWnrOIdJHns8s6VEyk0HtF3uAc5XdvFLtoWrU2+8p+BPGgC7/kBKmZSkZVlWG3vjLUAwGBnvZyZTFVenBeI37K/AjW6MORYgtv2Bv0VIsffcbzgpBPovxiYDCy4nAiDKqP7uyHUQiR4r1VlmXYW1z+ywaH4BozfA59VklUOCui1gWyFdfcwJSOiCXBB8hOlCVjTymlF9UAANd9RFQxUfVj2teCesx4cOOcZUXy1GtPU9asDFwmul7y1AVVP7q+E7qiUc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6041248)(20161123560025)(20161123562025)(20161123555025)(20161123564025)(20161123558025)(6072148);SRVR:VI1PR0801MB1742;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0801MB1742; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1742;4:cRidt1SxWKg7yeSMWvPKaBpKYzkKBsRoavr/gPrHMkdaXYval1B/ev2F0zlRexA4XeB4xbGTYZg/7VBw1+d9PQlrV5PZ/lan0EYV7gbzckyO+FFeSDm22Kc/LKhqdGhPlfLJq69wK6BbVu0Famy4DQIzQ2ijrRRWCI3kSLKbY7trwhfud4LEtu8sPoa+Pl4sTTvdxtuwaeyYX0OPDPkTCAa+b5jF7KpnUHRZFSWJxveJ88vwMfmYvzhD7S/87ASuGRHYmFZhsT0hyQCDl+4Tc4nikJL5Dslfap9JATyGwKiFErLISiq9cCdt1eSztjVb/zNtchx+l56KmRJSVyM/0UiAarUNMWIz9dqPbL7xh/IpsTseES+kfArCAViw8iYWAErfPjKgbBZOI9JgOfl2v88cNMLuy3YGw+XA+ovKYqtUqfK9v/jkeBn7AwccMjKPR7hAEv9kT5c68dYqZ8oqtaLRtjPTrsn4zNVLQKJUn4HlJRDQ0e4VfZWHKwMAyArCLqJKtVcYxE1dsDweh4dCc5tDOG7fXduLNrldIq2+E5VSML9NJWuST9Kw8cTp+JbnCCIeBP3gm0P4C3nGSuh/I7yKQpco1VKXlnaLdywVmVs= X-Forefront-PRVS: 0238AEEDB0 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(39450400003)(2906002)(110136004)(6916009)(2950100002)(305945005)(8676002)(53416004)(38730400002)(81166006)(6512007)(50466002)(42186005)(7416002)(1076002)(7736002)(5660300001)(53936002)(5003940100001)(76176999)(50986999)(48376002)(25786008)(66066001)(575784001)(54906002)(86362001)(92566002)(189998001)(50226002)(2351001)(3846002)(4326008)(47776003)(33646002)(36756003)(6116002)(6506006)(6486002);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0801MB1742;H:dsafonov.sw.ru;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR0801MB1742;23:EkPTBNfBUqHZxnYMSU3DSXkwTD1TEZdXBzzjiQv?= =?us-ascii?Q?o6GufF8SeCH2bCPVn6gRxCGEEuZxohXjrv+YEu3oACHPkILVp0FYvCdEuJWY?= =?us-ascii?Q?VjWbfRGQFcLM6Ghe8yP3TbTyJrbEHUsbaIoQrpbKD7ttmQLog1Td37yboIZo?= =?us-ascii?Q?GmraOkxDR12GgA7opVrSDWhdd2lh1v94VYqWYNzJ/z9r8YN12q3fTX7mwB0u?= =?us-ascii?Q?FGCV6ZDUmn11Iq4VTV7ziXLx7vpR9DXnTHRCZz8M4lZfKZAij4xM7SIoyo6i?= =?us-ascii?Q?J0bXTzbOx6UMcjwaq+CP+uNviXaX4EY+MBKZdKqGx/SnGr7VY3MWAazj/hD0?= =?us-ascii?Q?0cYmz8LRORWAQ4DTfIjpq2uPLsOTnoWAYJVov8t2Dq/BDQGWY4HGhk9wEPYf?= =?us-ascii?Q?mL9FKbAs7vxeZL+Q8xxcDlcnuIFTNi9Ea7Oc1aW0ugz96GHUwqOZ7CdZYvLC?= =?us-ascii?Q?N53UFKsJjZnfzq7vVLhqgfLiZ/bcIcJLRTahzqT8/4vSxe199A+mI9YSUWGf?= =?us-ascii?Q?ck2TkCB42sYNlLLKDMbZr4aoNXvs0X4Qakyl4FazSObs8FnPpwcU3nchWWwO?= =?us-ascii?Q?7oVmL92RHvcqrnJWRkaKMSdL1p4zgUeeuQtIF4SAHoawYvIy3rhEOr0JI8N8?= =?us-ascii?Q?cAFH0rSzNPAFDMGY5toTTK4Qe0tauHNwqP/NiCuUwhZalAPuu4lPwc+yQhoi?= =?us-ascii?Q?2M8Ln+9BJFBBJaBnmnBfy+6nvg+Ny9+yMG8T2OtESieZ/CrkfBVcKrl5U/aw?= =?us-ascii?Q?AKzV14aWz9vJJhmBq8wxgFWnTe+6M4FeAT+PG7VgSx+AhBq3cGUq7g9HcJ8M?= =?us-ascii?Q?icyik1klWU3FApl0x9tyr9DvTq3AYsjWseRU976jrCn2+LDfsYhjBfYq0LsH?= =?us-ascii?Q?VVmlAzHuH4OzMuk1uCyA+5HPJMVGdJ6G8sezMQ3ESj8viF7dTaXJ+3SnGR02?= =?us-ascii?Q?1BPJquYFQz+NkVrwgVegTyMuJeLIAQVKF+Pq+iW3/cQ7l0eDmGItjYWJcPAH?= =?us-ascii?Q?/nKFXJzraYJYPYLORlWctR7NYmvwKgHSMC4FgWG3raWOMAw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1742;6:wye6uZLAZS8OYrbkj218JB9QblYugG5oE2HjSx1IxvQk7cyH2jG5bgTeh+ufZg4pPsqi4wFtlwJXu5oLF8EKrv55XfxB8MNCr4PSFn96iV776reRTjNPoJOsv3C9jRNOiSt2xvx5tNX64uBKmd0yH4sDaPOrA0yXYmiW8pJCMg2F4Cj18lpImgHw7hcMdT6/pNZLBKYBYyvbS2STaZB7VzAtwwJhh3s312mxz6RH52BpJZQ2IhbPBy1AgrUY2uoE0cZIyk2i/4mqRN9GhZuwKcr/fhsRJ0wwS8bQ2aw0bJQk+Ga4uoneZsXew5tPkeSxh64rw/Aut1FrbS6lrh0C1Ci0EeN5Z0o0eRTeMiRucn/LRBKXe4nRjLTZWPOH0aLmn8WmRaG+h22tvNc8SIP0Og==;5:dDCtSyqyqwPOTtYodq9fbycjJmMi+DRHjKXKAP6oIsA2W58YadVz6XqJcY9VjE+IVTLJbEe2WNLjVbadfUu0GpSb27OlgpAmMvVfU7FYvzKLxqM0NcoruYOWnzR+hQJX7a+4BQ8i3ltnZJ8KXhFI1Q==;24:aJsGDzR4LmIl2mt05ELE9vN5j/n9Rp3sTEYk9AmwOULAiRpmo0yYHqLuE3kzqNJ20P03oi5ki6DAXWv3GzpmuKVqqczkkE6QCqZuvhddFEA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0801MB1742;7:wlFZuYJeyHeytp4LRgbu+FgxPiaoP7guqjBZo78F/GTpYwBkBVPX431ABXIR4THw0dyD2orgJCzYIFsmoevHmZEm4riivliFgDfS/tEqfzmdrLrcUTv4h1T1POomOz0SXBSdtTs+v5D6I9UnMk48Vipu71iZTlNWUaYrFt+aawTXUNMC/8jsHt5v7wWffD2FOIB7iYJ1kIvMfm4EHOgxy2MNEDhIOKeDgslmssi/L8ySo5zKFvAQ9WZPE8EV829ShnmcGtoFb9bKm6k+29TxxxP6W0Cn60G2X/YVZLx7L3ds4arfLVmhBUiXZ3MeBh3XRduP3y1od42hUYcHGYsrRQ==;20:Nmo0EJpQnyRa2kcq45hb7oyuRUhyvTx6MO7VulPY6kvDw7K2k35KQ+MPX8C7ts+n91Y8rgTLRXXyE3xJNC9R8GozjBmYlrF1UlyLpAB2Eldj/2U55iWgFp5P/8cGPe1ZWZ4vjB4q90j3e9vWzpcvi+CQ2egwnb7mjMuAFQG/tT0= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2017 14:21:18.0956 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1742 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1865 Lines: 60 To fix 32-bit mmap() syscall returning pointer higher than 4Gb in 64-bit binaries, two mmap bases will be used: one for mapping with 32-bit syscalls and another for 64-bit syscall. To correctly place those two bases, introduce arch_rnd() function, which will return the random factor independently of mmap_is_ia32(). Suggested-by: Thomas Gleixner Signed-off-by: Dmitry Safonov --- arch/x86/mm/mmap.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c index 7940166c799b..f31ed7097d0b 100644 --- a/arch/x86/mm/mmap.c +++ b/arch/x86/mm/mmap.c @@ -55,6 +55,14 @@ static unsigned long stack_maxrandom_size(void) #define MIN_GAP (128*1024*1024UL + stack_maxrandom_size()) #define MAX_GAP (TASK_SIZE/6*5) +#ifdef CONFIG_COMPAT +# define mmap32_rnd_bits mmap_rnd_compat_bits +# define mmap64_rnd_bits mmap_rnd_bits +#else +# define mmap32_rnd_bits mmap_rnd_bits +# define mmap64_rnd_bits mmap_rnd_bits +#endif + static int mmap_is_legacy(void) { if (current->personality & ADDR_COMPAT_LAYOUT) @@ -66,20 +74,14 @@ static int mmap_is_legacy(void) return sysctl_legacy_va_layout; } -unsigned long arch_mmap_rnd(void) +static unsigned long arch_rnd(unsigned int rndbits) { - unsigned long rnd; - - if (mmap_is_ia32()) -#ifdef CONFIG_COMPAT - rnd = get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1); -#else - rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1); -#endif - else - rnd = get_random_long() & ((1UL << mmap_rnd_bits) - 1); + return (get_random_long() & ((1UL << rndbits) - 1)) << PAGE_SHIFT; +} - return rnd << PAGE_SHIFT; +unsigned long arch_mmap_rnd(void) +{ + return arch_rnd(mmap_is_ia32() ? mmap32_rnd_bits : mmap64_rnd_bits); } static unsigned long mmap_base(unsigned long rnd) -- 2.11.1