Received: by 10.223.176.46 with SMTP id f43csp2529990wra; Thu, 25 Jan 2018 11:15:14 -0800 (PST) X-Google-Smtp-Source: AH8x225apjmyHNbCmBPs+YUsE7/mCWrPCXvdi8sIHu/1DJr1aZB8qI3ttGcyonQEm0o/A6RiEa01 X-Received: by 10.99.138.75 with SMTP id y72mr13738650pgd.90.1516907713934; Thu, 25 Jan 2018 11:15:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516907713; cv=none; d=google.com; s=arc-20160816; b=A9vDRut4yINIw8r4wxMbXBFBdSPklQxEqRKcQOsaDbuzIzs1c3x3PO08nY4ANmrcaK WTa+QZePCHkrElmZIuxm57VQRtbq+8+6rv+CWMPi2A1ZmHYtgAC3YD3sjvNCUxT4Yttm ZCZz0hzF3n21dQf+jA0JBpn+JXKBi6rkUuPqwd09ouOtEtoIC7SULwCmzVAOH/EdrT2c z6mGyVEImcAXRRBsnuXuhCgA3gWO4545L5h5C5NaZoznV/05LTd5U9uUIlrT+yb6mZ84 5uCxw46T1Z/i4m8fa+5DTo6aTPgb0jIM3bViqU+/EjclW/yB0qrK2kKNF1RFAzgX9FqX A0Ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature:arc-authentication-results; bh=L2afUy6ObMFI/IFY9Jg2qsv6e30NZlqMgsXr/u5QkLY=; b=jtn284GGpeAmzFbIJ48j558GP2QAny8F7naCIcB4EvGWilsMCG6wM8AORm1hMOCjmC LBOOBtjtk+U/oiXOpat4br/MtYAZ0+2Sb6NB+0cJWTHmAy4WD2ZvWnl0YdQKtODzpZ9P EJUQQR7RcF6p7cuEDZq80o0D7Gzfilyn+bMWMLD0NiGa13o5hKtgG0NgRwq0WKhIGnIP gNSJbyu/2OKHD5+JpgSbdC4ZLzBe2XaJz4AFNUZ3hkkPnzCGKCBXmeX6unOBeBT2NON0 gMM2EPH+gXLxbHQD0GF7OqczzBhD2MF3SzArcoiOUcLh2kG26liFPs3VarMNETDC3V4l zoNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector1 header.b=JB+MrU6O; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t9si1897017pgc.756.2018.01.25.11.14.58; Thu, 25 Jan 2018 11:15:13 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector1 header.b=JB+MrU6O; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=virtuozzo.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751334AbeAYTNx (ORCPT + 99 others); Thu, 25 Jan 2018 14:13:53 -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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=L2afUy6ObMFI/IFY9Jg2qsv6e30NZlqMgsXr/u5QkLY=; b=JB+MrU6OmYEz0XpTqQDcOq4S3F2PENw7Mp5qY25OPq5ciPmyIksJWGjQc3mskumQrQuSp5lcIceHYU/h/qUVN943NumgP6dpHvNLBMhkWV/33mPeqFjlI1AmaCkm/x3Moqhl4gOI0QI1I1mVZrkchd87Dr7IewdHIH+3kkxqXds= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Received: from [10.52.82.100] (84.47.128.244) by VI1PR08MB2831.eurprd08.prod.outlook.com (2603:10a6:802:19::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.428.17; Thu, 25 Jan 2018 19:13:45 +0000 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; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) 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: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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