From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751267AbdJBOEw (ORCPT ); Mon, 2 Oct 2017 10:04:52 -0400 Received: from mail-he1eur01on0118.outbound.protection.outlook.com ([104.47.0.118]:35008 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751036AbdJBOEt (ORCPT ); Mon, 2 Oct 2017 10:04:49 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH] string.h: work around for increased stack usage To: Arnd Bergmann Cc: David Laight , Mauro Carvalho Chehab , "David S . Miller" , Alexander Potapenko , Dmitry Vyukov , Masahiro Yamada , Andrew Morton , Kees Cook , Geert Uytterhoeven , Greg Kroah-Hartman , "linux-media @ vger . kernel . org" , "linux-kernel @ vger . kernel . org" , "kasan-dev @ googlegroups . com" , "linux-kbuild @ vger . kernel . org" References: <20171002084119.3504771-1-arnd@arndb.de> From: Andrey Ryabinin Message-ID: Date: Mon, 2 Oct 2017 17:07:42 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20171002084119.3504771-1-arnd@arndb.de> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR02CA0027.eurprd02.prod.outlook.com (2603:10a6:6:15::40) To VI1PR08MB2831.eurprd08.prod.outlook.com (2603:10a6:802:19::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c1575e3a-fea1-416c-a232-08d5099e882c X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:VI1PR08MB2831; X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;3:PTRISO3yYpyXagDfQPvLtJIpn0b9j1NWYMo7HHhOwwO3EhyFHq/j0egd1DnLsnpQaUkhRzplLeYnZNlRZLclrIT8pwJnKZlSjNLa5blIMA36/mB9C8vIPDNQiD1k8EJTJilY4qGJgb3rzHJLqngY6cuN+KKCx5q9DdkVP7sa0Fm1eHvZQH1fwUQYw5v2Zwfbrb96L3LLEcf8IYLyuWOXPaOs3P3PHYliNUI5acp1XAWuMU9rJnWy9t7IlwtsRjAo;25:DARcO8/qaoNLpjv5AXHR/DlWktfzTsvddaC7Z4RqPNSHhE43Q82zX970R8dpLHqU6dqDbaGwj196tTqlsu9ogqWdS2TeFvxORUTWiAzPIJzQiHY0oRlGqpNVhhWsMYXGi7v9eVmlGbGqaKI7rCd+FMKotAGTZA/rQNphXFRxPz3+MMGprsMv7FYk2UDWjb9nBy0NzQvA7jR++9vgvCKx2A5p6SsqkNpUT1lbcm3FRNEDA3KhmaIxOqLZAtSD/ZbU0r6Coem0LzNcGx20gAUdsYK1sH1Yzu0SgpCtMA1eN+U6q1k0U9Gf53e6a/NmMaSjdbZqPVXF9A+uiR91cu/ssA==;31:LecNE1D+ipYzDbZ+gHkOBhgaZ6ri8TEaQQgKU2U5vI18y976FjOuup5Yrm5hWb5ZeBqvu5dTz0FJZMkYPITnamGhbl3ceMenQeEHg9ppVrzsAJEgm9WqN+hunxK0RS4ohRO/+i9L5zyOQndsQ2KnZZyW7IEl8UXZ/ZAqmD8JEtyq+4PtfCKPYLIwO/VXzJlws6T0GPwuBJ5ZCg9XL6FJ6+CL0LWM2wD6qBgVTIoBzHg= X-MS-TrafficTypeDiagnostic: VI1PR08MB2831: X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;20:JJxpbqqgNPvJC7xZ1Ieu5eFV3I12w50WxoVZE+N/W9LMBVlTtxDl/xr2pS4zhwJfurS6/mb55yAiaPcMBUPBOQcba8fxvtQL6WpzbY/cEs1iqIrcJZcVVQiHTiEHVfcj9MPZt9maF7b4qYgewuhEe5ncaw4VhI0Brs0+x3l0lAjSxYx+LtJe4XzucznXkALF15kP95J80+tit55diR0rrxFvn0hHj2erUxmEciLzol/K58ezJIn/H3LgJQvVWQMSpo0k+Tt5jk4XWoRfxwGpKV4PNoHRphaKLLa3hzgZRy5eOZRisJ7EepmFmLmH2rztvqU+i4r4HL518nQPxX9fcQpYBhRHPYhwaDBUtoLRHfoTr7+l5r3Fs0WJeuYU1Gk7RGczYIJQmnkx1Zxv7DwyUfOt5W9eJAoLu9KUNYxl2Dk=;4:ywMVefqeB7IPds2Uvy+1i70AG3/GIvXSXVPbgY2HjsQs0kWCc1DoVCL12me5YeMV+kQsyL8GAKjIeOHXsWv2ie79AkSWb0Nboedc9dvM/0zbrYT7R5LL5e0nkiXZfzQkj0B93PPKNbk6vsaoXFoy/rqOiXSlK2Cc7vomhnzozD+eBFO2FH6yO423JmElAMjl+JbHhu+i6IznvsMSFwPfINPj3i1ZOMN6VnoiIaniMEzrRDPZ6GZfAsSIxrdZ0f29lBcEM+Qcnb/QLHDqS3jSp4RPZhVD4sW/1+UsiBW7Q9z2dlOSWnJnabMOTMJ3nN9SIhe5NcPtCuoXIq6/wvKsCQ== X-Exchange-Antispam-Report-Test: UriScan:(22074186197030)(183786458502308); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6041248)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(20161123562025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR08MB2831;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR08MB2831; X-Forefront-PRVS: 0448A97BF2 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(6009001)(39830400002)(376002)(346002)(24454002)(199003)(189002)(377454003)(305945005)(65806001)(2950100002)(66066001)(53546010)(966005)(68736007)(7736002)(47776003)(23676002)(105586002)(6916009)(230700001)(6116002)(86362001)(7416002)(64126003)(36756003)(97736004)(2906002)(54906003)(65826007)(5660300001)(50466002)(31696002)(3846002)(6486002)(65956001)(81156014)(6306002)(16576012)(16526017)(76176999)(8936002)(8676002)(54356999)(81166006)(6246003)(58126008)(316002)(50986999)(31686004)(478600001)(53936002)(77096006)(4326008)(106356001)(189998001)(25786009)(101416001)(229853002)(33646002)(83506001);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR08MB2831;H:[172.16.25.12];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA4TUIyODMxOzIzOnJ3R0VscWtUT1ZxSENJRlNtMkF2dXdaUVE1?= =?utf-8?B?cVp2MjB2bmFjYTAzalBNYmNXTC91N2xWNE1melNvNE5iM2FQNFozYVhtQjk2?= =?utf-8?B?R2xYQ240QW1QSVd5OW41Um5BTTJVbWhKZ1FKZGtVTFlCMXVBL1YrdWZTT1Br?= =?utf-8?B?Q3ZYQ1UzWmJWbUNuNHRrQU9HOHRUS1N0dVJJWVcxSnFsVU9hVnBoeXdXMUx2?= =?utf-8?B?dkdWNFhIT2NYVlFsYjFaVm1hZlR4S29xSThDcjc0OVpIYmJValN3MWt1Z3Nw?= =?utf-8?B?NHdTVU5rVVV0OTBPa3oxcUZHSDBtb01SRnUrZnMvL2tMaUptdDFqd2RrUWJN?= =?utf-8?B?RjBvSklVNUhrVGs3anhESDMvTUxhUk1tdHJwbGYyM3dCMXlVaDU2R0o1YnZj?= =?utf-8?B?STNxOWdUMyt4dGlLbURxQi9QWFRpdUJuVWY0V1R4RGNaN2d2UkN3S25zaUky?= =?utf-8?B?TXJIaGdVM05QRFcwd2Z3UWJYeWoxRlYwM0NOdjdNUVN5RllTNS9zWHRySlZB?= =?utf-8?B?RUYyQWJlajVNQlIrZVp4ZG1Jcm80d3ZCcjhSWi9rTlhxZU8ySFAwU25ZY2xF?= =?utf-8?B?Tk1iMVcrb2pEZEhONzRsMW5jYkd2ejJyVDduelhNS2ttVUpOWHFWbkNMUGpj?= =?utf-8?B?UjlIV0JlcHRZTGVQNVB3eDNsREVsRjNCQ2d0RFkvam8zV1dqeWNOeUhaQk9N?= =?utf-8?B?NEhiYlhmTmdEbm9Vd01RSHBMT1d6bHJvY3BDZGswV2VuV0xycG8wQ3dRdG41?= =?utf-8?B?YU9nczAvS2dOMitNeVlkRmpLSkE5ek1rSVQvUS91ckttR3N4VjdwYWsyUFdW?= =?utf-8?B?UUtwam5ma3hxUWhIWGNYdURpNGgxSi80NWxIeTRUNDRUZWtSTlBuUkV2RDdE?= =?utf-8?B?VFFEemtnSTEySHRDNjZXdGVSM2xyM2dvdkttSG9UK0VxVVFPTzhWNTdOWk9S?= =?utf-8?B?Tmsxb2R4MHoxbnM5WE5XeUIvZjhSRzRxWHhOU1NPU0k2bHRqN0tjYnllOU5w?= =?utf-8?B?YXNjLzNKbHZnd1JOSXZzWnJuRFhKZGFXSUc2Qm1zN0tISjhYMEtvT2V1VlMv?= =?utf-8?B?MStLRGNoWGJxTS9rSVR4cU1mMDZNZERCWm5tWVNvZ3BHTXp5Rk9nY3BpMEFM?= =?utf-8?B?VW43eDZHQjFCTjFvK1pQeDJWbzRwK1NMOXZUcUl4K3Z6ajdBbVYvelJXL080?= =?utf-8?B?Y25LSHU3V1BxTjMzdWd3RGc4KzhhbUU4MEExcGpsREt1MVlzVjVpZFg3SjAz?= =?utf-8?B?TmpnMzRwNG1hZC9GQ0k2U09GNXpLVmlqYmVWYkJTMmR2ODJMbXl3c0NlVU1F?= =?utf-8?B?eFkrRlJ3WGgvZWp3ZGFUTkRDZmVnbnRZbHFLakRnaWpPM0VBSUxWSDBCQnAz?= =?utf-8?B?NTBycWJ2cnAyRjBqcjgrVmNjaEorcitmSy84akxxVlE2cC9RS3k4ckVSM0Nj?= =?utf-8?B?U1hxbmhLU3h1ckQxU3hkUmFYZU15MzNWYmdzdDhLbTc1dWpNMmJtOUhkbG5P?= =?utf-8?B?ekphSVdma09nemE2WnYwWU1adWVYd0w5UzM3MXArMndTWFhQVEk0dmFqU3ZN?= =?utf-8?B?SGc0RnNPbXRvNTA5bExZU2ZLVE9GNnUrUThNVzFmam9KdHRLZ3c1eStQNkQz?= =?utf-8?B?QjIwZlNvdnhKc2hjVmI1S2doNDdrV2tOM0VRbXlTc3V0eXlxQk5URUlvTlk0?= =?utf-8?B?anJNeEV2MmRVUUlraE5WV2hONG5lenhXa3RZeGxrN0ljaXNtSFUxMDdKaXgr?= =?utf-8?B?WU1NdzJFUkphTDNnZllYdHZoYmxDNE1HTHdPVFFya01Da1lVREZJZXhPN1U4?= =?utf-8?B?REkvRkxyUk5zeFdsWEVtNC9VTTg5TC9VZnZJayt5RnFMVnFwdkVvUTFFeGFh?= =?utf-8?B?OHVDYzQzUklSMllZajVFY2htNHZiY3ZmODVocmxVM0ZFMndOZ2RZeEE1b0E0?= =?utf-8?B?Zmtsc1Z2dXhRPT0=?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;6:5gYYVqrc75PCE8X4gVw8ypgOcQo+mdxkh+SuANN8wRRikPPLL/+N4+uY+pUWWRDSMKvss/GmTxWDy6JfanRUjKP+jUGOwVNg9HJCxUVSmKP3+1tTFDsQfnJj1/qlytbRWXC5s0yamuNdeQgMDqWnVuXcx/IkP6+Viyfc1nfpDtazPjhTp1tlYPvZPWDnJRIyGXJBHy3nlFM1Nh1vPp7xKJ/70AESMXg013sgZBLCjJ3kWozR3jbjiY5AWb3z9hqCxFNZi/WX7JVYXOe1uSWMbjTzZ9tBqfHad0zJAM2QZ1YRddzz5WyyQ6JY9LmsqOIIpTrZ2DcA+e+PWR7uYN10CQ==;5:vQAHG+LIJUPfy3ObA73wRq0x1Q/CKRVQYzlLYfDGKQXe6FrGcK8PNhQZPyz1IPlkyOR/CcDCDTGScFREmbawNW/PO4noaWT2NNKhiCtD6WfwaTUnzip4kmaQ5alGFYv/3Q+BJeJJNVIM0C9CAn9rJg==;24:NlAB2lyxVccbJDSeC7gHrwdE3I8eOvH3ov4km7we1Dxb3R1yGMr0LHYijI6VV+TERJ+tuBWzmnONKVlHwYm8LODNBTE/HG4GWBq7KI8hlXs=;7:aaoS9O9Fjl/jqHa0uJS9keGCUi7j+PsgDwAAavDVqfjalYoUp05rLFflLzRF7vGeOOUKN0qxJNmFqxvJ7HAk5OCpd25GdsGpR/ziGbsWbTKbLFDy48u657ZUUqI5j8gXWLiDDaqke2UX96fi7DMVcqiJ12rDOfvUwyEqOhUnqgwjDqJhHhvbKGzErYViyuEnSNbrz7Z+JrWYROyNynZIwFwDMIu+oa45WOQlfr2jqOk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2831;20:8nQjJFf5c9vcyPk5+AS34rw4dS98Jx/44cvEUx3SH618MaB/l+YK5x7RWsIqOuv0jl8OiZvHaDyc3h0oKaHBVJrJm1zrriPiVJrypdfH7qb9/p4HVUxc0n/yQUGDvxLFYHTntV6AzN+tZKrVFb1POLJn71OW0AqtFfXa1E0S5Zk= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2017 14:04:41.7997 (UTC) 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 List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/02/2017 11:40 AM, Arnd Bergmann wrote: > The hardened strlen() function causes rather large stack usage > in at least one file in the kernel when CONFIG_KASAN is enabled: > > drivers/media/usb/em28xx/em28xx-dvb.c: In function 'em28xx_dvb_init': > drivers/media/usb/em28xx/em28xx-dvb.c:2062:1: error: the frame size of 3256 bytes is larger than 204 bytes [-Werror=frame-larger-than=] > > Analyzing this problem led to the discovery that gcc fails to > merge the stack slots for the i2c_board_info[] structures after > we strlcpy() into them, due to the 'noreturn' attribute on the > source string length check. > > The compiler behavior should get fixed in gcc-8, but for users > of existing gcc versions, we can work around it using an empty > inline assembly statement before the call to fortify_panic(). > > The workaround is unfortunately very ugly, and I tried my best > to limit it being applied to affected versions of gcc when > KASAN is used. Alternative suggestions welcome. > I don't have a really strong preference, so this approach is fine by me, but s/strlcpy/[strncpy|memcpy] approach seems a little better to me, because it's not ugly. This ugly workaround would make more sense if we a had lot of cases like in em28xx_dvb_init(). > Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365 > Signed-off-by: Arnd Bergmann > --- > include/linux/string.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/include/linux/string.h b/include/linux/string.h > index c7a1132cdc93..1bf5ecdf8e01 100644 > --- a/include/linux/string.h > +++ b/include/linux/string.h > @@ -228,6 +228,16 @@ static inline const char *kbasename(const char *path) > #define __RENAME(x) __asm__(#x) > > void fortify_panic(const char *name) __noreturn __cold; > + > +/* work around GCC PR82365 */ > +#if defined(CONFIG_KASAN) && !defined(__clang__) && GCC_VERSION <= 80000 > +#define fortify_panic(x) \ > + do { \ > + asm volatile(""); \ > + fortify_panic(x); \ > + } while (0) > +#endif > + > void __read_overflow(void) __compiletime_error("detected read beyond size of object passed as 1st parameter"); > void __read_overflow2(void) __compiletime_error("detected read beyond size of object passed as 2nd parameter"); > void __read_overflow3(void) __compiletime_error("detected read beyond size of object passed as 3rd parameter"); >