From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934805AbdKPPFj (ORCPT ); Thu, 16 Nov 2017 10:05:39 -0500 Received: from mail-eopbgr30115.outbound.protection.outlook.com ([40.107.3.115]:7728 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934397AbdKPPFb (ORCPT ); Thu, 16 Nov 2017 10:05:31 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH] lib/stackdepot: use a non-instrumented version of memcmp() To: Alexander Potapenko , dvyukov@google.com, akpm@linux-foundation.org Cc: kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20171115173445.37236-1-glider@google.com> From: Andrey Ryabinin Message-ID: <6f3b8fd2-d2c7-a37d-f79d-510e6cdf2ee9@virtuozzo.com> Date: Thu, 16 Nov 2017 18:08:52 +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: <20171115173445.37236-1-glider@google.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: AM5PR0102CA0013.eurprd01.prod.exchangelabs.com (2603:10a6:206::26) To HE1PR08MB2825.eurprd08.prod.outlook.com (2603:10a6:7:2e::24) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b7c68a02-0484-40bb-27ca-08d52d0379c8 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:HE1PR08MB2825; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2825;3:B7YDkU9+ita40ahqxVDSjdfREcNquF23akv6hneCI+A/yLtWJZ41cKVFaIrY7nkJ2lffPkOl/KvMjEYMZ/0h3T9oU86UwUcIWgasfS8NKy7m6vWl1keHjJsiQqGQhemEn1pCDxRVhq+ySTDx3BRkTqIEEXPlJ2vC9B4ewVe3886Jw9QidtqhIVuBV8fUv02YQ4DO9um8dBBBnnvPOlPLGAmJGyE61pfWin4aqlqFeCipbnKsC5pEoBTbonc03Uh4;25:2M9Pow0tTk5ExyAljqlNUsfCKld9XcRizUNLrpervqUlK6TX9aC9MS4j+YCBkzWy8Gw9b7sdteYNC8RfAzN8Y+RZkU4XjT3fN1oXoUSk64wnmaoeTho1twZWSev7k/QNCLa4vAez1OlHV7/PNumYyJJuv4yyTz4OnBleTF25so2g+9TLTgsPDSvgEQyJCL3Y3kcCnXRxExkO+nU21Rijta8x40q4YohqBRJw1lbbyAKpWh2HcCjcnypMQQ83HlV7EjAYyE8e5UCLHud+68S64idfvTUXM+aeCcXKETzg2EMUkhtU9//mmvpYKnlBFKXROBBXHdkufR4qaKCzKlfz6Q==;31:pkSR1hbwZLiGHUPNVfokhegcimGQbj7dK9aHAYhgHmHXzgNfXhKOLOcpRmJGmYG+Bomd5vCog64JhHDkkM4R9s0lQe9zTAM0yPBHm5C0ElXrGJq/uZFllnzGO81GLNTafgeICWSF25eE3pqD2eQOgYSZwt/VS1/l39ZbmNFLi2sXfjCGHecacgpZklpeTpDRtzBk5nwkzP413Lff5H/LjD9lfZsC3oM7TJPav8pE85o= X-MS-TrafficTypeDiagnostic: HE1PR08MB2825: X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2825;20:WpcI8/3i9539WnZ+/rc/Fqn3Uxpp0J8ixF5oYfObn/o74/roYo008iHk2hYyx764NZZNmwcSjZs7ZV+KNSDv4xWz3QvaUZGNBQyalAFD7YdVrJGCqPEm4sA3/xTxoMNVC9S+oGAnRjrcgMEmMv24Jwy0lfcuY/cVREcuz4ZIARoZLthyEsDBdn38LUBy7mfWWSknTOYODkqrElhxoF8uNuSstp92LLm+Ann8E6H25fGTEzW4VJtwQTJYTkqf1X2Wxo6duRY/Bj+DPWLMG75L8gYk7bujhTNraMqUIfPUsAtTuasRgUvWFn71wtBrI/QdsNpQvMlI8uu8OMyxHEUL2QGHAdczMdHnlPV1hW961H1qvGNWM4dRnB97TSbMPFrInG2HlAfCQosy3GUdKSUpDwNQ0x/EYvGEQYVlNq0UOTs=;4:uLpAFVVzgK7iLs+Uz2EYG9ertG1O9K7Kbg3pY4UVlpvYl7nEru46rNhy+kKDCAuVFVTWQTlyAATVozL8tLgkfqeMqJQmIChp1MZ8U24CRGUo9DIpl1TiN3TeZmJofHDX3SZcmzYANlXivkn7pVzGypSKI2TmlVBU5DMmm78T7f5sasIIbwsgfxvOIX9xhI8Pzse/nPTwJJFj1gCmobHb7ggD9eXopW2DmpEfjObl3XAVHjjXEo4EEUtWmcGi09t2o1MiCFdoJc/l+Jrgdt2LGOWyOTODWWbzwroUxfFZBUOlgZzrQDgDppCmMseRGFJMuvtfjYTMx/jZwoOkVwdvwVySjzrJl9AdDF/jDM7aavk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(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)(10201501046)(93006095)(93001095)(3231022)(920507027)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR08MB2825;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR08MB2825; X-Forefront-PRVS: 0493852DA9 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(6049001)(376002)(346002)(189002)(199003)(24454002)(3846002)(106356001)(25786009)(316002)(77096006)(76176999)(53936002)(101416001)(50466002)(66066001)(53546010)(64126003)(34040400001)(230700001)(97736004)(305945005)(23676003)(16576012)(54356999)(50986999)(65956001)(478600001)(58126008)(6486002)(6246003)(229853002)(65806001)(47776003)(189998001)(4326008)(8676002)(31696002)(86362001)(33646002)(2906002)(31686004)(2950100002)(8936002)(5660300001)(7736002)(83506002)(6116002)(65826007)(68736007)(16526018)(36756003)(105586002)(81166006)(6666003)(81156014);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR08MB2825;H:[172.16.25.12];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4TUIyODI1OzIzOkNZa1dGUXZpWFdsT0N1UHVJVXVHMjhhZmtP?= =?utf-8?B?blBZSlRoWFJ3ME9wWlB6Q0ZMb0hqTDg1NDNIcXpKNURSRkp5TGo4dHh5YlpV?= =?utf-8?B?UmJ6MnRHQzdKK3ZHUzg1ZnJNZnhqVTNHL1grOUs0bmFtOEVRbk1KZWl1aTF3?= =?utf-8?B?UEJoSnE4M3lGeFc4Q1Y4UVJMTWp5NGpueFM5NkxzZjhsNWFYWnhDS0Q0R3dO?= =?utf-8?B?MDFqd2kvTDRYaTVIdEZvRUhmNEZDMkFlbktzQ0tyWjRkQVRrVnIzWTFvMmtz?= =?utf-8?B?TmJYdEsybStoYUdod0thVjM1UzNHNUc0OHJQZW91cUcxd1RiTk91U1ZqdlB6?= =?utf-8?B?MnovWDI0bWhGVW5mL3o5RTcvNGRuS0UzMGZjZHlBZWpaRExPWWcwVU02ajRY?= =?utf-8?B?Y3ErdzdPUFNvdjRuc2pjNlJHenpmcFREcHJTNE5UNlRRT1QyeGR4Q1FWM21H?= =?utf-8?B?MGtGUlJvaEpMVTc4OFkyZll2OGdZRU9GNU9qT3FHOFFCQVdrM093UThvcVRZ?= =?utf-8?B?MG5MNDlpeERXWG1mbkRWU1hYMFVHUzdabjF5Sis1WTQzZCtMUXI4c1RRZE00?= =?utf-8?B?dWs1MmQvWkRENml3SlYyRGUrYlZLOXZyZXNYTm5rd0UwZ3NZZS9ra0hQd1NJ?= =?utf-8?B?MUdOU2puY1lzdFdod3I2b2ZOQXFzK29KSW1mU1JEVlFycjRtYnR5aXd3eHp0?= =?utf-8?B?UlMzdUZtQk83MVhtVkM5SmhCRmJ0b2k2TGV1cngyVGlENHh4blZtNHd5TFRC?= =?utf-8?B?TndYQWJaRDZoVTN4Yys4YTFKaWxGK2tCOE5nbEs4bTZJb3dlQ2JZdVFtREpx?= =?utf-8?B?SFI2U0cxMCtYSHJBQ3ZjZG9ubENndWVPWHREZ0U3ZG5ETTFlU0ozcU1uNVBE?= =?utf-8?B?VEMzbTl6bU1jVlpLYzRPdytzUHNYVWZRRHd6YWJrMjg3RXZoZ0RCWWNrSkQx?= =?utf-8?B?dkkzb0tWMjM2TEVFZFpiR3dZb1d0SXN2bVdjeFlNTnFCcGxYNHB1OGYwYUgy?= =?utf-8?B?V0gxbGo1QVdsNVRvTUk1UWJ5ajIxY0RJWWpBTWVkNTdoc2VKbEVWdVBxY1NN?= =?utf-8?B?SUVMak9GN3VVZWYvMUJVNVU2VDBuNFpUYWJUbGl4SXJVQVlXcWVFVHgzZSt5?= =?utf-8?B?MGdsUG1LTGhmYnVDb3JYTUZ4M1crZDQ1N3UxNWN4RjVoV2x0OUgya2hlbUVE?= =?utf-8?B?TUdWSFZzUjgrWUVFMEJPSGxJUUJsVGpyK3BsMXFkQ0dBWFJuQ1hrTEE2c2k0?= =?utf-8?B?Z004dlV6RUJieTVEdlJQWEM2WmoyaVhhVldXNVdnTjJVajIvUi9kb0w1Umla?= =?utf-8?B?Q0NiWEtWaVd5endhL2JWT0FOdC9pYlQyWWZ6cEdlRnArQWc3b0lRdDN0TjFO?= =?utf-8?B?T2I1dDJrYlZNMW1JY2JxcUpiVm90U0Uxa0RRZ2hHY0RGRWFOak05TStXMFRF?= =?utf-8?B?VU43NS9UeS9hTXM4Tkxwa3JjN3VXVVp1eWxzMnp2WkhFRkVmQXRoUmpyeXkx?= =?utf-8?B?c2JIOTNqOWprZm9CcGNCSlhzZksvUGJRNGk0UTBrZDQ1Um5jSXgySVhQVkpj?= =?utf-8?B?MVBOL1BmRVUyMXZ1RUFiNEVYZGx5MlFvYzVFYVpxZjhCZjBRSW5TSGJrNzdR?= =?utf-8?B?TzI3WGVoMXVxNFcwZ0pRN21XV2hlcUFjWTVqUTBPVDdHeGczWmxWaTFhNmN2?= =?utf-8?B?a01NZVZxV1JrbWhQczJ0NnUrY3dvS21vT2d4QndaTlZhVFZpSUc2RFlVb200?= =?utf-8?Q?46u2v8W1PCFzArODzj1sLEqzJ+FN8EHM0N2HE=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2825;6:jS0mIVoFDvBES0Cu+uTCR6TDR8XqqNYDPO96AY7gzXK++++uDsjeDISkx1vsadrh2TO0xm5RhB3kb75WkZWLXSYofnUWWqgtRh305vbIxcOWq0BU+EqX2Ax3uyRzBTBd1Ek4CQniM/WR4Cp0eKK9UMj92FYzDp9gNkhuSx4WboFOAzQlwWflnBkMYDTveuqYXzzwitvy1zkMyZ5HSDs8xL+GTWhkRCUdczjUE6xxs1k4Aq0kB1/pWSghM1QMMuqHIaWrkkxlsp4G7Eo4eQKTjgZ/yJ7mz0JFFfDHMDpkBY9Ks/k3x7J2tM+bwPU2EMRKpBw0jLNad9bWp6gJ7QyITNkzhKL08boO/n2N2OPCNIE=;5:txzQPZHnBibRVq2Mq1nwmKRTmsd2ewda8ZQN5ar1VoMMJvlJN2zgdiIGQpTotm5rztc0CVlN0xVptlpa43gZY+grAXS34biC2Wi5IEQDYw7w3fzQx6s1JKpPgXzN1Hb+L8hEzboGU+fXTlMKxNEUSYwCi5HeEdJXYILGwVB+URE=;24:lcTJ/RQ7YvpDLDeOxGEVye+2pMrTS5V1c0a1hPMSTROkXJ9KGW/1eAQMPHjFOzkKZC+bUrMlYJET6k4c1Hn8l1UGKEyc0frezHTfMgHqWow=;7:ERNKJKo2p1pmvx1pn+c8XU6kIXbcPLiOOVvbvQpX3hOQ63suS7nd9BxCr02z0v5DpL920CSINONEwLncjHSb4B4uHXxMrLIK5+2JFE4Qtp5q7YBmWtVkLRBkKmvCwRQgoqIhpFB/uB5w9SmHwyBzz4RTW1ouVeUxBS/Jddn1IWyLCgsVQFXdKV6XGlMbFFtofj1DiSvfW3WQkSfnMzpJlSsp1T/J5Sn6zl5bj9G1pZw9u5zH+1BnHbKYbNOnHLtZ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2825;20:+G2kelTEODfYpY7yKXgRBJE0TkM0+kNbQ14RB97sE5RbmPlkCwDiN3Jkem7J8H7WZ0A8Dc+3P91Rp6PJnw8VPg05vnRhyu+ohrni+Mut9xC0UebqroiUZyMEeYFYQI817w3vA9DJXMALPNFieme3UUggcBzwjSvY0BkMJf0LNH4= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2017 15:05:28.8011 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b7c68a02-0484-40bb-27ca-08d52d0379c8 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2825 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/15/2017 08:34 PM, Alexander Potapenko wrote: > stackdepot used to call memcmp(), which compiler tools normally > instrument, therefore every lookup used to unnecessarily call > instrumented code. > This is somewhat ok in the case of KASAN, but under KMSAN a lot of time > was spent in the instrumentation. > > Signed-off-by: Alexander Potapenko > --- > lib/stackdepot.c | 21 ++++++++++++++++++--- > 1 file changed, 18 insertions(+), 3 deletions(-) > > diff --git a/lib/stackdepot.c b/lib/stackdepot.c > index f87d138e9672..d372101e8dc2 100644 > --- a/lib/stackdepot.c > +++ b/lib/stackdepot.c > @@ -163,6 +163,23 @@ static inline u32 hash_stack(unsigned long *entries, unsigned int size) > STACK_HASH_SEED); > } > > +/* Use our own, non-instrumented version of memcmp(). > + * > + * We actually don't care about the order, just the equality. > + */ > +static inline > +int stackdepot_memcmp(const void *s1, const void *s2, unsigned int n) > +{ Why 'void *' types? The function treats s1, s2 as array of long, also 'n' is number of longs here. > + unsigned long *u1 = (unsigned long *)s1; > + unsigned long *u2 = (unsigned long *)s2; > + > + for ( ; n-- ; u1++, u2++) { > + if (*u1 != *u2) > + return 1; > + } > + return 0; > +} > + > /* Find a stack that is equal to the one stored in entries in the hash */ > static inline struct stack_record *find_stack(struct stack_record *bucket, > unsigned long *entries, int size, > @@ -173,10 +190,8 @@ static inline struct stack_record *find_stack(struct stack_record *bucket, > for (found = bucket; found; found = found->next) { > if (found->hash == hash && > found->size == size && > - !memcmp(entries, found->entries, > - size * sizeof(unsigned long))) { > + !stackdepot_memcmp(entries, found->entries, size)) > return found; > - } > } > return NULL; > } >