From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752562AbdBNSkr (ORCPT ); Tue, 14 Feb 2017 13:40:47 -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 S1752439AbdBNSk0 (ORCPT ); Tue, 14 Feb 2017 13:40:26 -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 , Shuah Khan , Subject: [PATCHv5 0/5] Fix compatible mmap() return pointer over 4Gb Date: Tue, 14 Feb 2017 21:36:16 +0300 Message-ID: <20170214183621.2537-1-dsafonov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 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: 9ee2cf99-b2ae-4a69-e281-08d45508ec44 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB6PR0801MB1736; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;3:IdaxLDCFCfmMI6l+axgJwHOz3nVxy3migKQWsdO2xWsXXEwFXEWetC14rXXtogFxhdfe1WgtyzNjYtp9Km1xq+S9L24Vzz/m/Ff/q1qPaD/5UsAPQlAUCeyNyQ7DBE7rrWb2uBTmVvrrbbWSHHCJjFAmBiJ4HXazq/Jw0qiqLre1wccVTDDIgLwPdI6FFIu8M0dDALAMOIpBOqna8kMnZbpz7qU81WCRlTmxc2t0C/yEVQnPdjZ/xDr9RQRJsUUjQTYxN34efEdCBT3J2HPX1A==;25:Uqbfw8Wn8Wpt40924AzA3TzgJsczYRT6KAv9BWbnj3BSh/lHbFD648qo4ga+WHSVLYRWOrvuO9CSuPUYlxm+OcYy+aMMp7NVZSKPofmA+SVJFLGZKjK2MJFiPAAocLBQe3VEmR1f80zF8FfYxtBHNY+W+npqIBGwgwkts3CpUdKdpgcC3kV/AmAKCRatO5zGiLZ41mmgLpnYXw90yjwM5ZWYggB04g8OMVrNvnWnSiOBT1FRgM233uZJqbB0MuKuHTNYdfxOa1PJQ/0M5NKA9+p2aOwSxsXFNau7Vb7B2xx8J8Tk4n4VFOQ1DuGhXJQJ9gRi9cURCVUOtkivm6uDhhSCPgvouqkVMNvTJeJNQpvTJaqD5NLAznhcotGvlVwfEpKHU8Tkowzaq9ZD6SoFRC+gLPQjZUPwgEdT3ZlMZV2bfN9OZK2yyjoziJhAKQJ1a7B+qMjUQN9w6WIDX68kYA== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;31:whvG50JgSoZzIQzixvceNPaLvtJtXYdznhU5XspPc2YEPlyq3hODcXpR0qkRHzfNc+P6KdDpEY+tpAIuzhJMkwvcNU7PGyj6D2YLxd/FEdxsdrPJBhpDmD/z6Y4KJUDY89aQp87LL5Gyq2a2eu9op5JYdL1ANburFieWF1Q8VKdox8JSX/cEK2qjy1SBbWFXRXPe+2FybkdIEAjpbVX/Vz8M4Vi+4KR6l20CigX83euV/wDDofCXmQx0jlx8IM8E;20:yIKsCvFUTUL1TZC6IvEZCkPj6/dLLwLsLgeVw3mAvRaVflrzmH0H8DqeYSu0EIU5Z90oePwDloYi0jBLeSfyEqUXSF9yW21iTAQw8cy8VOkBYOvs/YlO/HAKKTFMTckYlt2dbP2swpk/u7reGi6vVj2/y7zVq0OB9Lc3KKmxTtQ7Nbhttx32gIyDiAsAJWvKFYCwpc0ynVzWDuGdf7sYSI7Ps9XU71W5WizNj6HftvuAJ9yQYA7/zKO2+U1RFgV2+Aa7HQgNK2k3vWH2H9SLPe+zYJmlcgVUO3jVbXp6SZkCNdx6KH4PaTDNG7cxxuIXMAt618rC3DmnC0eskR1ybdkP7Ob05Y2aRaXX9yxLUL17BXnFfaY0x9mY8MzahkcXncQrmAH/jxaOoazF7o/TM01Bm5lDYyW9ySm+aeg+gVY= 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)(20161123560025)(20161123555025)(20161123558025)(20161123562025)(20161123564025)(6072148);SRVR:DB6PR0801MB1736;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1736; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;4:AWKhOVxTkunkcQjo5xLqp1OO5W/VBVSZTP4nu1c8CcrvRCsTr8LjWsZcfLHJwT1hz6rBMiFa+Mr4SYY2tOAwH0IR4r0OwcaaDClZi9bPWNDWViD/hW2jumpmAsiPhJGnObdqLehLz/3fp/dws2kJdjGKgqmdAkL2tlPXaQYWzaagFn/1zTGhLa/kpCtEkEuqtbFG1vjlYjEItFfA2EeKHmrPVAgwkicqmyDL0MdKSkHctyTPvZtWWAe5EHfKvYZ/+xfBE5mxOGMj5QdSKV2eSSK36UdlPL4tp2UkyDl6lixXUh96bTDApfp4wmTwWHgvfL5d5Z7IQr3Wz9WkTHBASa54MGSAABX7XmQUUNNGljCZL7yx2cTjKgshmyTY052J/e8ekYTuYZF76Ih666hquO8CBxL8+i61WFu90WhlXFmeEv9a1SDHqteWiUIWMMtUk+M4FFoOGWrDqNVbe9tsOUnRiIUhS2TWR+ge9wXwNPG5oWp55Q/gUD7C+BY7qhDiQ52OuhWL1TFWUZWWal70I4u985CV0xZpoBnuTuQTdwwykz/X1fySUAQyQz0WOKdrCzPQ7AbBmgOzsemZAt9u3HvG0BDX1xz10oI6uRYRStdPsNQew4Blj5xXpGZ7Rx3lleybSsG6lQwfFnB1PCDchA== X-Forefront-PRVS: 0218A015FA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(39450400003)(199003)(189002)(54534003)(106356001)(110136004)(105586002)(42186005)(86362001)(38730400002)(2351001)(97736004)(36756003)(25786008)(6486002)(54906002)(6506006)(5003940100001)(5660300001)(92566002)(53416004)(6116002)(69596002)(6512007)(6916009)(68736007)(7416002)(53936002)(101416001)(66066001)(33646002)(7736002)(4326007)(189998001)(48376002)(305945005)(47776003)(50466002)(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:NkkA5NT/p9Dv/idXcjW1HK+8pjhEZlxb1nfAaBb?= =?us-ascii?Q?uFLmfkaCXBpVJLKeM/SKr7JMLzkvXlg6dC9FBCng6TdQ+G0QNXqMeNSgLfGj?= =?us-ascii?Q?LMJNVQ1lHOfBCAzPMfenDO3X4+aCTzNo/NfeOYCO0cDIpSB6Wr+g51gcgtYS?= =?us-ascii?Q?H8RJ+w9jQXufDug2rD8ldfIqokiEx3E0ydArwom7QAWwTBZsUKYO+2xvNFgT?= =?us-ascii?Q?OAhKberdxh6q8dMCnKT2h/gLeZDVLj1SvJoWavB9YgnCT+HmJoHCJH5rtO31?= =?us-ascii?Q?11a4t5zbYh2bVkSUsGFnixDcunbdJq0IVMcTcXm5vxZx4ut/PdOr/i6+soSP?= =?us-ascii?Q?Zk07bWyFW38tV9FaXuxMSHoKaI+FF6Ck79kCc4sBm8RgFBgDdoCS3DxQpJoJ?= =?us-ascii?Q?FCCRFU6GsDCO8lcjsfLaBkqRUGE/cEe5ZFlbRYkXN4shkwyVLWZcTovjga1Y?= =?us-ascii?Q?cZtDGNLMWrNq4ArXtQqTNsS70bXT0ONTXnYZQVD/xh+UU91swRXUg7/K8MDg?= =?us-ascii?Q?TU+lqY+J+JT4HxWoiRq05PhRqjPK3aXo/2GxPnkCWYx6GLwSYNoySCEoUqB6?= =?us-ascii?Q?9Eml0VPmPYNcuC8d7QxKqvn69Qv+6WOCpDdhLv8KfmqI3VZDRYpQRvHqoPXS?= =?us-ascii?Q?Lxe6kOsZ4XDBCDmV3TLQ7NWN4Z3wgRzmEIL1FZn1d01uPCNdAeOy6LCs2MTr?= =?us-ascii?Q?zjOOaT+aEdbYcV334YwGfVJNS+juM7XQgFZROvfXrCi86dAEJPz44YcqeSFI?= =?us-ascii?Q?fOz7td5Bjt4TP4DQk6vZtBuCIfdWkS5xeJtzu55ucibTsZNihRVvd4XDh7dc?= =?us-ascii?Q?xhep1UlA7YC+f3o47WqMxmOHm8Y6fAMMDvtYtMfWyNkLKyIsnD8a7jBrh4KZ?= =?us-ascii?Q?CbmjyrO5tvfBcL0TGSDFf7UOi4odiuj3pwblZCctGEv90Ba5H9WZszPXjtAf?= =?us-ascii?Q?OhGKC2cqlmAGPlgctl3jgvF15ktfMTA3+AzIq0v92v/qAj6dbS9nR0Q9xG2w?= =?us-ascii?Q?43dSeAymS9zrl2uImUvNF3It719AUUsd2Hd7SsJckSo0U2WcU3jtiTaji9da?= =?us-ascii?Q?G12hScWOMmLgUDF/HGo+Xi4CsbQJ2M7eBOUBeJqGNar6pSdf3iggj4DUiRvj?= =?us-ascii?Q?XchamBzpqsgjKeMHpJFhpnlMdxfkNdnPSwztShnQE6rTsEvYxaC5tn7Rjvnz?= =?us-ascii?Q?N/nSgPeHOyjtHo4k=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;6:leVpQjtL9q6D3/8B5TcdUKKbhBJPLojvbAAJ14knCGQ9e9nCvgm4BkgCN62OXOA/aqwIeavJFJNLMX28aa6pQCFof9LaNVvnKolYMFeNMqPbr4CX7E9ajonv+Aktm4NDA1CItDW0wExPfYSWf0HGcjb4qqjo17DrGnrDgVJ5yzQ8WLEEJjeEeTBmAY+hmWTBNb/P+/himBGG5WtkVJUCgdq5ClCiJCLySsWoBRbcYVELqTA9CA62ua0rssAKG7ZmA/roHujLz6/PpMLEuOkrGlPe67EUcgr7exb0zZv6Erd83KGjlFvnsvNr+7OFgCx4EXWbpymZFGRVKcxDMLs9xBabKv2ujQ5EPrn6hN63meK3mbI/+jsIdrqW8o/ZFioEy+Zy4ZaQRQ970tAw5l4C2w==;5:1ni5Idp2eONtFCoO54VqNa9uTpfjbLKdGEWbfAz0EtPNJvJw1vglTALFs/PwVq2JslENkSUqUb6F57FDtIrhVWiCCBcgxqvNVObQHgpI915m3i2W5fAXlci+IflqoScx8ZTw7/C14fHAlPgySZQPQg==;24:qp94/AtQfUh8/+RZT9u1r7JI+e31AyS7ZN1qJPVugr0VdpGbmrgrpkaQYE31qVuNuMrscPxTmy8rwmbk4zNOKrvR/vJA2CphmuqHKXLCq0I= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1736;7:EV2P6uGFgW2cG3Jbprh+VhONCfDxKl/U4lgbU7DLe1kB4cH3kTmy2PzlwTEhiqX/d35HJgVlG43TovQNmirkuVjsHljGypa/SAX9H+2anVuSczMqNyiQOJhyxl0jb7mAKBQ6oqugWuF6aT18W1rW3KZgz+pXPzxzdH/ghw8E6aYCFGiqyu/kqE5ivjW+P+8QSUmXh84kbvoVBRufGswCR3liMbWbfzXhMBq7TZVjWoVeHGfBGoXrTsWUs+mgMCx1Nv2/h6yIfv9cp/u2ssmqm2fjVIYbxV62kTuTP6eOfVOuBzCpMYb1zXEpbKSuKZfRhKYyJnQrBfabnywHGh9pb71+n2eOE5T8HBThNMEi6L67jpYRrmuClwi2xSXmrzVdNsm431bMmxa3EaE03HBm1gFKzwbpSy/HSH+lbS7mwhX2vsRSwNzBM+9YtUZZUuik+S8p6Hd6xgIx+0LmA7zvyxktCqLUUdjFQ6Ufmth51IW3w6dO4yLBXxd0mvM1zzj8XPeHQ2x0m3hvUzZWb/ZtpQ==;20:WImViAjDk/1VasULo8Y07flNOGfBjjgCW3kAWsiRrgT5ljCtrsSjuwW19A/RuxmusRpmfZ1RgiZrIsrFq//SvHeHn3P6lCM8ioyOD7kQgvXeUE+TTpGRmPPDEabYzD6C5/7l25hOE86GwrAMR+VKdA3M5xOJuf1+/6byRqkJ70s= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2017 18:40:16.8090 (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 There are a couple of fixes related to x86 mmap(): o 1-2 are just preparation to introduce new mmap bases o 3 fixes 32-bit syscall returning address over 4Gb in applications, launched from 64-bit binaries. This is done by introducing new bases: mmap_compat_base and mmap_compat_legacy_base. Those bases are separated from 64-bit ones, which allows to use mmap base according to bitness of the syscall. Which makes the behavior of 32-bit syscalls the same independently of launched binary's bitness (the same for 64-bit syscalls). It also makes possible to allocate with 64-bit mmap() address higher than 4Gb in compat ELFs - that may be used when 4Gb is not enough or with MAP_FIXED for hiding that mapping from 32-bit address space. o 4 fixes behavior of MAP_32BIT - at this moment it's related to the bitness of executed binary, not of the syscall. o 5 is a selftest to check that 32-bit mmap() does return 32-bit pointer. Changes since v4 (Thomas's review): - rewrote changelogs (so they should be readable by humans also) - made code simpler (fighting to ifdef horror, etc) Changes since v3: - fixed usage of 64-bit random mask for 32-bit mm->mmap_compat_base, during introducing mmap_compat{_legacy,}_base Changes since v2: - don't distinguish native and compat tasks by TIF_ADDR32, introduced mmap_compat{_legacy,}_base which allows to treat them the same - fixed kbuild errors Changes since v1: - Recalculate mmap_base instead of using max possible virtual address for compat/native syscall. That will make policy for allocation the same in 32-bit binaries and in 32-bit syscalls in 64-bit binaries. I need this because sys_mmap() in restored 32-bit process shouldn't hit the stack area. - Fixed mmap() with MAP_32BIT flag in the same usecases - used in_compat_syscall() helper rather TS_COMPAT check (Andy noticed) - introduced find_top() helper as suggested by Andy to simplify code - fixed test error-handeling: it checked the result of sys_mmap() with MMAP_FAILED, which is not correct, as it calls raw syscall - now checks return value to be aligned to PAGE_SIZE. Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Andy Lutomirski Cc: Borislav Petkov Cc: x86@kernel.org Cc: linux-mm@kvack.org Cc: Cyrill Gorcunov Dmitry Safonov (5): x86/mm: introduce arch_rnd() to compute 32/64 mmap rnd x86/mm: add task_size parameter to mmap_base() x86/mm: introduce mmap_compat_base for 32-bit mmap() x86/mm: check in_compat_syscall() instead TIF_ADDR32 for mmap(MAP_32BIT) selftests/x86: add test for 32-bit mmap() return addr arch/Kconfig | 7 + arch/x86/Kconfig | 1 + arch/x86/include/asm/elf.h | 27 ++-- arch/x86/include/asm/processor.h | 4 +- arch/x86/kernel/sys_x86_64.c | 27 +++- arch/x86/mm/mmap.c | 109 ++++++++----- include/linux/mm_types.h | 5 + tools/testing/selftests/x86/Makefile | 2 +- tools/testing/selftests/x86/test_compat_mmap.c | 208 +++++++++++++++++++++++++ 9 files changed, 332 insertions(+), 58 deletions(-) create mode 100644 tools/testing/selftests/x86/test_compat_mmap.c -- 2.11.1