From patchwork Wed Feb 26 08:12:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hyesoo Yu X-Patchwork-Id: 13991724 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 27F0AC021B8 for ; Wed, 26 Feb 2025 08:14:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A5495280008; Wed, 26 Feb 2025 03:14:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A036B280001; Wed, 26 Feb 2025 03:14:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6F80B280008; Wed, 26 Feb 2025 03:14:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 4C65F280001 for ; Wed, 26 Feb 2025 03:14:07 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id DFA12120CF7 for ; Wed, 26 Feb 2025 08:14:06 +0000 (UTC) X-FDA: 83161382892.30.B49EE42 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by imf29.hostedemail.com (Postfix) with ESMTP id CA44912000A for ; Wed, 26 Feb 2025 08:14:03 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=gletJ3GK; spf=pass (imf29.hostedemail.com: domain of hyesoo.yu@samsung.com designates 203.254.224.25 as permitted sender) smtp.mailfrom=hyesoo.yu@samsung.com; dmarc=pass (policy=none) header.from=samsung.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740557644; 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=ouCvGVz+UyYcyRbwwR2KSi8SaQSHfPFVtpF7i2zb2iA=; b=KkHgDZerYRcSXkCBpTxXR5G6S7TqMxgJbDFE6F4QZnRGzkdLCWgAhQ0HXe3QwaAH90I/P+ 41xTr1BJk8p7l1AgBGrQZeD3JQ27GXXDSq4okw9CzJ+Q8WrcaqayOtKhFOX6nhGlxMXB64 oHZ3FKBmUY5sSQDq56uocqmMpC7V4ns= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740557644; a=rsa-sha256; cv=none; b=hHEL1ICV3NaZKNvdxuvLUTIxCrjcuptCUTNR3S4aRCqVCkCKynJrYJhe3W4Z27bXVaxaf3 GFwHivDMRbh5MSz9vG0DJE+pJOvD2mFNxE4wHToqrP/4M9N8DQM7KXmv8ey4A0KuGtJGTb m3uilWND6Iy0KztURXFh0EoMGmLeSc8= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=gletJ3GK; spf=pass (imf29.hostedemail.com: domain of hyesoo.yu@samsung.com designates 203.254.224.25 as permitted sender) smtp.mailfrom=hyesoo.yu@samsung.com; dmarc=pass (policy=none) header.from=samsung.com Received: from epcas2p1.samsung.com (unknown [182.195.41.53]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20250226081400epoutp02c261f301679a7faa812457203d2315a4~ns-PbZpKe0190301903epoutp02H for ; Wed, 26 Feb 2025 08:14:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20250226081400epoutp02c261f301679a7faa812457203d2315a4~ns-PbZpKe0190301903epoutp02H DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1740557640; bh=ouCvGVz+UyYcyRbwwR2KSi8SaQSHfPFVtpF7i2zb2iA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gletJ3GKeFn3JS2fFyF2CQwACDYlFmonG+mVIJg5BHWcuDPREfvMX8xVNCS/ENg1h 6WiNEB10xCdhR3ExTWd9koP+25kme4Q9WPArdD7rqld04qTyFu8ZHgfT86vqJsitjd ZUlAwsA4nxWXtMCclLUfly6a8pNq3xMEDUO9+ET4= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas2p2.samsung.com (KnoxPortal) with ESMTP id 20250226081400epcas2p2032d6f1d8b4a712260f3cead3d481b54~ns-PETAAF3273832738epcas2p20; Wed, 26 Feb 2025 08:14:00 +0000 (GMT) Received: from epsmgec2p1-new.samsung.com (unknown [182.195.36.68]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4Z2nLJ1Gdkz4x9Q8; Wed, 26 Feb 2025 08:14:00 +0000 (GMT) Received: from epcas2p4.samsung.com ( [182.195.41.56]) by epsmgec2p1-new.samsung.com (Symantec Messaging Gateway) with SMTP id 24.93.32010.84DCEB76; Wed, 26 Feb 2025 17:14:00 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas2p2.samsung.com (KnoxPortal) with ESMTPA id 20250226081359epcas2p2a6a1f3f92540660129164734fa6eaa64~ns-OFgA-w3273432734epcas2p2w; Wed, 26 Feb 2025 08:13:59 +0000 (GMT) Received: from epsmgmcp1.samsung.com (unknown [182.195.42.82]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20250226081359epsmtrp2621ee7ab8e35576876ef62cf52962a88~ns-ODvo2U2522125221epsmtrp2l; Wed, 26 Feb 2025 08:13:59 +0000 (GMT) X-AuditID: b6c32a4d-abdff70000007d0a-a4-67becd48fff5 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmcp1.samsung.com (Symantec Messaging Gateway) with SMTP id C5.91.33707.74DCEB76; Wed, 26 Feb 2025 17:13:59 +0900 (KST) Received: from localhost.localdomain (unknown [10.229.95.142]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250226081359epsmtip29538791f5635c35baf910182ef65310a~ns-N1dgNy2366323663epsmtip2J; Wed, 26 Feb 2025 08:13:59 +0000 (GMT) From: Hyesoo Yu To: Cc: janghyuck.kim@samsung.com, vbabka@suse.cz, harry.yoo@oracle.com, Hyesoo Yu , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/2] mm: slub: call WARN() when the slab detect an error Date: Wed, 26 Feb 2025 17:12:01 +0900 Message-ID: <20250226081206.680495-3-hyesoo.yu@samsung.com> X-Mailer: git-send-email 2.48.0 In-Reply-To: <20250226081206.680495-1-hyesoo.yu@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrDJsWRmVeSWpSXmKPExsWy7bCmha7H2X3pBj+nsFlM7DGwmLN+DZvF 9W9vGC3uL3vGYvG38wKrxcruZjaLzXOKLS7vmsNmcW/Nf1aLts//gMSSjUwWE9eIWsxu7GN0 4PXYOesuu8eCTaUem1Z1snls+jSJ3aPr7RUmjxMzfrN4PLkyncljYcNUZo+PT2+xePRtWcXo cWbBEXaPz5vkAniism0yUhNTUosUUvOS81My89JtlbyD453jTc0MDHUNLS3MlRTyEnNTbZVc fAJ03TJzgH5QUihLzCkFCgUkFhcr6dvZFOWXlqQqZOQXl9gqpRak5BSYF+gVJ+YWl+al6+Wl llgZGhgYmQIVJmRnPL8rX3BWpWJT41aWBsYbsl2MnBwSAiYSm/c/ZOxi5OIQEtjDKHHpww82 kISQwCdGiVe7hCASQPbkkxtZYTpe3z/LCpHYyShxc+lDNgjnM6PElqetYFVsAuoSJ7YsYwSx RQRYJFZ+/84CUsQssI5ZYuX8yWAJYQFviVmND1lAbBYBVYnGicvBdvMKWEvcuLkXap28xO01 J8FqOAVsJN5svsMCUSMocXLmEzCbGaimeetsZpAFEgI7OCTOf93NDtHsItE6ew2ULSzx6vgW KFtK4vO7vWwQdrHEtsWHmSCaGxglNnfcZ4ZIGEvMetYOdCkH0AZNifW79EFMCQFliSO3oPby SXQc/ssOEeaV6GgTgmhUlti/bB4LhC0p8WhtO9QrHhLv3j9lhwRvPzCwHkVMYFSYheSbWUi+ mYWwdwEj8ypGqdSC4tz01GSjAkPdvNRyeCQn5+duYgQnay3fHYyv1//VO8TIxMF4iFGCg1lJ hJczc0+6EG9KYmVValF+fFFpTmrxIUZTYHhPZJYSTc4H5ou8knhDE0sDEzMzQ3MjUwNzJXHe 6h0t6UIC6YklqdmpqQWpRTB9TBycUg1M80U4zl//FPDPJP2Gb4fdrUdWPEfOKS6YzMT05Nyt PxMYLTatqD0cp3tE+fdNnvJ6Ntb+g9/E+YJnfnsltsGwYk2Y5c3Onrvz1vOeqk95OHXtgphV TyTO9mXbNml9neRuxb5HhmtaBtvv324Fm05NDjzZ2/+rMkuXdVaxU40zs99pGbPVxkxeH0U9 /z7ee6mw0dNju80kfslCD881rItWvatu3MhebT25vF9x24Wjb/7sv9q5sdh/08GdPDlM10Kk FvAGfdtSI9B49Jdi9dbyuF+7T4dKzipJCp999LxPxSSG5RXTUvcddegwvdu2qIX5YCmf3++n Nv38yyXNrfaq8KkrFlsUyS6v7lses/+lEktxRqKhFnNRcSIApxLoJl8EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPLMWRmVeSWpSXmKPExsWy7bCSvK772X3pBt2rxCwm9hhYzFm/hs3i +rc3jBb3lz1jsfjbeYHVYmV3M5vF5jnFFpd3zWGzuLfmP6tF2+d/QGLJRiaLiWtELWY39jE6 8HrsnHWX3WPBplKPTas62Tw2fZrE7tH19gqTx4kZv1k8nlyZzuSxsGEqs8fHp7dYPPq2rGL0 OLPgCLvH501yATxRXDYpqTmZZalF+nYJXBnP78oXnFWp2NS4laWB8YZsFyMnh4SAicTr+2dZ uxi5OIQEtjNKtMw9xQiRkJSY9fkkE4QtLHG/5QhU0UdGibXLfrOAJNgE1CVObFkG1iAiwCKx 8vt3FpAiZoE9zBJvmrezgiSEBbwlZjU+BGtgEVCVaJy4nA3E5hWwlrhxcy8rxAZ5idtrToLV cArYSLzZfAfI5gDaZi1xdKkMRLmgxMmZT8BKmIHKm7fOZp7AKDALSWoWktQCRqZVjKKpBcW5 6bnJBYZ6xYm5xaV56XrJ+bmbGMFxpBW0g3HZ+r96hxiZOBgPMUpwMCuJ8HJm7kkX4k1JrKxK LcqPLyrNSS0+xCjNwaIkzquc05kiJJCeWJKanZpakFoEk2Xi4JRqYAoxqo6WW/wz2V1r6Wwd 5VBr+YvPs0X4UqdF8x08vNrL1MfLzWrZq8jTN3pVuOXVnXue8Sw4sGB/rfPPxsWXvpQLvrkk z52k3X7o5nuX5/NtfRx+K85Yb6OwuuzUA9HNf3rfm2xZsMG4jVlLXP6LkMcldv/HeVvYORU0 NLo/ZkV7ReZqF3jJNcmJvp6RW5Ky9GL66yiedTxLa3Y+ucHSbShkInSez37CtoKTnFu8F617 U7Qzz/tDM7vwnBjbo5I+/a7sHo5cxmZVsllh5ziMHWP0XRwOaPKYvthYeu4Si9g07+91L71W ie9RvnqiTo6pNGOjePpTb6FtEUffKyoI8pw//YE9Q3D/2frpES+UWIozEg21mIuKEwFDz40I EgMAAA== X-CMS-MailID: 20250226081359epcas2p2a6a1f3f92540660129164734fa6eaa64 X-Msg-Generator: CA X-Sendblock-Type: AUTO_CONFIDENTIAL CMS-TYPE: 102P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250226081359epcas2p2a6a1f3f92540660129164734fa6eaa64 References: <20250226081206.680495-1-hyesoo.yu@samsung.com> X-Rspam-User: X-Rspamd-Queue-Id: CA44912000A X-Rspamd-Server: rspam07 X-Stat-Signature: wo4wj5mtb5ui5uahiyj5pfrg1o117ujh X-HE-Tag: 1740557643-103887 X-HE-Meta: U2FsdGVkX19pDHJa9qCDJIq1urWR+xzzRpUn1g00Bnrz1wmi4ADMOJw1ATsHI0gX/ke4pvycP7MUpt9bJyrsShha+gdYIyR5MFyFK859gTEiYMkqH0kgPk6FY4Hjh8wLznoyuHKHesyI55PKA9TdrEpDy+ItkkA1j20KkpbdU9LJmIdJwcLaQhjkyfK02AXoXzFtVz9KPVy9yD9dbiN3+2cD/K4KO6iBqvni09rwr1kZQ2R69tvDxfth+mIEXMczrGPuvU/E9tkYgzMwiI17R0qSBvaD347HYgu6Bfd4cSmgGoaqefqVIJvktRjEn000bWWnJAFqaSzCw4K5VNbQRa1h+ObzkQpdRk+1V4piCDA3vpQNALAZaF5LxlAYyJw9W4P1bSDgph+AH7F9rCTPnQw7+HzenyEYW6UQwWc3lTdDmFVPOPG9aO03btEgO5hzfJJeRulPUZ5+FeNVo4+czaL85xqMiJ75kSoYWQNr8QgF36IMdA30nLb4WqBsqKxNj1Dmm9nRS8XUWUrcxOb6GEai7MuBXJrp9P4sNOPJcjIJ22rKzDGZx2H9lfbUjt/kp+a+RF7f46DBWInXPc5ATcIRzRol8Eej22Pg82NuDM3Icm7vuegV8SgWTxaWt8AiuLdB2K8VDd8EADn+TQyNdT3aRAIl8Gnzy1Aqb9L9Dt/hKumz5EZtrjbzUnq/YlIckg5JmAkAE3P68fWcPLsFjJdd9DZc8UkiYVlG9i0+xzABnezzz3tfLN6zmlo5FwDEX3Zi7zRuKw6CQ+wlUtpWEtTgLOzjnANsNpltndSHDOEu4PRcjKUKMElDbhn2YxqKp8ILjauJ5zqWYccVzB3Xy0R4XRSWIzBMW9OqDK/9v4ZdpmwU7Kh/IC1T+shScja63HSR4bFVMNzFZMSbiiAc8wLZR9Xfpni+ANWuJna2gGPOdR81yvmg6wlxNT2MHxOXWCM3V6A52xrnq4wytNS EdYZjEJB imHH9lNblhldHfn8L/0D+Ge7XW9hL6dqhm4biMISnB+OXQIDnKCfDGtHCW+K9ejJGK0wnX8ap61pylrG0qTJ24IypnmFjGpKlIpf+VEUiwmaICKCHHlNoWbtd0tUgfWzl22rbaYWXBw/KYndnj23vZBVlZYL/65/iQMHm 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: List-Subscribe: List-Unsubscribe: If a slab object is corrupted or an error occurs in its internal value, continuing after restoration may cause other side effects. At this point, it is difficult to debug because the problem occurred in the past. It is useful to use WARN() to catch errors at the point of issue because WARN() could trigger panic for system debugging when panic_on_warn is enabled. WARN() is added where to detect the error on slab_err and object_err. It makes sense to only do the WARN() after printing the logs. slab_err is splited to __slab_err that calls the WARN() and it is called after printing logs. Changes in v4: - Remove WARN() in kmem_cache_destroy to remove redundant warning. Changes in v3: - move the WARN from slab_fix to slab_err, object_err and check_obj to use WARN on all error reporting paths. Changes in v2: - Replace direct calling with BUG_ON with the use of WARN in slab_fix. Signed-off-by: Hyesoo Yu --- mm/slab_common.c | 3 --- mm/slub.c | 31 +++++++++++++++++++------------ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/mm/slab_common.c b/mm/slab_common.c index 477fa471da18..d13f4ffe252b 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -517,9 +517,6 @@ void kmem_cache_destroy(struct kmem_cache *s) kasan_cache_shutdown(s); err = __kmem_cache_shutdown(s); - if (!slab_in_kunit_test()) - WARN(err, "%s %s: Slab cache still has objects when called from %pS", - __func__, s->name, (void *)_RET_IP_); list_del(&s->list); diff --git a/mm/slub.c b/mm/slub.c index 8c13cd43c0fd..4961eeccf3ad 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1096,8 +1096,6 @@ static void print_trailer(struct kmem_cache *s, struct slab *slab, u8 *p) /* Beginning of the filler is the free pointer */ print_section(KERN_ERR, "Padding ", p + off, size_from_object(s) - off); - - dump_stack(); } static void object_err(struct kmem_cache *s, struct slab *slab, @@ -1109,6 +1107,8 @@ static void object_err(struct kmem_cache *s, struct slab *slab, slab_bug(s, "%s", reason); print_trailer(s, slab, object); add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); + + WARN_ON(1); } static bool freelist_corrupted(struct kmem_cache *s, struct slab *slab, @@ -1125,6 +1125,14 @@ static bool freelist_corrupted(struct kmem_cache *s, struct slab *slab, return false; } +static void __slab_err(struct slab *slab) +{ + print_slab_info(slab); + add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); + + WARN_ON(1); +} + static __printf(3, 4) void slab_err(struct kmem_cache *s, struct slab *slab, const char *fmt, ...) { @@ -1138,9 +1146,7 @@ static __printf(3, 4) void slab_err(struct kmem_cache *s, struct slab *slab, vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); slab_bug(s, "%s", buf); - print_slab_info(slab); - dump_stack(); - add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); + __slab_err(slab); } static void init_object(struct kmem_cache *s, void *object, u8 val) @@ -1313,9 +1319,10 @@ slab_pad_check(struct kmem_cache *s, struct slab *slab) while (end > fault && end[-1] == POISON_INUSE) end--; - slab_err(s, slab, "Padding overwritten. 0x%p-0x%p @offset=%tu", - fault, end - 1, fault - start); + slab_bug(s, "Padding overwritten. 0x%p-0x%p @offset=%tu", + fault, end - 1, fault - start); print_section(KERN_ERR, "Padding ", pad, remainder); + __slab_err(slab); restore_bytes(s, "slab padding", POISON_INUSE, fault, end); } @@ -5428,14 +5435,13 @@ static int calculate_sizes(struct kmem_cache_args *args, struct kmem_cache *s) return !!oo_objects(s->oo); } -static void list_slab_objects(struct kmem_cache *s, struct slab *slab, - const char *text) +static void list_slab_objects(struct kmem_cache *s, struct slab *slab) { #ifdef CONFIG_SLUB_DEBUG void *addr = slab_address(slab); void *p; - slab_err(s, slab, text, s->name); + slab_bug(s, "Objects remaining on __kmem_cache_shutdown()"); spin_lock(&object_map_lock); __fill_map(object_map, s, slab); @@ -5450,6 +5456,8 @@ static void list_slab_objects(struct kmem_cache *s, struct slab *slab, } } spin_unlock(&object_map_lock); + + __slab_err(slab); #endif } @@ -5470,8 +5478,7 @@ static void free_partial(struct kmem_cache *s, struct kmem_cache_node *n) remove_partial(n, slab); list_add(&slab->slab_list, &discard); } else { - list_slab_objects(s, slab, - "Objects remaining in %s on __kmem_cache_shutdown()"); + list_slab_objects(s, slab); } } spin_unlock_irq(&n->list_lock);