From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752515AbdBNSkf (ORCPT ); Tue, 14 Feb 2017 13:40:35 -0500 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:45034 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752397AbdBNSkY (ORCPT ); Tue, 14 Feb 2017 13:40:24 -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 , Borislav Petkov , , , Cyrill Gorcunov Subject: [PATCHv5 1/5] x86/mm: introduce arch_rnd() to compute 32/64 mmap rnd Date: Tue, 14 Feb 2017 21:36:17 +0300 Message-ID: <20170214183621.2537-2-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170214183621.2537-1-dsafonov@virtuozzo.com> References: <20170214183621.2537-1-dsafonov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6P191CA0023.EURP191.PROD.OUTLOOK.COM (10.175.236.161) To DB6PR0801MB1736.eurprd08.prod.outlook.com (10.169.227.7) X-MS-Office365-Filtering-Correlation-Id: e0879561-e902-434d-10c2-08d45508ee87 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB6PR0801MB1736; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;3:aXuHDxkcLyHo9Is7fBLGTALg4H6NgYJQNURJ5mZPEnHAuXnlTlALRkttE9IopZkw0MWIfzojWH5BuU6Rw+U0tqwh+meSbJunaSJRZDG0liqhA1+vyAIHrCyhfmj/W2Nge99Z0HM40jCoDaiDzHQF8k3CHDfVBT7YkBaXrwtxbPHAUkghVgwpnvKFr14dwQdEUXVeoUl9JSwtstEvkjzhQ5M7AE/ezG1ErQKgn8Ps9IgwvnqRder/FtOZ7WscAZ0HOzJ1MM+c5lDZwytS1+h2qA==;25:p3FCmuJRBkk/q+MmM7vbtvW7nB2nfHxrigXf243WY37Dg+HXQohxaLXxUJrNsLifZHjG9qOiJTM0xz0KOaxyddaxZD5UPTLW7/ar5FkHSeSdMoPiTz1xLS0pImNN6rv2XOfXm535vSfUnNXX0/Sc5a/iceZAT0gwa6v0LKGtL9LghkqK9cW0v9VEj2UFFHD2mXI9GDjg3s5jCzGxpqcKZiBwzDsW5jT196BDyvMN7htEKy6BeXJg1Fb7vuTj4t/UaiVEAwf5WKFMTx9gvhYwUgO7Hl7HJ1uZxdIZS7R8fUKn5pUis8ZilTot9JOJM4fxYdUYAuuWAoOnfLAdF565jchDocH/8khoqECqXJBoewWeY0RR7+Q7S4x9s+gBBL4cM1mLKq94eMT0tWHWyUTsz2KHf5ScX30gzXsTiWTR5+fK/eir98KMT/n2WdY7pJFskITpLAoNB56QJW5hXZZziw== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;31:2c2b0Q+uaIjqYkITvnwEyezWTdLNZpqqJDbShL8BlbldWpOXGdt1wQdZuFlwWNS6zu79zLiqF7AbofW5C1kaA8GLBwjum6ZF1DaZgFMMx5Eml5QnMPHu/ynW8WWiUg/gEIRo9tQjVM383xuDrSKh00sbBqy9WJrwqVC+5sHm8wVfWlCHVYweAtkcHW4EZKEjaJeYC2wyqP5ueVlmsZgqZFsPSK9tzDWpT4UMMM7qmYo=;20:R8K60JVP75He/BmRe6afvosKo006OiLKfIkY4Wo94KFh8uaPEp4HEdXeYEKLbkJurjxgErt0e8n8oN6rBwj1KCmrJOFqdaZWdYDNmGf+MaTUj2RPglOkArrZRE5/vbp0nQU28chPOMcGhYyJ3Tten+i2hfoxnfkUpr+GTEzCMKAF/8p1Aq18URA+20PAZXz8FpunocQaNU47Jjyz1d/ZTglkGRwdbZimE7umStDAsb2nNUrcmHTTVEiL+Ab+EPJBFEsBR8q+mkoOTitp862BZM6a6ZGLtDCu/i1pz5e8glYuo7IdiRn4wGiHOkf/gzSjDKWbEXVv/ws1od2dqGvYM9i6qRjLyCsu7TYcPJbOeNLC70tYXCWFoWEa2se6GbrLOpEjLUBeH8PTillQthYoL3u4zYYzV8Y9lK5mkQNhk5s= 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)(10201501046)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558025)(20161123562025)(20161123564025)(6072148);SRVR:DB6PR0801MB1736;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1736; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;4:Dw4EdiOyZLaFHqIjthXtogZ87aTe8FMn520HPSQwdTIEQtNLdICeGR9YyyaIh5F3E1+G18xGfp15LmIGeFPAHWc7efjPkUyaZaWin6ZpWlao/rDlSKrswuZ+qSMp3ZBt5ltwhlSLrsLAKmYHPEl6KtTrCZ2h/WrBGnTBBqbcK4ujHqBBH6ZYTVstefQHzD3j1diofEkKgcVNViTfjcMAiX7quYzF0ie2SzLLB9MK7uDbpnZ5cVxI3zCt37c4f9EYX+jzolworbLvHVbRkz/PaSychwKlXE8lc9E5pk2I3sNPu/hfGKVzoBojO0z0l91xeS5WgCvu1x4Cvt3C5DOL72BDfxBd/grPWkGLOsIPSrCqpAP155jtFbUCEwf5MF0ZQWQO0kAn5nTfJc87N7nfWb77gJw5RqfyPymZUuo2DbgqbRT6dISfeLwqve4RQPvCtCV66W40+0+RnpEcl/rYeXAF8s8xvASPSQXB+yrO3MW+x4Yrliejlsg0LXpNKO8RG3qGdOqQLmY3LCG0pYK4NM70aHGEODqTJwmd5oOuIEmRp6hUSHu9vphOiK3W+Nay/EoKCC8jmKE/kBw8AjJAuuUZ8IQJlf9l0vOHn1LUfxk= X-Forefront-PRVS: 0218A015FA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(39450400003)(199003)(189002)(106356001)(110136004)(105586002)(42186005)(86362001)(38730400002)(107886003)(2351001)(97736004)(36756003)(25786008)(6486002)(6666003)(54906002)(2950100002)(6506006)(5003940100001)(5660300001)(92566002)(53416004)(6116002)(69596002)(6512007)(6916009)(68736007)(53936002)(101416001)(66066001)(33646002)(7736002)(4326007)(189998001)(48376002)(305945005)(47776003)(50466002)(76176999)(2906002)(1076002)(3846002)(8676002)(50226002)(81156014)(81166006)(81003)(50986999);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1736;H:dsafonov.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0801MB1736;23:f/uWsA7D1zZd4bs4hwcHszv8cXvi4BCdcd2regT?= =?us-ascii?Q?OVcHNOc5oaOo0gBAqr/bBe4N0Nmtg7OBduYN0Mx6lxQTcJxelk0yvta4As64?= =?us-ascii?Q?b8+nxN3lB+/5ssPECQScM0huG5YLNFvJUbQpuL6SVo2k6CrOPQXkWyqxs/Aj?= =?us-ascii?Q?5vW3cuMsw1ne2fy7oHnxk2fq+s4yBZmImNu0B2KWJMSqef1mIKte972awBlR?= =?us-ascii?Q?DI1pV6YNDwpn15ugHTqYmJaiZTWx7stNe7ZtsT3TEUVE9qAYJ2Y0XuVSx4Aj?= =?us-ascii?Q?trwPMsZDVN9CV/ppHsO0CFU7V2DRasdb6uG5Ia4rZZHlYaLjQnNvvqFhdLYt?= =?us-ascii?Q?Lqau0RBXBUKhvUy1q00AjWhjlwNvQNzH7OnaoDt2BITV+JiUr4x/F0sjhfud?= =?us-ascii?Q?8nhDc5fUOFv9uEEi5H3AUucyN7Nwq2zQiuFP5+qVvxegliwPrdvazm5DoX85?= =?us-ascii?Q?VKGiSHaEMK/7unTSnNmPQ5nVazNLsOirLHJ2WxALNZBS5KxL13Lv124YCndN?= =?us-ascii?Q?qIvkxaWm8SjGuQB4oEowjtenn0mHo1QwH66utvTHODwO9+bEI2XQ9Cf62Ezf?= =?us-ascii?Q?2yzBk8jVFtcKCH72BYASqElCMEwpfjsNJ/Adm0HiR4soC6gNrKDWi6N3F/rG?= =?us-ascii?Q?jLlMWyLoOawcFhNI4IuvzGnnT91gzn237m7CjIm3c1S1OgNu+BMKgZV9vTcd?= =?us-ascii?Q?tSKSKP3Phm/F9Nq8rdcxENSNr/IImjZLTqR2+u3NQwBQRuBqySzXmP5iyQvY?= =?us-ascii?Q?0BtO42NkuMXVwElZuVdLk7lj8IqC6ueXuIE69ivS9QImtOuuCqvGw1T4kW48?= =?us-ascii?Q?Mvw+JkZUSRtMIfjF8qocbvLXIUk/LJmn5WDiJN2pip82Nukbfqhb1vkhLBr8?= =?us-ascii?Q?L+cjKLzBUSW36OLKLOh4PPo5IZ4GSWXgflJB5g2QpCkgDqd7Npeaw13MXZ4Q?= =?us-ascii?Q?Gg72b7foUpZVg2DGu4yqypigsgx6COV7ra4lPHY4FPgAJJqhXnSaypE63DBm?= =?us-ascii?Q?GZECB803qLmjArfhtzefiJHhvnfQeEfh+/UyqVhmRjF6GNnIaDb3j0mTafMN?= =?us-ascii?Q?K7tWU/l2aVcGU9wcIueV0yZDoOeuTiLvmWJQ+av/t2YleOOvMxpH5MC+1lDT?= =?us-ascii?Q?1tMUE6hztU1QYlu7GlLxqYaqwt0HKtoeXyo56z6hIAhUUZhR/Q5qep32VUDg?= =?us-ascii?Q?P094YnmWb++8bQMbTZhjkE+JRlEikr+V0w3xVxbKnTqIJ8GurKNGyLVNFmw?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;6:MFkNNBusLCd3ikM1IvDy0gFIrr6z3/POI1xhX6hBQ2OzkFfdEiwuyJGmM/0VDbsLbE55kyfqCgDLodPV/qjXLxH5TuHrIJdwxyQQ3mCUpjE4uMQYyjtiWHJ8aADUOoyVQ4LJo3ofjbsKgin4PAFgdHtEoSGgAlvfoocwjtB/FjdUFRyTVygr+XuLBlx5ND78QgBTtweXakZhKtrIp+eTf0GrhEDZalbw31PEJu7C4BdQRDlTZ1yrCnpa7JHYhHST1EqGmJ9ruKf1O4YMUB1lzTHhXreYFdnk30n/IwS1e7sre72henZqkKZKBh/2dbeSs/WiuHak+o7qh6aWj72UBT3qk5xErDi+8sb+4dyskumbskIblcZFE8vWp3q01ixa8OhVUv/YybCdNdM5IqVpOA==;5:QpOpkccr4NQXNc2/M/1BSspJKaXUtLSEtJ0kg00VKWlw2HAkYKtUarOoYEAAH7l0X+bO7r5E3W42W4871YllhCwbCGtI0PssxaROtWYmcXvrf0aVf+9l0/xkxZp+tppXWvFtNYb0Iy340vH0F/Fz6g==;24:EYvyLTh8FHGqFxNWEf97zc9qn0WjASw3+lvOgG7+EQCsN0QmPGdPGvXLp9iKy4Di7XkHqPPlQQBEeqtSZhrXlrA7AhZv7xT6PQvjxSbJS2E= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;7:2DPtXLDXpviRe/OjVsr4bJ9rZvDYbOgxlKSB+/+2k/+8rWOFnzXtErqxEIGiGu3KcnDhY39iaFBPYyuEzegmJvIxmUYRNzJXuMuL5heDR8oIQhehtvC632ixktDhjbdebwL+Qylj7YnbZrFu4+6NLfE8FUqB3fsZPZekXjVZqcX3AXMIcqUhBYNwXOmjeKcqzuLUMwtguxErFdBnmK3kShU0QAHYmMf25ITkJ4qXS07HiM4cl+bs1oClYXxa+6VcnwKzpOllBpBRGpJwLObd/5JrpmgwB87P5TcWqVNk1XWDSjWQJ4e7SOla74XAP1yVqDr26UXSORdwU8XFTPgWWHTNLQ4Xo4UXAIldJCmkcXChLy+m5fQsXDMnQ2j4NpmlqU7EOwUskH/hc/HYLp5l51CoYUW0rEhz/V9Skxtz19q4co2uXukCXg+9l+NwS2w0R8ddUNhpbAi+TmTdd+13IWDeI7zrtq47mqQM2z/fteube83NMAbvDin+K9XJ+wFB/WBSAoD7ytW6A77d5kGMZg==;20:tgDvvDEqID5KhLxWeapB206jgknQRKKhazs7ZMuF+M0nL9dJf+Hjs1DPY04VvMa4uQPXh6x5Z0nrDbzGvgGqPQbuFdavs5JyVT0fJHw+mGdp/yYF7IgNNbnS9hAKfh380E8gErk+zpb/yYoxXMt+Xg3dasCrWwfGuzlY+GUOgyA= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2017 18:40:20.7323 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1736 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 d2dc0438d654..9f3ac019e51c 100644 --- a/arch/x86/mm/mmap.c +++ b/arch/x86/mm/mmap.c @@ -54,6 +54,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_64BIT +# 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) @@ -65,20 +73,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