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 56D3AEB64DA for ; Wed, 12 Jul 2023 16:23:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 83A346B0071; Wed, 12 Jul 2023 12:23:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7E9D86B0072; Wed, 12 Jul 2023 12:23:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6B1D86B0074; Wed, 12 Jul 2023 12:23:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 5C9EC6B0071 for ; Wed, 12 Jul 2023 12:23:56 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id C9D5380337 for ; Wed, 12 Jul 2023 16:23:55 +0000 (UTC) X-FDA: 81003481230.15.718A086 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) by imf07.hostedemail.com (Postfix) with ESMTP id 0072A40003 for ; Wed, 12 Jul 2023 16:23:52 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=VHnuNATv; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf07.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.216.53 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1689179033; 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:dkim-signature; bh=/mvKlKHSg/A3EuJ2PFCJvzfOkyyunP0cNJw9XZ1YoG4=; b=lvZBeKfFW3nRLZYIPhRbd7FEBV3cErg3YuXAaIDRFTbcVKO1/J0O9vOERYFIH44zr6s1AS ZTwoXhyKab9Up1euYcd4YN96gzkIu8SAfI+7r4OCzKb07R9b0pyBK9D7UPTtOuDluiWrWT nye+j0QX2nU/6Vaw8kUjx6senENeyhY= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=VHnuNATv; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf07.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.216.53 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1689179033; a=rsa-sha256; cv=none; b=nkKjGRM1zPuc119a25YtXxPHXiKHh09RbEwhPNi8KQ/zcmUkK0TfGJBMohpsMwCj49uLv/ gE49w5n3vAiDslIQJogPJDT0DJC6hq8wDJkuZH99Pfr3ZaQIJeSKYOm25J+tzQJmAsRNm0 znN82sIRlaLzVVIpfxKVoE+u/3xm/g0= Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-262cc036fa4so3588649a91.3 for ; Wed, 12 Jul 2023 09:23:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689179000; x=1691771000; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=/mvKlKHSg/A3EuJ2PFCJvzfOkyyunP0cNJw9XZ1YoG4=; b=VHnuNATviqOgKPuyo3fuh1fXRy2OtRR/omFx+1Sa0YyCS83h8RtoeVoirEmi33KxVj g1K4O/CD8L6aR7SXF02veyJT2HS+FHZLswYIM+kpjJKG4qXi54M6HzSgrgccjBhdZM16 7dkoE6XTRFpoldjZiEjKPk2sndtlxAE3IeSKB9XknsPXks/RyD6ePGFqztpdC2CocYgR XSByCC97A4XUlkhuinayUvwLt2+JXyvZ3iH8fN7QKSbCBuUKmzt4gro0OCSm83GQHUDj kLUajaa9ldIx42KMzNTTWuIe/PA2h/G1AZULj6qVniKflEdR/S8tU49+KDbfde7ePfir EnCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689179000; x=1691771000; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/mvKlKHSg/A3EuJ2PFCJvzfOkyyunP0cNJw9XZ1YoG4=; b=cCEBZ2uYsvALuKgA5x55VRCV+hjtc40NuSwvNY8gSxSSz0x7wo4+P9LsuMvmXXGHQ1 T1NiZ3NPJ+MN/qofrQI70Its/NF4dvTw4XeJL9SdW82d9ljUyU0SsiO3QBI+SCYnMx5t grL0umdDqzs6D0mAVhbuT6Facyn4qVeEFnr6WokTKIc1bjEZSK9ya3TQGU7CdmgVSr+5 I6EhwG11MjBjwp0NAdurSkpY76iQqHwyfhAyVsExSKb9SMwedRcQzHP3S6buCNQPookv pkJgKck75BUfwLhwdU6TxjWq3qmMlWLJMVMCujuhIjnqpkJ4+tEgR+GDB4EgRk9tcuit msSA== X-Gm-Message-State: ABy/qLYpgvEmAxBMVpTZjDQBAWC9eX8eFm0YDhAaigJGw9KgFTrQMQ4x dJgXzlSMNLV5qud/g7WbjD0NwIzgGxgM5Gx75OM= X-Google-Smtp-Source: APBJJlF3rf+aZ7Dic0YZaGil/jwvb4h4itZZ9wPU2RvqES1B/ZcPeLeQYICZfi8bU6WCHwKtU9BfGohX9VYGxKiHV3U= X-Received: by 2002:a17:90b:400a:b0:263:f5a5:fb98 with SMTP id ie10-20020a17090b400a00b00263f5a5fb98mr15776385pjb.28.1689178999981; Wed, 12 Jul 2023 09:23:19 -0700 (PDT) MIME-Version: 1.0 References: <20230711134623.12695-3-vbabka@suse.cz> In-Reply-To: <20230711134623.12695-3-vbabka@suse.cz> From: Andrey Konovalov Date: Wed, 12 Jul 2023 18:23:09 +0200 Message-ID: Subject: Re: [PATCH 1/2] mm/slub: remove redundant kasan_reset_tag() from freelist_ptr calculations To: Vlastimil Babka Cc: Christoph Lameter , David Rientjes , Pekka Enberg , Joonsoo Kim , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Roman Gushchin , linux-mm@kvack.org, patches@lists.linux.dev, linux-kernel@vger.kernel.org, Matteo Rizzo , Jann Horn , Andrey Konovalov , Marco Elver , Alexander Potapenko , kasan-dev@googlegroups.com, Kees Cook , linux-hardening@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 0072A40003 X-Stat-Signature: 4q8e6xnncqdo3tfcyf1aoamnutg5ecz9 X-Rspam-User: X-HE-Tag: 1689179032-930044 X-HE-Meta: U2FsdGVkX18n/4exMGI/lVYfbSno+wJzF8a5/LHh5guuRlMa+76MCLQKgrjM4IQAH7/R4vK65qoEzZhFbuo2cxdn8RYflzqHs/yHFgbtOOlWVdQG15AYE38cOQjW/Sa+6l8TgoHGUFQ7JHh3ob3N88CHuDiLtRv5bSZaf33EXaQMh7pzkipwaxo0cjj7eRJQiOozpf/c+F7IWuLTyBOoy/ciZJVT2cNMTS6ZG3EO+2MaMuANedr0V/A8Sc7Fcs1yyT21aH9GrODJxLA0TUqqGUTu3SAJBhzf1em1SRcLCTuoPpbO5Hpq3TMPAb/aBrEu49DxNgRlQrGNuEZBvyxrUbiS5idE5I8qbS6y9jzc5sG7IBmf1vOrT+8bO4NoDYq+kirAo20vmXz9v19VUkoxuOHTBj+emWrfjqrcGGCTyMvRE7j/ghsDih0+bB2wHPzFwk41OwZYzTa2xMCLW205Knh0eCKF0+jt06pnYNdvcvSLL00XFRELVG0WNYd2NHfz9Dn6AZHut02qMEumsbvSUfe6PS85/6CPG/lByiMRiyX6F0EQCtP/aM7moG0x9wX2k1bwxCE6QfBruAweMW9Sr0FjC1rTwgUxn4r/myP8TtLDAUeqtNsq6gjhY7Qu3O3n7SpdzKX4VLTl0gJZMbY6bd6goNBbbqwYTR3oVx0Csj1uyb6PlEi4pv7iyCR3SZwls5lMeQu/pNVWXYnAPs61EgUdVhB3/Jirxc4VnnOQ1pFekOgUtj+3rlFbdSMsk3TBiREZ8aVJQKnt65E4vYcyaXxDV+0yMk8ctgqLV4Pxdwzof/shdfgTirJ6SnQ74LUHCzA0ZiB7IGqgDMJJCYblZAUQA+8waM8RHT21WLRd8G2fjx7OFlrActpw4a1vtixFgYUDnLAkCqhP4EBWBokDaU9UeuDLmmAPne5Hu5w1sjcUkkrn4u0MR9AQ9MfTSu32YTUxMJeWZ1p76adb+XW QDB7PD7h n4F3b3SlAHAqRD3wDX8fJ0+dsEf34/SxY9nOwUYXDUkoI87anu1jZkHeXLOoF/zfdUBliiug2oWqGfVlARpNHW4Mx8CBjq4JeTwqrE7t0SLBM5Gg3VcnXDWDZOQ8swEJSZNneSlFcAnkQembU6oPYj16oKrYbCArKtOtd8jwXt/UrvC7pFLAz2MDs6jhAuRvd+oSrmBIdedY8rBJWPzoTcG5jrMRfyuVqATwDxThOZVBe++WY7YUxe9MocxqHeWF4KDrHTew121MVnnDwm9dlgrd/ghr/hKqx3B99cvORg4bkvf0P9NwIpvk7hxk7URrA3r7FHCuMiFpo1qrg36nViJ+pxTlXMlObbHAAkF6ge8Z8Xd1JSljccCgwoyMzuBAD8wvLAZXjZmEtb8V5WaQfIit7blvab/mXNXDbS0wbQma4sYI4v84j9h1SmL1/VYnZT5cpvhC4/QxZEqdxXWx1XlryItuz4VWasvTH5dXpmJ48UlbqacGlydxZxPwLMpqmNi1xQdtMiGv8d3zR+pZi/3gqx65v+pIu1zKW9Z3K8YsVNJl3WCgP42EQUi+vCeuOK0Du 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 Tue, Jul 11, 2023 at 3:46=E2=80=AFPM Vlastimil Babka wr= ote: > > Commit d36a63a943e3 ("kasan, slub: fix more conflicts with > CONFIG_SLAB_FREELIST_HARDENED") has introduced kasan_reset_tags() to > freelist_ptr() encoding/decoding when CONFIG_SLAB_FREELIST_HARDENED is > enabled to resolve issues when passing tagged or untagged pointers > inconsistently would lead to incorrect calculations. > > Later, commit aa1ef4d7b3f6 ("kasan, mm: reset tags when accessing > metadata") made sure all pointers have tags reset regardless of > CONFIG_SLAB_FREELIST_HARDENED, because there was no other way to access > the freepointer metadata safely with hw tag-based KASAN. > > Therefore the kasan_reset_tag() usage in freelist_ptr_encode()/decode() > is now redundant, as all callers use kasan_reset_tag() unconditionally > when constructing ptr_addr. Remove the redundant calls and simplify the > code and remove obsolete comments. > > Also in freelist_ptr_encode() introduce an 'encoded' variable to make > the lines shorter and make it similar to the _decode() one. > > Signed-off-by: Vlastimil Babka > --- > These 2 patches build on top of: > https://lore.kernel.org/all/20230704135834.3884421-1-matteorizzo@google.c= om/ > > mm/slub.c | 22 ++++++---------------- > 1 file changed, 6 insertions(+), 16 deletions(-) > > diff --git a/mm/slub.c b/mm/slub.c > index f8cc47eff742..07edad305512 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -374,22 +374,14 @@ typedef struct { unsigned long v; } freeptr_t; > static inline freeptr_t freelist_ptr_encode(const struct kmem_cache *s, > void *ptr, unsigned long ptr_= addr) > { > + unsigned long encoded; > + > #ifdef CONFIG_SLAB_FREELIST_HARDENED > - /* > - * When CONFIG_KASAN_SW/HW_TAGS is enabled, ptr_addr might be tag= ged. > - * Normally, this doesn't cause any issues, as both set_freepoint= er() > - * and get_freepointer() are called with a pointer with the same = tag. > - * However, there are some issues with CONFIG_SLUB_DEBUG code. Fo= r > - * example, when __free_slub() iterates over objects in a cache, = it > - * passes untagged pointers to check_object(). check_object() in = turns > - * calls get_freepointer() with an untagged pointer, which causes= the > - * freepointer to be restored incorrectly. > - */ > - return (freeptr_t){.v =3D (unsigned long)ptr ^ s->random ^ > - swab((unsigned long)kasan_reset_tag((void *)ptr_a= ddr))}; > + encoded =3D (unsigned long)ptr ^ s->random ^ swab(ptr_addr); > #else > - return (freeptr_t){.v =3D (unsigned long)ptr}; > + encoded =3D (unsigned long)ptr; > #endif > + return (freeptr_t){.v =3D encoded}; > } > > static inline void *freelist_ptr_decode(const struct kmem_cache *s, > @@ -398,9 +390,7 @@ static inline void *freelist_ptr_decode(const struct = kmem_cache *s, > void *decoded; > > #ifdef CONFIG_SLAB_FREELIST_HARDENED > - /* See the comment in freelist_ptr_encode */ > - decoded =3D (void *)(ptr.v ^ s->random ^ > - swab((unsigned long)kasan_reset_tag((void *)ptr_addr))); > + decoded =3D (void *)(ptr.v ^ s->random ^ swab(ptr_addr)); > #else > decoded =3D (void *)ptr.v; > #endif > -- > 2.41.0 Reviewed-by: Andrey Konovalov Thanks!