From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752523AbdKWKFX (ORCPT ); Thu, 23 Nov 2017 05:05:23 -0500 Received: from mail-eopbgr50123.outbound.protection.outlook.com ([40.107.5.123]:31232 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751439AbdKWKFU (ORCPT ); Thu, 23 Nov 2017 05:05:20 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH v2 06/18] x86/kasan/64: Teach KASAN about the cpu_entry_area To: Andy Lutomirski Cc: X86 ML , Borislav Petkov , "linux-kernel@vger.kernel.org" , Brian Gerst , Dave Hansen , Linus Torvalds , Josh Poimboeuf , Alexander Potapenko , Dmitry Vyukov , kasan-dev References: <02da46906066215f87e15a7a406109e353f4381a.1511325444.git.luto@kernel.org> <8cd2c81e-2cc2-2659-36f5-1e49f755b4a2@virtuozzo.com> From: Andrey Ryabinin Message-ID: <9e5893bd-097b-005b-342d-8b291aeeda97@virtuozzo.com> Date: Thu, 23 Nov 2017 13:08:41 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0502CA0010.eurprd05.prod.outlook.com (2603:10a6:3:e3::20) To DB6PR08MB2821.eurprd08.prod.outlook.com (2603:10a6:6:1d::24) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 09a8a704-4725-4292-58b8-08d53259b18f X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600025)(4604075)(2017052603258);SRVR:DB6PR08MB2821; X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2821;3:HF6yWzEcUycZlS7598v+cf3H2LQf9r3ZmQsVcPx3JVlPNY1YwuvmRcA86G7vg5VYAYiwa1XLok9Xw0XIwOh0jssyDPuNwHnSYH2oZZty3uEJHRb/G3vfJiSLye+6QdGB+XYaSj6JBR3c3srjXuchN7+0Z6iRRqzBvN/I5Srde3XuIR3y8fkqITW07IEytA9HMh10oWY6SUU3wQmXTBgg+AW2ON+Vj6uENnnOnL4BXz235FXX1I0i1mVKLT2sBEEf;25:dyVaDW3fBSSvih6UZXPlk0sye7wmlvLVnMOpFn/A+c1FeJXQNKgGJDjO7BYLQo/pN4xL+62/Yb0XfhqV6BvIYaH4+A3TdnQfrXR8+Ng6byrF3Id/TytKhmw1tE1OtScPQJrrhMTmKqz7DswM+dYDAja9YsAzQjLQ1PGD5JA7/7UdNpmbJi4CSGgIEh0i3S+dNllWA953fsA20aZ59Xh4M5JnhFohDmLrwPP0AF7U6idIKhTV9epLV+nFh+/Aze2Hafu3ZS2tX642ryr87B/KgFFqELzFebI8kdr5SBFCozDynJMvx7J92lA9BPIie3uNFsbjDzRY9o5KCfL2gR88mkEVqOvV/91boBmTwNITEWc=;31:rrU4641+To6HSj/3OVjx7KLZFOdE6Txfvo7xLYublRiQEKsaSLFSvfCt3ItwEWS9/RfmA3VBCwt+pUwMHYkcHyWrE+k6TO4PcS2KOD5nt7sMijbHz0RCJDki3GJB72iwTOikJbCq1GLlkMJVVGgV96GeHM2ipa21zxRGD9S+3IQzoqMwww5Yxjxv4im9d3BRLA7y13B4DdxdZr7ekabXtFbk6hGtZD0jXpNRAHgrUAM= X-MS-TrafficTypeDiagnostic: DB6PR08MB2821: X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2821;20:hA0bjFXCXpuGXo95PpCI2AVcKL/k5Zw6umSzqupRjQrm6viUNE5AuOTypqD5Y3Z663kstI8yaO0TCeZizBZ6W5IiTivUwdoFvy/24o+YfbHK5KIiXBjvbpt0/TTkXfUNUDYWj7gTknfyVd0nURH6p/Ibf7QUTGTPOP3t8A1ykUL0+/XwG2Aa41F9iQFRLuz5VQBdIxWtgNG04JDNpvNks23KnXM+2kp8YS1va7mypA9CFJKms0jeB/I9frji0NM+6n9PKB2QRE+0tdI3IexVYc7e8X3ZxPXG8od7gt6u4zFlUScgeMozuVPiGXm/CCo4whJ7H/Owj9qzPdBa6LNIjpdtrDAC2Up6Pn7tUXbMypwfs30AZeKmYpEs7czboQbCLyNBhtnipmmNiFW7h/DGnJbs1cwbiuoo5++ZNBYpqg4=;4:BdJahb0PtfyPCpH74k52OWccxBYo5A7PeuNF9gNLLL/Nygl3wAesUCTUu9b/D+F1R8SUeD+lrbm5dLGVoYVD75jCFMZgNOOJ7x7JSZEMFUX+hKB7OkkGmII8kJrMU5GqOIwE2/T86it7sdWNVz8HxxJKl8IFCjz7UMSTyVvqkWtaJ2gZbiWeJtCD4QQPZ6ysDsV0qtSPPONzah3WhdNCpHtV9MbB8dGmLvGVUEx8TJTNFdSZxvf8TiYArlZ1X0d3C39Xpc7qcf+PX4DqlFZBEeHso1Xcr8KsU/5xXgjltwWZwFiozJhkhb4pq7rLydVs08VrBDdwnteAOq5D2xkzUOj9PjmrqXtq8mMapA9BDKTIJQnvep6xLSHDNR/tyu2H X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(215639381216008)(211936372134217)(153496737603132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(93006095)(93001095)(3231022)(920507027)(10201501046)(6041248)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB6PR08MB2821;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB6PR08MB2821; X-Forefront-PRVS: 05009853EF X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(6009001)(376002)(346002)(366004)(199003)(24454002)(189002)(31686004)(230700001)(6246003)(189998001)(36756003)(39060400002)(31696002)(65956001)(65806001)(66066001)(5660300001)(68736007)(47776003)(93886005)(229853002)(316002)(2906002)(52116002)(54356999)(83506002)(77096006)(16576012)(53546010)(6486002)(50466002)(76176999)(54906003)(50986999)(105586002)(64126003)(16526018)(106356001)(25786009)(305945005)(34040400001)(58126008)(7736002)(3846002)(7416002)(6116002)(478600001)(2950100002)(4326008)(2486003)(65826007)(23676004)(53936002)(86362001)(6666003)(81166006)(55236003)(6916009)(52146003)(33646002)(101416001)(8936002)(97736004)(81156014)(8676002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR08MB2821;H:[172.16.25.12];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjZQUjA4TUIyODIxOzIzOkt6S29VVXpOQ3J3UTg3SWkxYVlGNjM3bHlw?= =?utf-8?B?VWtQZ3FFd1dvazNEOXYrcXRaKy9WVURhMGt6SFFHakNFMnVxYkJ4WnpmVlZI?= =?utf-8?B?cTFnV04veU1wdjhqbHd2ZU82YVV4V0czT2psMUYwODJrR1dDeU5UY096UU5O?= =?utf-8?B?OUpwaXNhR2tQM3RjT0t1N2JZd0F3WHV6S1Bxa09DMUhjaHNpRkFvdFNzZ0JL?= =?utf-8?B?c0VBWkF4R0FrUUk5N3ZyaXpRbnV6Rlgwc1M5NDhNN2FpZHpMc1hjcldqY3lN?= =?utf-8?B?c2J0dUh3eE9oMW1IVGptam5HSnRTZ0szQklJZnIveWhHSlpiOWttQ0o1d0Rx?= =?utf-8?B?a2d5QmRDTHBneU8xcGpNTDl3NzMzZE5abFRaR29neXpTZ010QmdOU2JORkpu?= =?utf-8?B?RTdLdjFCdjVyWjhiWnlTZ3FLc3RYcFhtYVFWQ3M4YVpDMk9xeFJ3Rjg5SWpT?= =?utf-8?B?L2VkMlBaRjNJTzZOOWJJMVZOYWljRmVrZ0ZKZnBqWHVTaUFBa2RiZGk1TTNE?= =?utf-8?B?N3RVNHZIbU9yOFBQZ3Mwd1N6U1hWK04wUzhkdmZLR0g4dDhwNURBc2ZBenI5?= =?utf-8?B?Tld0TGlxNEY3Wmpic2NEa280bXljd29CRVlHUGFLNUN1TnBIYnEreThvWWRG?= =?utf-8?B?V2VZTk1GMUkrelBkd0sxazEyWkErekVPNlFpc1NkMHZza0dES0lZS2k2UnNt?= =?utf-8?B?QmVwb0h1c1pyc2UwUnpadE56Z2QrcXNrdDA2UUx3ZmVBT21ZaVJHSE1RYWJn?= =?utf-8?B?MUJRQ3J5d3RYWjJZQ0pzTkJGdmdaWHRvSEMvWHFIWTJVVk15cE1vbHdrdGZ4?= =?utf-8?B?NElZNGxMeTZMNzJGWktVcTBnbHZ6aUNJdVcxTXdMM2h5YU9yaWRadHE0dzJu?= =?utf-8?B?Um1PSVdqZkJ0SWlFbzAxUVp5YzY1ZnZjMTlPQzVsTEliQy9WYU4rb2taVC9z?= =?utf-8?B?Vm1xMUhjbVhkaFZKeDNUUG9heURVZi9OZ3N4U2ZhSzcyVWtObk1JRDd1M1BX?= =?utf-8?B?VGlvWisrUGFQUlJlWTZJamJ4WTl1aTJBak5VeU9Ub2FIZDNRc2oySDByWnJo?= =?utf-8?B?SEpsZWtrTG8rVmNQOThtVjl5bW1LcTloVWo1VkJVK0FJN01Oak1GMlRscUVH?= =?utf-8?B?b1Z5R1U5RjRnbWIzb1dSeEhmajJRVUFjMGRDYzJTTGpPZmgyaTRTN1FPM0dI?= =?utf-8?B?THdRNG53MDJ0OGJ3YmhnRW92YjgzVUZUWDRJai9aMk5UbFZTcmZiTWJ5U01G?= =?utf-8?B?R2ljVzhMQlRMeFM3SUswZkMwSG1oZ3JrZDZDYjBtL2MwbEhjaFFrNDB2U1g1?= =?utf-8?B?MUNwc24xU2VEclVDMkFuUjNyZlI1L1JiUGZ2OU81cWN4NXlhWjFIWWFvU2tr?= =?utf-8?B?T2s0UkhjK2ozU2czak5aeUYrQ0lOVDVxVWkvd0t0UlBlNks1dTlkOHRRNmlM?= =?utf-8?B?RysyK2Eyc0tKVThvVXFHRnkwc2JMTWFqRm5PWXU4YWVmeFY2K2h5bGsxODQw?= =?utf-8?B?cTFVTGZmSzJJSTV4c1V1aGl4V0IvYUk2RGtUNVdxZGh1enRjYmJqWFNiaDdp?= =?utf-8?B?TFFwWEJjSlRINm9hdkdUODB2Z0J6dVlXYXM3MzgwdXBJcjlMNDNmVVVzazJH?= =?utf-8?B?NjlKak16Q003NG92Z2x5RWVHUEd1R25NMDRsRloyNTVGUUxJU1d0N1VQc2tz?= =?utf-8?B?ekdaZTBQNExXVnFXQjA3WVhIYWZaSVBqMXczUlZjRVdJeUhsS3packViNHN0?= =?utf-8?B?b08xcmNOSnloaGZ5TW9zUVE5TjJydEFtMnNlOFQ4QlZFeUovNTNPb29VQnpI?= =?utf-8?B?V1d5bUxFbThpZ096QytFQWE0Q1QxVnlaN2lRcE5KMkxzMnZVZjFFYVJyWmM3?= =?utf-8?B?UjZYMFd2T2V0Tm5UZG9sNnR2ZTFWRVAvMHNNbTJwVFU4YXFaSVUwL1N2N2xx?= =?utf-8?B?MmVxT2o1Vk5RNkxnSkFqZzNQSlF4ZGh6WlZDb2RCeDBYVnhGTzl3dmljMGF2?= =?utf-8?B?WTlrN3BSaE4wdHZNWThGekJSNWh3MzFNOTV6dlpRbDdEcEtWZmNwQ2plbnBW?= =?utf-8?Q?Akc+JSq/+fmd49Soty+CFPqge?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2821;6:qD2N66tWIUH722JcLT620hZmCqQYfvNmNe+4I5DipDa4/4oMFmm2mnguXRdB5D3e992YXQdG+FkL7nEHK73Ci/Y4kh4g/jiOxpH/vojjb0Q0eteywuSTEcpc/mKWyCVWZ0Qxtxp5tRY73gfgSP8wq6R9jnQOwWF6WJpgJumIyVhHhj6nFPP21lIxo0CI/WqaeNidOpcJQPKKiV+0gubO+W+M+CL5y5YZ/NmHefcEVOcgp4FPhYYxcy1ZjJiw0Xp1Q4xyz2V2GJ+QSXlEjE9fwIL33W3QqnWapoMz/8IGWyjKMi0+Xx927tRn6jGBIyMH4zX0+gL5GS/ZTNsFRTEPYUHgByqiBCUp9On9Ef+kqm8=;5:gz6rqZWDszYxOMfRKnm/Szn85mOIy1SYbD+kDTT/Lx3P75CpJFw4h39fqgkOl6nisQXhM8W2kNIiKXRJS355Rvd2Wg/HAYDFuo9A72xMLP0u/gesnVYwvsRVV6XkjZXzfzDxWz0m1G35q/IYGYBiYVEGB39QaUOYRsKsSVvGxi4=;24:Oq6jGB2nOsnNdzUpJRNmdBnGe57r4z5cowwmDLu9av6QXZNLDw7V0Lpk8qzaFi7URiZWCt05kXmNWRRQji/NIikJU48cCFCvMS+IIlCqjQ0=;7:9p4GYclc7D1DUW/XuicCtbZo/wAZokOUry1gdKEUBt0Ub+WsR7ZX5VYeSss/rjWO0HattYNEQY01hqZ/hH0XiT1cZqvgesa74QmJx8LQA5SMa3cAOsXzMp8SD721ebWuaKdpCB3jwtHpkd27EC/xlTXZVkGFTNrMR9fde20cuE/hKO+5Urb1qLvDCcrzqgHv+xhJerCnDWH78kqzmHA9Xdb2KvPoRxfmQCLtUBhj593fF80lLa+Xu9umun4n00M2 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR08MB2821;20:F6kfmbSuqJMOqwY++bhIdVvo2+LUNaMfxuU3hDbW9YE2PFaJTb5O6+XUlqcY9uPcRajQxgmN9jdi3Bh9r5HXUMHpmr273RsJ2rJTtc5JEOSbJ42nr2Z/92bIzetMEmnHUKlTHXvmMHU/AYwCXQfuWbkF4AFQgtYNo+uR8HW9ONM= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2017 10:05:14.5232 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 09a8a704-4725-4292-58b8-08d53259b18f X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR08MB2821 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/22/2017 06:22 PM, Andy Lutomirski wrote: > On Wed, Nov 22, 2017 at 1:05 AM, Andrey Ryabinin > wrote: >> >> >> On 11/22/2017 07:44 AM, Andy Lutomirski wrote: >>> The cpu_entry_area will contain stacks. Make sure that KASAN has >>> appropriate shadow mappings for them. >>> >>> Cc: Andrey Ryabinin >>> Cc: Alexander Potapenko >>> Cc: Dmitry Vyukov >>> Cc: kasan-dev@googlegroups.com >>> Signed-off-by: Andy Lutomirski >>> --- >>> arch/x86/mm/kasan_init_64.c | 9 ++++++++- >>> 1 file changed, 8 insertions(+), 1 deletion(-) >>> >>> diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c >>> index 99dfed6dfef8..43d376687315 100644 >>> --- a/arch/x86/mm/kasan_init_64.c >>> +++ b/arch/x86/mm/kasan_init_64.c >>> @@ -330,7 +330,14 @@ void __init kasan_init(void) >>> early_pfn_to_nid(__pa(_stext))); >>> >>> kasan_populate_zero_shadow(kasan_mem_to_shadow((void *)MODULES_END), >>> - (void *)KASAN_SHADOW_END); >>> + kasan_mem_to_shadow((void *)(__fix_to_virt(FIX_CPU_ENTRY_AREA_BOTTOM)))); >>> + >>> + kasan_populate_shadow((unsigned long)kasan_mem_to_shadow((void *)(__fix_to_virt(FIX_CPU_ENTRY_AREA_BOTTOM))), >>> + (unsigned long)kasan_mem_to_shadow((void *)(__fix_to_virt(FIX_CPU_ENTRY_AREA_TOP) + PAGE_SIZE)), >> >> What's '+ PAGE_SIZE' for? >> > > __fix_to_virt(..._TOP) returns the address of the *bottom* of the last > cpu_entry_area page. +PAGE_SIZE returns one past the end of the > region, which I assume is the correct thing to pass. > Right. Perhaps, it would be better to use variables, just avoid such awfully long lines, I mean like this: fixmap_shadow_start = (void *)__fix_to_virt(FIX_CPU_ENTRY_AREA_BOTTOM); fixmap_shadow_start = kasan_mem_to_shadow(fixmap_shadow_start); fixmap_shadow_end = (void *)__fix_to_virt(FIX_CPU_ENTRY_AREA_TOP) + PAGE_SIZE; fixmap_shadow_end = kasan_mem_to_shadow(fixmap_shadow_end); kasan_populate_zero_shadow(kasan_mem_to_shadow((void *)MODULES_END), fixmap_shadow_start); kasan_populate_shadow((unsigned long)fixmap_shadow_start, (unsigned long)fixmap_shadow_end, 0); I'm also thinking that we should change kasan_populate_shadow() to take void* instead of 'unsigned long' to avoid those casts.