From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-450900-1516907635-2-9952961292063681809 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.25, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES enro, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='com', MailFrom='org', XOriginatingCountry='RU' X-Spam-charsets: plain='utf-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: stable-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1516907634; b=YE1SRjnjTz8Q6b94+mhTYlVU/fBRqzAejKZPoSg/cj/jFl2 4R+wIVa3Ar8eOd1XzVh6ppmVEfsgU10KCVb4iCszizEif6TxXmS4O2Y7CSXcrcE2 5eWvbWvInGYx/G27mPao8EC+Z8hYmMX/+s6z+0rbNsWipnGJ7c+Dn0ihrtYTrnV3 qMI3iBH+K33jq67ZujTtUIwDz+MACLj/4j0UbYTku8v2jkrsMB1KjaAR7TdHQcNB UHPEp1l42ZaDjQqsnZ/OygM/9MJm0CNUtIOd8OwCcVDOBNCRbEtGJQdUwZQVBJCZ yyzUJML284Wc0YL/+r6GZNh67Ytz3rN6OwYQErg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=subject:to:cc:references:from:message-id :date:mime-version:in-reply-to:content-type :content-transfer-encoding:sender:list-id; s=arctest; t= 1516907634; bh=L2afUy6ObMFI/IFY9Jg2qsv6e30NZlqMgsXr/u5QkLY=; b=K 9gppABDY1Rtyh/zRRws58r9TXeFS2F4oMtix+u6duxbIjhFhDNV5SfzkvghdjYPY KVIc1fUPI97fQMLkS19NV3qT0MD0OTYF070EdTzCpg5lV5Pyi3b815i3I7PxnbCO uMS9FuqNSxf0tnWt7ZpdMr8Ql6QlwkD1m1hBNcTb+hvFLApLsXstP4uAVhqAO+KK Hfsb8MIEM7Hjj9ClnJ/S6D/TxKRI2s7nnj1gWioa2V8Y1gOOUU09grxqFUCwV0w3 bq3s+NomQOoLdJjer4/zKM+yTJNVoHEzGfQ2NssXHREDm/72ADPAp7fb/A3wkf2Q WxR+O7ZkogZpe6Qyr6Smg== ARC-Authentication-Results: i=1; mx6.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=virtuozzo.com header.i=@virtuozzo.com header.b=JB+MrU6O x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=selector1; dmarc=pass (p=none,has-list-id=yes,d=none) header.from=virtuozzo.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=virtuozzo.com header.result=pass header_is_org_domain=yes Authentication-Results: mx6.messagingengine.com; arc=none (no signatures found); dkim=pass (1024-bit rsa key sha256) header.d=virtuozzo.com header.i=@virtuozzo.com header.b=JB+MrU6O x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=selector1; dmarc=pass (p=none,has-list-id=yes,d=none) header.from=virtuozzo.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=virtuozzo.com header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751204AbeAYTNv (ORCPT ); Thu, 25 Jan 2018 14:13:51 -0500 Received: from mail-ve1eur01on0108.outbound.protection.outlook.com ([104.47.1.108]:61120 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750994AbeAYTNu (ORCPT ); Thu, 25 Jan 2018 14:13:50 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH] lib/strscpy: remove word-at-a-time optimization. To: Linus Torvalds , Dmitry Vyukov Cc: Rasmus Villemoes , Andrew Morton , Linux Kernel Mailing List , Kees Cook , Eryu Guan , Alexander Potapenko , Chris Metcalf , David Laight , stable , kasan-dev References: <20180109163745.3692-1-aryabinin@virtuozzo.com> <50fcfba8-fc16-b4a1-d117-24ebbe959c0c@virtuozzo.com> From: Andrey Ryabinin Message-ID: <0c502342-a4c5-846e-8ca1-ea5cb68f382c@virtuozzo.com> Date: Thu, 25 Jan 2018 22:13:17 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 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: [84.47.128.244] X-ClientProxiedBy: AM5P189CA0036.EURP189.PROD.OUTLOOK.COM (2603:10a6:206:15::49) To VI1PR08MB2831.eurprd08.prod.outlook.com (2603:10a6:802:19::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bf20ee25-97ca-4997-2e3e-08d56427c241 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:VI1PR08MB2831; X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;3:qWGGprqegjKj6Pask8s0IKY/He5EDx4DnYuOwjEtvfQKnH/oZaI7vh6JEdx7GI2zMGFEHAmDzJijfpZhjlfsoM07+FFHJPUFonsGolpNuTw2DEtMZTnisnIUpJaUKrFg8uI6pdAdcbXTunlmG17urqpgkAjfByXs9BIJwlvWSwxd5FIxMDtItISWQ8TAdsH8OqYsHjgRlIhpbDsWTeAF8ajGwqNAjvNTQVFgFdwJRomuX1pYMF8WKbYT+jdVX9gD;25:01YrwrwKKmPAfABKN7bmdC0WHxcLVZLKXJrzuCvol9OIUwEpPMl9bEv779kyEgIx+duYcqVMp97BKwQJghBuiC6I2CaD6KO34+CqkVkMHUQZE009vbeeEsGa5MK6AbQKEDPUno9S65fXaFLH69zIEZle1iJ8/0aoGeiX1Y3Rwgi66T3lYaV2ePhYo9xNmmNwej3KccqMLaKSp7T4DKA03gI9nqHPs8ED5730JIdA+cAkcPYW2d6ElRmOP4lC2MbpcWrhX+Ct/rx+6rDVsEgQjLC5R4a328CfPLIyFBThh0581dZy9QUcNl5PVCxAiVnYjUzQ+OjBYRHnMoK9ETDeSQ==;31:WL/qD/sLIFL1ayB4yYLyXvDbobh8mRjBtoyOCmAREZyedNQDzWhmV4NYs9p1O28f4vTO3yP8GGY4grorpr4/0JuRWGG7iUVuGPXUESW/P29AZj7RbBYJsBKad74dbH4oBAVuocLdRDHPOXwrm1mQt16Qw+5/MiFFXFHO49vlCUhrxnsD1mbih8Egi/IY1Wnheqh7+s1HqYTamQvtGIaDdbx+qUkRUiuaQv3059gRQJ8= X-MS-TrafficTypeDiagnostic: VI1PR08MB2831: X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;20:YAiHQwu/SH9FD7lXZFyDJc9BEN2VvPAU4gqPVo5HXbU+NCN7X2VQ/6NaS1K/YvVj2CzjXTzX0WI8dtDGpC1GnaDqt0Fn8PTBrTnifvMJ9z3uql4UxXcxwmI12OvRpXaeNcr7VIGD/nl1Ab+7yFxjN2LLtT6CWB6FDlkGj+O0LO7Z0gkD5mQ23HEIxbsYwoa5oADaJ5lWtlkuOChdlu8TA2lkZsjcf37JwzOcCCUajV67s1p0YAGJbiOyHQT1oYwo7PPU9A5DR6WSgagq6db+R4u7Ltu3DZAzfIWesTwl/uApLs1cKn/uUJWOAiiS88WayAJnsWFSFw7okR8xkDfAn/eJ0j5GgFclU5BF00jJ8QGCyZV/xYZO3TDSKLNZrojD3Z5PLdj4ccv2XrA2BsNzhnHuA4IvVm6j6IUQR56Jg2I=;4:jJ9j2/5ghrCOtGIPKqbBdsOQgJgn8gxrraccP/Vw+K1VBSVKzu23ClGZsQBy7NMeuA6xFB3aG/Q0UkIjvAOQn20nXzi4v7BxV4ZJ9WMUQ/rO9zKOQk9byv/r10l5yh7NqzQslyyMlVfH9ZsYNqwkp2BSNWOxe8fld17fCLpgmVc+Doo7/jgy5h8vfBvicmvjDaDZWWEHFJIXNgiYLvfOzohRzUZ+sal7u5SX6AOR2EX4FCftBZQryYxENI+y6mUTCcRJMJuGcZ9SLyiqn7X7veERha/qVX18sPcqsFl9N/o8d6UU02nP525S6dpY0/SHhFLJjD7BEgjyfjDyXIZbLz5qbqyIW8BVIMoB7KCJT5S3LlAP8/U9IfXwkjKR5i6M X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506)(211936372134217)(153496737603132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040501)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231023)(2400081)(944501161)(6041288)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(6072148)(201708071742011);SRVR:VI1PR08MB2831;BCL:0;PCL:0;RULEID:;SRVR:VI1PR08MB2831; X-Forefront-PRVS: 0563F2E8B7 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(396003)(39850400004)(366004)(346002)(376002)(39380400002)(199004)(189003)(6666003)(97736004)(53936002)(106356001)(36756003)(575784001)(6246003)(86362001)(4326008)(105586002)(31686004)(7416002)(58126008)(386003)(53546011)(316002)(81156014)(8936002)(229853002)(2950100002)(76176011)(81166006)(8676002)(6486002)(68736007)(52116002)(3846002)(6116002)(64126003)(305945005)(230700001)(65956001)(65806001)(66066001)(31696002)(83506002)(93886005)(50466002)(77096007)(26005)(47776003)(16526018)(110136005)(23676004)(7736002)(52146003)(65826007)(5660300001)(2906002)(54906003)(230783001)(2486003)(478600001)(25786009)(16576012)(186003);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR08MB2831;H:[10.52.82.100];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA4TUIyODMxOzIzOjhzWGxRNFlQWGY5SklJem8xbHFjS21iOStl?= =?utf-8?B?MFN4aWx1UnRuSEozcTBLN1ZQZmdoU3E2eU04N1B3SmRvL2ZHQWtrMDVsbXBv?= =?utf-8?B?WnJrZG9TRjlnVUM1QzJ4cHA4OTdRSjdKaHZnZkdUWlE2ZGJGMVhFdHBZZG03?= =?utf-8?B?QWhUbkduM0VUVXh5bi84b2htLzhwdjNlZkhMcEtZRkhWUkI3MUJnQlM4MDNi?= =?utf-8?B?dkFsRFlGaUFzendKT3laaUVXREZRbnM3Y1U0NHQ2NWcyRGpZa1FlcW9ySGpL?= =?utf-8?B?a0I4V3FRbGVnVHF0TXlFMTY2eWxBS0I5NzJTVmU5ZGVOYlRoRGJEVitPaUhz?= =?utf-8?B?RVhzS0NzcDcyeGZOaTB3TVVWSHpqZlpUajhIOUQ5ZEFRNjlNa2owNUJQL3k3?= =?utf-8?B?cm05VFpFSTB0S0RqODJlZ0kxNVU4dE5hTmQxbTU4OEtHL0VLa3NqK0RuZVl3?= =?utf-8?B?L1kwNlR3anUyUWRRMWpwWVFKRnA1c29iOWxNcVhiaUN3aVdmbjUyS1d6dS94?= =?utf-8?B?TnZnT3E1eUwwKzY5cHdGbnlDdGpHSFVRdy8yM0FQL1pja1R4Ni9DRkxqZzda?= =?utf-8?B?L1NiN1hDdURlc205S1R6Q1E3aHZhSHYrRDl6Uk5IVE5Yc2NMc0hLeGRWQ256?= =?utf-8?B?U1E1d0YydGtlQVJxUk5Qc3VSK3VsTjFGNWxNSnNrNzVtamZrSEdhK3Vsc1FX?= =?utf-8?B?ZDNQZXlrT2E0TW5sc2c1MmFkT2wwRFBKREVVMWxPdStIenpJSXdralZoc0hj?= =?utf-8?B?T3p5VDFQVmtDUExJTHR1eWtnWmVkK241ZDYyOWdqczk0YmFnYWlWWEc3NGVL?= =?utf-8?B?L3VvQ2g2NDJsRlNGMUpkb1BOamRSTzk2Tk9iSXFEelNYNy9uUTFiRmlXNlZN?= =?utf-8?B?YzlFS0dBSG93Vit1cno3VzZ5YjExTG8ycnkvdno1SGdQNTNsUk5QSVhUWk92?= =?utf-8?B?dHZ5S2xKMTA2T2J3NHZ4MEZCNVUySkpxOFY5UzZhVFhpUHI4QjU5TmVPeGFR?= =?utf-8?B?L3c2RldkMHJNanpJNWU0RTdJcm1rOER6N1lFQ0tQbWZtVXpBbExMaldjWW1o?= =?utf-8?B?eE5TdDJ5ZXpaYVRDTnZnTm5ESk5mYmJmMUg3NWoyYWQ3L0ljMU5NOHNIYldt?= =?utf-8?B?NFNueWNqZ0VxREpKS3FwNmVTZW1TTnFvMUI5bFFCV3pRYWZhc3Y1QUJGdlZF?= =?utf-8?B?cG5vNnMzbVYyMG1vcUlaRzQwU3VZNkQ4aGZrZGxwa2x5aDZ5citRSHlvVGd5?= =?utf-8?B?NVV2Vm9OTlpDTUNYa21yN1Y4enU2MDk4OXZGcU9FbWQxanU2eGllWGduZWl4?= =?utf-8?B?eVRvRVI5WTlCb1Q2L3NnWkFXMmltSG9HMlhiMm1BRXdtWUg5ajlZa3F6cFF2?= =?utf-8?B?Z2FuS0kyOS95emhWYUFOMTNKQmNJOHFVL3pMTzI1K1ZsdnVHV21ienR1R0Iy?= =?utf-8?B?Qyt2dnBNZ2dtblIrSHFxMWVrdXIrNVdoWmVuR3pibmI0STdSMTdabjlrd25W?= =?utf-8?B?YTdQaTVmNHY4UWZmNkpSazhueEVXSDdLc1VoOU50ampKNmZyNFlBLzJIRGdu?= =?utf-8?B?aEFrcUo0MThDNHNLZDFPSlZLNXFqdlBhWDhIMmovQVp3MjMrWEFVTnBSTW1z?= =?utf-8?B?dWt4eGl2ZVhDeHJCQWhrNVcyejBnMnRpdllKWWNSZXZyWjdTQlVFRTM1Z2JW?= =?utf-8?B?SzNEOUdwaWlQN25oWTdJRkRtb1lrek1iOTE1UGMrbFlzdjhKWnprcEdob1dG?= =?utf-8?B?UnVFRTcrYmZmQUthT1dTeEZCWGthOUZHN21DRHhleXN2RzI0RlJUMHg2NTF1?= =?utf-8?B?SnlmSy9rSzBFekF1VGlwdlZkREswNjBBU0gyT3pZbUdMNjhLcXpON2kxdXdW?= =?utf-8?B?bU1EbmlGN0pYbGtDb0hSbWNRRUwxSmQyZkpxMkN5UENWTGZmaEdhMmRZZCtz?= =?utf-8?B?Q3Rkc2JtcStsU09vdlp0eG9saERPRVQwRjBybkxqSi9Pb3UwVzg2MVZpRE5J?= =?utf-8?Q?2EW06G?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;6:IHDem2Lun6nq9/r7G8nh1I8VTK2AkI4MC9d0nWZUzE7RcrYfC542+CsE5bU2e97lq091Q737mRRoHfOGi86xSLg4HCBF209E/Q3z77s46Q+CLsHHuA6/WZ7Ovb/2p2slWiKrui7EPpZB2gHDIZKNGKJCZ1mnRrzTSI33YCNOLBvw9/Jo9XgxpmMn6RPQ/FbBvpIYwdFojbYOysJY+HVxTOfp/Gdx9tH1DN8IWIHWtdLbE6bwBIiX96ETQa4IsBplDdlEHZCoBx8aJCYBu3jjBIo/7G+vjqWLPw0iu03QWnKZWISTWVknvI5uKPuaHae/YzQA3/VcTfzQ7w92iuEtSpl/ew/fFM0FBNCYVgV1MF0=;5:wWyvI3cQGuCnqZOnT8ZT4kCmRJGNG2i/giFRspVPHCZkKrk7Do3qySUDaYKVHMb/BnC3fJgwu6hZpvJeoJOl0p2on+eqzAjeEGmNYPPwbQLCIyoEZpTU1nkTMNLPX5ejHWI3HnXLuxE7k/x3B97fEqcDionScP7TK1s2opfIyYw=;24:/TOBvtcqIExwbc2EwtgTxARRHy64sp6J3gyHfILwkv2fH1hsrkCzz7X0DleaBuHa2J1Fx4QwrCP4jVVg7HguF2JaBqqdr1zEVo7SDc2RM1M=;7:8TH9hxCIuDpYfvV7HAKrDR4m+0EHaEUmNvVCVKAU4tOXLFIYuDkmsNEKUJ1K77zq7Yo4/JQgm5sx7jodu6B+mZhga1x5/cakSlcZI86+bdpGeoCYgGcAda8bJNUk2nGE6KQXShVviNg/hpdCajnx2DMTiH8dDArTrn/FsdoMvKCegLc47iDFO4fP5kH12Ni/7rFmqbnlD76YRuOLrxFGOx1F3nVneDM1Kuo1gTnrZuSY+Mhevopt5qY/f9GuP57Q SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;20:Zo7gSDxiqA8AyFj3r3VdUZdDw1zULIsQz+DAq+3jPhBfRhtvkiByEOSGjt4BlQ98tjeaCZfauFW6QYE3Vc5hG4axASuYQQCZYdiNIHUAHkpRpsoTSoBeWhCLR9FG3oQOaEYnuKZ3E6uKlsd0404CThu0s4F0kINCm3qV6Y0DA9E= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jan 2018 19:13:45.6940 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bf20ee25-97ca-4997-2e3e-08d56427c241 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB2831 Sender: stable-owner@vger.kernel.org X-Mailing-List: stable@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On 01/25/2018 08:55 PM, Linus Torvalds wrote: > On Thu, Jan 25, 2018 at 12:32 AM, Dmitry Vyukov wrote: >> On Wed, Jan 24, 2018 at 6:52 PM, Linus Torvalds >> wrote: >>> >>> So I'd *much* rather have some way to tell KASAN that word-at-a-time >>> is going on. Because that approach definitely makes a difference in >>> other places. >> >> The other option was to use READ_ONCE_NOCHECK(). > > How about just using the same accessor that we do for the dcache case. > That gives a reasonable example of the whole word-at-a-time model, and > should be good. > If we also instrument load_unaligned_zeropad() with kasan_check_read(addr, 1), than it should be fine. We don't want completely unchecked read of a source string. But I also would like to revert df4c0e36f1b1 ("fs: dcache: manually unpoison dname after allocation to shut up kasan's reports") So I was going to send something like the hunk bellow (split in several patches). Or we could just use instrumented load_unalingned_zeropad() everywhere, but it seems wrong to use it to load *cs only to shut up KASAN. --- fs/dcache.c | 2 +- include/linux/compiler.h | 11 +++++++++++ lib/string.c | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/fs/dcache.c b/fs/dcache.c index 5c7df1df81ff..6aa7be55a96d 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -195,7 +195,7 @@ static inline int dentry_string_cmp(const unsigned char *cs, const unsigned char unsigned long a,b,mask; for (;;) { - a = *(unsigned long *)cs; + a = READ_PARTIAL_CHECK(*(unsigned long *)cs); b = load_unaligned_zeropad(ct); if (tcount < sizeof(unsigned long)) break; diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 52e611ab9a6c..85b63c2e196e 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -240,6 +240,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s * required ordering. */ #include +#include #define __READ_ONCE(x, check) \ ({ \ @@ -259,6 +260,16 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s */ #define READ_ONCE_NOCHECK(x) __READ_ONCE(x, 0) +#ifdef CONFIG_KASAN +#define READ_PARTIAL_CHECK(x) \ +({ \ + kasan_check_read(&(x), 1); \ + READ_ONCE_NOCHECK(x); \ +}) +#else +#define READ_PARTIAL_CHECK(x) (x) +#endif + #define WRITE_ONCE(x, val) \ ({ \ union { typeof(x) __val; char __c[1]; } __u = \ diff --git a/lib/string.c b/lib/string.c index 64a9e33f1daa..2396856e4c56 100644 --- a/lib/string.c +++ b/lib/string.c @@ -203,7 +203,7 @@ ssize_t strscpy(char *dest, const char *src, size_t count) while (max >= sizeof(unsigned long)) { unsigned long c, data; - c = *(unsigned long *)(src+res); + c = READ_PARTIAL_CHECK(*(unsigned long *)(src+res)); if (has_zero(c, &data, &constants)) { data = prep_zero_mask(c, data, &constants); data = create_zero_mask(data); -- 2.13.6