From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC419C7EE26 for ; Mon, 22 May 2023 08:59:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2EEB4280002; Mon, 22 May 2023 04:59:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 29FBC900002; Mon, 22 May 2023 04:59:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1673B280002; Mon, 22 May 2023 04:59:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 07D44900002 for ; Mon, 22 May 2023 04:59:01 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id CB432C01EF for ; Mon, 22 May 2023 08:59:00 +0000 (UTC) X-FDA: 80817291240.10.E3A00A1 Received: from dggsgout12.his.huawei.com (unknown [45.249.212.56]) by imf18.hostedemail.com (Postfix) with ESMTP id 6D1D11C0004 for ; Mon, 22 May 2023 08:58:55 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=none; spf=pass (imf18.hostedemail.com: domain of gongruiqi@huaweicloud.com designates 45.249.212.56 as permitted sender) smtp.mailfrom=gongruiqi@huaweicloud.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684745938; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UQeSrfWF6EvL8Tyxm40SSqQ/6Cm3EN9lJUOCedt0x48=; b=6M7eEPiku9tBKoIZZ3GbdJ4ni5PmlB6lrKHnubmKp827ETxAZuhbt41s4sX4zHsyUVzxq7 TUqwhVd040gd18g8yGOsxBvH5SoUHxw3Stsdn7xLyBNVhYfyiK/P1NeG1ZH87Uf1faeXa0 r63gv8dmKj39gGMVFNuTlHxstIByC2w= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684745938; a=rsa-sha256; cv=none; b=RpiPKT+uuOLYnBxAQu/TjZ2AxPv6R1xOGFIHX3RxcpHuQhS6yL+iM/KHUQEWkOuXHVWoP5 1d5US0TFi4GCfbwr2Fx1kz97/+8U7RHfb8NPHC3PME3amwXN+kymAteiTF9IiAy5cz12/7 Vc/Y7uM8GUclG1q6aJTO797I0c+96oQ= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=none; spf=pass (imf18.hostedemail.com: domain of gongruiqi@huaweicloud.com designates 45.249.212.56 as permitted sender) smtp.mailfrom=gongruiqi@huaweicloud.com; dmarc=none Received: from mail02.huawei.com (unknown [172.30.67.143]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4QPrw86C6Rz4f3lwx for ; Mon, 22 May 2023 16:58:48 +0800 (CST) Received: from [10.67.110.48] (unknown [10.67.110.48]) by APP1 (Coremail) with SMTP id cCh0CgCH6yWxLmtk91CHJQ--.43916S2; Mon, 22 May 2023 16:58:50 +0800 (CST) Message-ID: <1cec95d5-5cd4-fbf9-754b-e6a1229d45c3@huaweicloud.com> Date: Mon, 22 May 2023 16:58:25 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH RFC v2] Randomized slab caches for kmalloc() Content-Language: en-US To: Hyeonggon Yoo <42.hyeyoo@gmail.com> Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, Alexander Lobakin , kasan-dev@googlegroups.com, Wang Weiyang , Xiu Jianfeng , Vlastimil Babka , Christoph Lameter , David Rientjes , Roman Gushchin , Joonsoo Kim , Andrew Morton , Pekka Enberg , Kees Cook , Paul Moore , James Morris , "Serge E. Hallyn" , "Gustavo A. R. Silva" , Gong Ruiqi References: <20230508075507.1720950-1-gongruiqi1@huawei.com> <5f5a858a-7017-5424-0fa0-db3b79e5d95e@huawei.com> <19707cc6-fa5e-9835-f709-bc8568e4c9cd@huawei.com> From: "GONG, Ruiqi" In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CM-TRANSID:cCh0CgCH6yWxLmtk91CHJQ--.43916S2 X-Coremail-Antispam: 1UD129KBjvJXoW7KFWUXF1fAF47Xry3Wr47XFb_yoW8tFyUpF WIyF1UCr4xCr17Cry0ya10va92v3y7tF1Uu3s0gryUZr1kJw18XFsakr109r93ZF45GFy3 XFsYkF13WF9xt3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvIb4IE77IF4wAFF20E14v26ryj6rWUM7CY07I20VC2zVCF04k2 6cxKx2IYs7xG6r1F6r1fM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rwA2F7IY1VAKz4 vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7Cj xVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x 0267AKxVW0oVCq3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG 6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFV Cjc4AY6r1j6r4UM4x0Y48IcVAKI48JM4IIrI8v6xkF7I0E8cxan2IY04v7Mxk0xIA0c2IE e2xFo4CEbIxvr21l42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxV Aqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r4a 6rW5MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6x kF7I0E14v26r4j6F4UMIIF0xvE42xK8VAvwI8IcIk0rVWrZr1j6s0DMIIF0xvEx4A2jsIE 14v26r1j6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf 9x07UZ18PUUUUU= X-CM-SenderInfo: pjrqw2pxltxq5kxd4v5lfo033gof0z/ X-CFilter-Loop: Reflected X-Stat-Signature: 8smg73w7z9he84sikt4h8qe4qk6bsrxd X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 6D1D11C0004 X-Rspam-User: X-HE-Tag: 1684745935-781049 X-HE-Meta: U2FsdGVkX1/HTTQNm2yNVk1d7CZGa+4rzSPJcxZnasWg4od9bTzsnA4m66Sn98MIVFJpOp4j3SmLGi2E5ESpoqk7Oql4CNCEghoA5jFPK1YXjLdIozePQ5XuyxT1HcvTgzkRN+/x6hxUcbjmcaGnj3rCjUn/BWrCo0LyRN9LRUJb9MY/p7y9dtmx2kTdz1uHAiqXrU4l8CcUg7m6H8uBA4ucWmTYpDVvbGvjQLCRRyshgMH7d1ypwgMCxm7PJ4QORgzmve9bEKW/r9+YqO6ah2FXuHllOeYnyIcKrfF5/dP+0Ee1pdQyzmRsyytppB8+KBsTEgnuMKi2aDKdhOE0omZZGlV7Ymxy4CXwMOwv+OwQaAlwU4EEawbIbOxTWH3V9P7E9KVKLdjRk3sEWg/Yd1OVrNpX8RpJ34FNafmB5m8IIF63247cdmmk9VozElnclC+BKf8NMhhzmp135dRDQvA8dk8k7m1ICH5ku7NSQwbKMn5ecPzZLTXYttCGn0ncfO/yCerz+Bhlr5mzpLUy3pfnxtpxtD4qfkSDNDzb3iQPDbnuGjiV3H2h0/hRVGztrkrCUiDW2K9m4g18mZyD5ugpTbq89lV2mALqmmhMFQ8Z6TRL3zna5Wvar5+xL3UByG9uGLFyrxrCuIhKeL9UJu69JdZjqi84PZWPPEJEefbx9U+h2iFOQZ0cNXSOHWpsj8r6zfGBvphjesdvJ2J2mmi2nnprlJ/1P3jL6fdBcc6CWtXPJyu8GP0YGj8/qWqYxcRUwtVsinuggtOcHhd6dsiTQHXrxcygnPasEtcWzuw8E7FK9qeAwk+C3Seog26AX8eTXfw9oJ8K3QYVHkJRSOy/TSid3xe0w1BmAxGhjpenkQSyJM2pWrLN1Bff56bNB2Awq/kGqxwhW3WbHA/aLIKE2udUL9/wTDmTmGJrqNxTv5RCMmj4mZomifYNV2dS6KW0ctwYKkLCojFJQx3 8vh/zj08 el1YEu+3NALhQLo0K/5mFUrQrQrFQx3CKdHCZG2L7mqpxT7GuS7NpCHA3T934aTRQHWJJE6eLdorFuln2VbBSpG7hEIIo7tjsbMkkGMeXot9kkvB+v4AdciTds88CTyJEFjQbJT/E+l9kjNj+DxlntL18oQNRqsAjnqw5yPG3nr20tyWUK8xHhCLaLSU/NCUQsuaZy7lK4fxAG8QEaUjwizarkRJfaxgv1cuoLI8LrL8o1VzYHr2yUXEaLpCx54S4/8X7XLUtdEXax58= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 2023/05/22 16:03, Hyeonggon Yoo wrote: > On Mon, May 22, 2023 at 4:35 PM Gong Ruiqi wrote: >> On 2023/05/17 6:35, Hyeonggon Yoo wrote: > [...] >>>>>> +#ifdef CONFIG_RANDOM_KMALLOC_CACHES >>>>>> +# define SLAB_RANDOMSLAB ((slab_flags_t __force)0x01000000U) >>>>>> +#else >>>>>> +# define SLAB_RANDOMSLAB 0 >>>>>> +#endif >>> >>> There is already the SLAB_KMALLOC flag that indicates if a cache is a >>> kmalloc cache. I think that would be enough for preventing merging >>> kmalloc caches? >> >> After digging into the code of slab merging (e.g. slab_unmergeable(), >> find_mergeable(), SLAB_NEVER_MERGE, SLAB_MERGE_SAME etc), I haven't >> found an existing mechanism that prevents normal kmalloc caches with >> SLAB_KMALLOC from being merged with other slab caches. Maybe I missed >> something? >> >> While SLAB_RANDOMSLAB, unlike SLAB_KMALLOC, is added into >> SLAB_NEVER_MERGE, which explicitly indicates the no-merge policy. > > I mean, why not make slab_unmergable()/find_mergeable() not to merge kmalloc > caches when CONFIG_RANDOM_KMALLOC_CACHES is enabled, instead of a new flag? > > Something like this: > > diff --git a/mm/slab_common.c b/mm/slab_common.c > index 607249785c07..13ac08e3e6a0 100644 > --- a/mm/slab_common.c > +++ b/mm/slab_common.c > @@ -140,6 +140,9 @@ int slab_unmergeable(struct kmem_cache *s) > if (slab_nomerge || (s->flags & SLAB_NEVER_MERGE)) > return 1; > > + if (IS_ENALBED(CONFIG_RANDOM_KMALLOC_CACHES) && (flags & SLAB_KMALLOC)) > + return 1; > + > if (s->ctor) > return 1; > > @@ -176,6 +179,9 @@ struct kmem_cache *find_mergeable(unsigned int > size, unsigned int align, > if (flags & SLAB_NEVER_MERGE) > return NULL; > > + if (IS_ENALBED(CONFIG_RANDOM_KMALLOC_CACHES) && (flags & SLAB_KMALLOC)) > + return NULL; > + > list_for_each_entry_reverse(s, &slab_caches, list) { > if (slab_unmergeable(s)) > continue; Ah I see. My concern is that it would affect not only normal kmalloc caches, but kmalloc_{dma,cgroup,rcl} as well: since they were all marked with SLAB_KMALLOC when being created, this code could potentially change their mergeablity. I think it's better not to influence those irrelevant caches.