From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752936AbdKXNM5 (ORCPT ); Fri, 24 Nov 2017 08:12:57 -0500 Received: from mail-db5eur01on0118.outbound.protection.outlook.com ([104.47.2.118]:45238 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751970AbdKXNMz (ORCPT ); Fri, 24 Nov 2017 08:12:55 -0500 Subject: Re: [PATCH v3 05/19] x86/kasan/64: Teach KASAN about the cpu_entry_area To: Andy Lutomirski , X86 ML Cc: Borislav Petkov , "linux-kernel@vger.kernel.org" , Brian Gerst , Dave Hansen , Linus Torvalds , Josh Poimboeuf , Alexander Potapenko , Dmitry Vyukov , kasan-dev@googlegroups.com References: <8407adf9126440d6467dade88fdb3e3b75fc1019.1511497875.git.luto@kernel.org> From: Andrey Ryabinin Message-ID: <527f205f-0e2f-36c4-25a1-f9d5c55260bc@virtuozzo.com> Date: Fri, 24 Nov 2017 16:16:18 +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: <8407adf9126440d6467dade88fdb3e3b75fc1019.1511497875.git.luto@kernel.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR05CA0254.eurprd05.prod.outlook.com (2603:10a6:3:fb::30) To HE1PR08MB2826.eurprd08.prod.outlook.com (2603:10a6:7:2e::25) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(2017052603258);SRVR:HE1PR08MB2826; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2826;3:DM86p+3oDda3KhslruGsFHfE+tzmFNnOjTc8YtWLkiRh7a7hgSK0TkHinpIJYs58gJNmCq/iLI/blgwUXLqhztAh8wFtEO+sYof2G03DsbO40vxcdUyW/1wM5CkG61x5F/bWb1Mw1yEGQ+65Tz9CDk2nXCvlFDGRUslhKFUEwwUVbLfKtVwiPIGz48YNz7JxjBnZZhtz6HZ3TBDrl/k5CJqlaoUnphq6uECami2vtLemf2S0ndVBJq2Za5WBnQFK;25:EL1BtXJMHix39IMiWvx29kt6vbj4iY60tFJPhFxtRv0xFV+w6kbVgs+ERPtmgekBQPYwXYmHUzX3kpN96vcCFvYirFsOkxAXtVeh5+6DLwN2JfcRdyb3UQzext034tNpJ3pt6si6bftRdi1GuOqrrEH8p7vHdPvRlGeKRv/GJ8qzX1W3Wv6GkJWiZTMSu8qqZZBu1c0ZGAENGiCWJKZeHCM0RVe/UAJ8zXShW+MQo1V/bHS9imIpSs4ZAnFL/LrFzPhqX2gXzu+wJ9VBQZ4XEYjqhENr6QSa3+etOgrCPAKiHyNT8rRg8yQCX4azc0mMIV4GzixxIWTbF0ukJUaJCw==;31:tRc7jQOsRHmFtecUIhbq6WoqravXQkz+2nd80aFf6mimU/LprMDH5qvbHBlPVmYMYBT0IxZN1t4JH9Bi8CtvmvwSP9xmG3fH1MKm/SFDKHRmhYDND7HM3/x/4+sdYBXMidjuzAi4IKnzi6vLw5yGbtJWEQHE4XrjRpktuirfnkaO5oJWMgmpuvjpDzc/QBHuDjBa5WL81uquN0MBjivdA1X+YJXCy9shTSPPd/Ot9sA= X-MS-TrafficTypeDiagnostic: HE1PR08MB2826: X-MS-Office365-Filtering-Correlation-Id: a7a7ea2f-a96f-47b6-df79-08d5333d11c1 X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2826;20:RtmhOMVVrfa9IfT8smtt13YbHjP37SbapVsyYCkyqLI/c8z/9Jjchc63gdQ9lRfhttlruwoA4lXWCx4QOZp3EBLLBZMS07aEplPO4/YvaKVnTGyoDljxmnjhK2nVQePUWjE+yy3yoWyMI4HtAMRPC/lxy0aMtCHgsKd/0oeqFfZOafI8cx/lZtvWAfFz3cXmS+Y6xrbN2rdjjiYvAicP9Ri0tAuGzVjiztWGeHUh8i/D/mD1hxlbJRGQ0BJOahEd17I5pb4Y0j9TA9+c4l5x+tcj24+H+Wpg6cAJtq0yfRHYLO4ry30pX3YniNw+R/Dy3axkX3pEgrOC+KBunrPTQPZiY43/sOa14rqULyt5o8EN2cZUInbOXRghTqJ5p9iyBmv9bxbpF4NR1/M3WBtnuTkj9xuWbNdPxfTMyycxurc=;4:AqbnWRKJ+vaMjbd46o7+VLoRzj0HNGZiMDayFtYPZvGl1ILDBirhecKmLya85bS0WTNT7AkBOg3i5ALJNI6I8OhSOuFXiXEoS+zaE5+c0ebOkvMKODte2B2UHXBh409cv5IlXDklkFvnLCX7xqv7/N6XIaCrs+Es2nJtr1D6LSSDF0/xsTNLlR1M83lMy0qWgz6w70oqQ7O6Abp51+wcTAtfWPHl7sPi9yeqK+YfjvFh3I2+gzgCGAt6QFFpKqj2bvr4lLUbCCsoYbOEZEBVkyt+VAPbm7PSmpEkOAsqrLrtA22Gull5eV2UKq0Pw0gAfdX9jRkBk78jpSuNnBnoH+eIV8KS9zVej3WGGmc+sW0PhIHfGtPlLbX1v4MfFS5S X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(215639381216008)(211936372134217)(153496737603132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231022)(920507027)(93006095)(93001095)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123558100)(20161123560025)(20161123562025)(20161123555025)(6072148)(201708071742011);SRVR:HE1PR08MB2826;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:HE1PR08MB2826; X-Forefront-PRVS: 05015EB482 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(6009001)(376002)(346002)(366004)(24454002)(189002)(199003)(52314003)(229853002)(23676004)(34040400001)(52146003)(4326008)(8936002)(55236003)(52116002)(53546010)(50466002)(25786009)(53936002)(64126003)(39060400002)(31696002)(2486003)(316002)(16576012)(8676002)(7416002)(2906002)(81166006)(36756003)(86362001)(81156014)(305945005)(83506002)(66066001)(76176999)(47776003)(65956001)(50986999)(16526018)(2950100002)(189998001)(3846002)(54906003)(6116002)(54356999)(33646002)(31686004)(97736004)(6666003)(230700001)(5660300001)(65806001)(101416001)(68736007)(106356001)(105586002)(6246003)(7736002)(77096006)(6486002)(478600001)(110136005)(58126008)(65826007);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR08MB2826;H:[172.16.25.12];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4TUIyODI2OzIzOlpVcTdPME1VWjk2Q2xFQnlxZitveWVjdlAr?= =?utf-8?B?cHgrcGNXUzFzS2NBamlKTkJRY2x4WVNIMzhQNks2SFlTOWJCdTZmNkdZbEc0?= =?utf-8?B?QjYrNTRDZ0VwZ2h3M0Rjd2t2aHdCNlhIWUgyUXluYmJqMGhibUV5VG1LWEVD?= =?utf-8?B?elN6MHhmYURvWkZwS1djbTY0djc4SzEvcDFTRUp2QVRGa1MxVUN4dFFPbi9O?= =?utf-8?B?V210a21ETjVNcVdIbE41YTFoc1NIV2ErSjZMd0tyVkZFT1ZtTG1oK0wxdFE2?= =?utf-8?B?T2FoZEczUDhHbUNvcUlsb3pUNGpGaGZJa3RMdkQzOGZzZldIT09tc2dwUW9G?= =?utf-8?B?RVQ1SzdJWVdIaXVJeXlwT29xd0tXM0xYb3dkYzJpVVp3NG4zZ1NZZk9jQXUv?= =?utf-8?B?Y0lONnVldUhzcUxLb1N1bzZXZk5qaWE2ZlZVWnY1N25sYTQ0aHF4L3hySW5I?= =?utf-8?B?NHdNdkZpV3luSzM1eVRmSmZRQ1lTaU1yaU5Wa1d3TVZjRVBmTnRBclBnTkdp?= =?utf-8?B?V1d4RDl5U2YwdUh1cEk0NCt1K0IyWFlQaXZqMGJxWloxVkpwOE9WUEprRWhn?= =?utf-8?B?MkcyR1JqYmlXSmc2Tk9uQ3M5TWRicVQzVHo2M0lyVUwyUUxTR3VmMEsvaTNx?= =?utf-8?B?NDRLL3A5QXk5YXdwbEpGdzdvRWx1YzByVmVQcE1uSFdLSVQxaWJUam1iWmhz?= =?utf-8?B?bktrbFd2Q0JWNUpVUlo5K1NoaHhBTURIYU1DQWtMVVo4bEIyOE9VR2NmRkp4?= =?utf-8?B?TUx6ZHk5ZS9BdHVmc2Z5WEk2akdkYW1ZallMTVJWRDlELzFDcGF5Y1JQck5W?= =?utf-8?B?b0Vycjg2VHlJNVFrMldCMmdJYURCbkV2RXM5NnppL2pvTnRkYy83a3hVOUND?= =?utf-8?B?aVR6U1ZrRW1obUtGTmhDSERFeFdLMTJlSGxWV1ZwSjBNRUlpR0Y5a1dMeTFn?= =?utf-8?B?UFcwNkMrQkFKZGQxclRjRllaOWljTlQ3R3ZKL1BnSDA3bEZwMC9RL1RUTDlS?= =?utf-8?B?UVJaejBsZzQxOVJKSU04bnIvTFh4ZndBVEMxTmpVWUk5TVRhanBhWmZPNUcy?= =?utf-8?B?cmtyT0pFMXUwazVFYkgzYlU0a3RlWjNKK2RGSVVET25Ya3FCd3VLTW1rdjFm?= =?utf-8?B?NlhPbm1QV1JiaW1RODNtai9lN3hNcjRzNm9QeTFNNnlqbkR3R0FiVGVQNVlW?= =?utf-8?B?V25jOUJzMERaSXFzTC82dGVqSS84emRqNmFsQlNWQXQ0VEdEYmdpM0h0MmJV?= =?utf-8?B?NEtHLzFadVNuaDkxZWlSMmF0ZUtRMTQzTC9DS1BiR0k0K1NqbFIxVnBBZk8r?= =?utf-8?B?L3hwOUpjYnpzSVhhdHBsNHhZdmZTUFBCNmtNa2hUOFlvTGFpdmlURWMrYklE?= =?utf-8?B?aGl0Nk53dTBkdmsvb2hDeGt2bzZBaVhQSnN0bHF3Mmx0cVIwQ1ZHeVgrVElj?= =?utf-8?B?amlYSWVnMjBSc1N6aFNBK1JLdnU3UjBoRkdSaEY0YTY1NnlQZW1hTUlWblkw?= =?utf-8?B?VjlkT3NFV0U0OXRRRExMYTVtSmU1RU82bmgzbFBQcXVlMjh2c2NyWndSTDFF?= =?utf-8?B?SGtJaldQWU5ZMmQwWHZjR1NzRkhrYW8yRjhvVVlJSkxuS2lVNmVBTHdvc3dp?= =?utf-8?B?NHZ5MGNBQk93TGlqTXFKSjlvRUoyNC9oY3RaNWFGMEt4U1VwSk8yUUlUbzJS?= =?utf-8?B?RHpkUWkveCs5K2VZTlp2SW9qOXFNN0E3V0dUTmVJT05vSmRKSnlsclRhV0hY?= =?utf-8?B?T2RSSXp6dVRSN2NVRml5clVha3FCYzlJU3BkZHBLTVpSY21VTDZzMkJBOUVs?= =?utf-8?B?cHcwOWprYk9lTkF1bCtQSldJcVpMNVZWQ2RXZmNENldhc2ZxYjNJM05hWU8y?= =?utf-8?B?NWkwL0xZMThDdmFMVUxTZU9wNmduOG96ekVxanppTmthM0daQWV0Wlp3T0d6?= =?utf-8?B?L0NIMS92RFlabzRobDhKek1xR0M3RU12L1lSa2Vmb1RJYWh3VTJGNU9xK3o4?= =?utf-8?B?TVpDS2JXbWJ4ZVgvQVZoOFJKaUQwZk4wM0xuZ0hQV1JucitTbjg5YUswSk5z?= =?utf-8?Q?YR7qmfyVJUYq9+h+ZBW1U5Kxg?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2826;6:kgmdEcmC+N5AvFNy8X1w27O5Xq/fq9pAFrWquR2RZ/ARYS1xnUL3MPRQJ+ApgEwhjx7vp7e3HxUhQvsdKmWhZEXkvW4etuDZp4919NgiPDjijUxwaAY2vkqL63AM5AEhj4kqqX5i0E1O3CvVr7SZISdmXA118iKJcgB13P7IrBkmcCT3MxnOtEKXki++stTRERReXN/OTCgRvS2ZMBy+OiVSX3Jkv5kLZ3puGNCqfsdx4zWZc2hoCDH5OcA6s32vJMvAIbzEKMhRz94mbuY2I/xAy4WMeDI9iuPCY5/70gEDZyIfeXgweS3GeToRhKWV1OddlGPkX9TaI6ZgApobNjZWeQ7KOx58vfLKrUgQCLg=;5:ToVzo7NtMzU6wLF8zdgq0alsU+PfILsoinErHU+NmkoYfzjTEZ4eKoD8LYU02rRp5GGGjzomA+BYZ6mmPeWXCKYza5BDCxKakoBfSGauZGD4b0FyrAXoaCCSF6Fomn6HzfVpxhQNEBgJXku1EsCVmCwzxR5D8mny3udWv5AuItA=;24:+nA1PbC8jjc9bCuFC+Dr4UjsjF3XU3BVILNl4RzIPWv96jbZK1Px9Ylmd80n7DDYlKZbAysInwg5n1zhHljURmh1IkbBvK0UBamKSGYfJ3c=;7:Tbbl4JF049PbVnIKUs0EwB72MZBM2yTSCcJEv6mcCDWwd/OMJiuC9OBMv4l5eNrgvveFv9AY56zoWf5liRzRh10JAkD+F0AcG6slBYfhA9Wjzvq3ueeshrDMH9JKo6lmGobcqW0IKn7JUiAIZTWY9p/qVNlFHMi3vUe98N4PDKO2v04pS60Fe4Hkc6WhlC9yo6Yp9r+pyMLm/izy+jASlnj+bIZSfR17FuIIaAHFRmrVPr4R0yjyXrDRpvYApWEi SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2826;20:LGRV0QuVZEIsPISsD4CJFB9no4lGCXSdvt64RILl/Wo1LbCwlOzaRBWumhjRNZXFLmLLFSXBJfirVtb4QvhxeIa9RXgiVL5gGxzE2y1sELTe5zlFREOuy6iBZ2p19QIW3E8iOV/KuPHvzWGlzlJ0xTe1c3peNUtVJlVaEV0WI6Y= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2017 13:12:52.2670 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a7a7ea2f-a96f-47b6-df79-08d5333d11c1 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2826 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/24/2017 07:32 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 | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c > index 99dfed6dfef8..54561dce742e 100644 > --- a/arch/x86/mm/kasan_init_64.c > +++ b/arch/x86/mm/kasan_init_64.c > @@ -277,6 +277,7 @@ void __init kasan_early_init(void) > void __init kasan_init(void) > { > int i; > + void *cpu_entry_area_begin, *cpu_entry_area_end; > > #ifdef CONFIG_KASAN_INLINE > register_die_notifier(&kasan_die_notifier); > @@ -329,8 +330,18 @@ void __init kasan_init(void) > (unsigned long)kasan_mem_to_shadow(_end), > early_pfn_to_nid(__pa(_stext))); > > + cpu_entry_area_begin = (void *)(__fix_to_virt(FIX_CPU_ENTRY_AREA_BOTTOM)); > + cpu_entry_area_end = (void *)(__fix_to_virt(FIX_CPU_ENTRY_AREA_TOP) + PAGE_SIZE); > + > kasan_populate_zero_shadow(kasan_mem_to_shadow((void *)MODULES_END), > - (void *)KASAN_SHADOW_END); > + kasan_mem_to_shadow(cpu_entry_area_begin)); > + > + kasan_populate_shadow((unsigned long)kasan_mem_to_shadow(cpu_entry_area_begin), > + (unsigned long)kasan_mem_to_shadow(cpu_entry_area_end), > + 0); > + > + kasan_populate_zero_shadow(kasan_mem_to_shadow(cpu_entry_area_end), Seems we need to round_up kasan_mem_to_shadow(cpu_entry_area_end) to the next page (or alternatively - round_up(cpu_entry_area_end, KASAN_SHADOW_SCALE_SIZE*PAGE_SIZE)). Otherwise, kasan_populate_zero_shadow() will overpopulate the last shadow page of cpu_entry area with kasan_zero_page. We don't necessarily need to round_down(kasan_mem_to_shadow(cpu_entry_area_begin), PAGE_SIZE) because kasan_populate_zero_shadow() will not populate the last 'incomplete' page and kasan_populate_shadow() does round_down() internally, which is exactly what we want here. But it might be better to round_down() explicitly anyway, to avoid relying on such subtle implementation details. > + (void *)KASAN_SHADOW_END); > > load_cr3(init_top_pgt); > __flush_tlb_all(); >