From nobody Thu Dec 18 16:19:07 2025 Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D0E635958 for ; Thu, 20 Feb 2025 03:50:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.33 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740023418; cv=none; b=kzST5W0Vhu7S5ANGI3VoKZ05y5fQLATGagbSNWtohTn5QNw9dQNFRy0itkjZqvha+f5fK2PuYsWcEP8ZR36INnHoLAt8+b/wXgiJ6vfaqaF8bgvjT+HBqfNDEL4Si8vf+4bwdgQHUBz852b4uMVBcovwtBKQ7Xq6jRpowjDMaAY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740023418; c=relaxed/simple; bh=PYFGeWDiJK1zJray/KRu3t7m7/XckFZzoAnOn1p68Bo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:MIME-Version: Content-Type:References; b=F8vT/EXAxjgACIjM4ySPevKYOTOb0IydOA2Tf/VrffvC4BWBTSl2LfOoIURs6hNh9SvVA5BqyuSvTfeeLGDxZy5kRs0DMxJ5M5wkG+rClXDr5R9kBA9/OC5hZGgoJ9makO/6+o12jaAsEkaopvOxZZIfbkoNraLopIptl2TSY9c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=plkFSWtX; arc=none smtp.client-ip=203.254.224.33 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="plkFSWtX" Received: from epcas2p2.samsung.com (unknown [182.195.41.54]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20250220034155epoutp034a5f82e32a5d70657abc3da5cc640d3f~lzZ9cHFhH0844408444epoutp036 for ; Thu, 20 Feb 2025 03:41:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20250220034155epoutp034a5f82e32a5d70657abc3da5cc640d3f~lzZ9cHFhH0844408444epoutp036 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1740022915; bh=H4azcLXLwKXZ7Rp0EynOTNSZHZ93h+/31V07oqrMJzE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=plkFSWtXZj5cGCjGL3BRt/+08UsrXpYzNJo9D3v9oGlxEuUhesuH9mBLp9UaAYS/B kxUtY8DnA2ryO80PyiSlpRJ7jH/WImsMxEOqRgkkGdmqRDgoSNOVefCsc5rxLTe0wg QM6L0JI5acNbrZW2vKBmb2gBbq4t+PgokbV1aIGw= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas2p2.samsung.com (KnoxPortal) with ESMTP id 20250220034154epcas2p23b341bf96d32260f088e3f3990446018~lzZ8zkyUU2078020780epcas2p2I; Thu, 20 Feb 2025 03:41:54 +0000 (GMT) Received: from epsmges2p1.samsung.com (unknown [182.195.36.97]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4Yyzb60hr1z4x9Pw; Thu, 20 Feb 2025 03:41:54 +0000 (GMT) Received: from epcas2p2.samsung.com ( [182.195.41.54]) by epsmges2p1.samsung.com (Symantec Messaging Gateway) with SMTP id FB.DE.23368.184A6B76; Thu, 20 Feb 2025 12:41:54 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas2p2.samsung.com (KnoxPortal) with ESMTPA id 20250220034153epcas2p286194dda687b47a3dec8fb89b868f96f~lzZ7tCD2q2078020780epcas2p2F; Thu, 20 Feb 2025 03:41:53 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250220034153epsmtrp1cbab2796f3f2a97c7397666d4f981bd1~lzZ7sUnvk1425814258epsmtrp1X; Thu, 20 Feb 2025 03:41:53 +0000 (GMT) X-AuditID: b6c32a45-db1ed70000005b48-49-67b6a4818df1 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id F3.DF.23488.184A6B76; Thu, 20 Feb 2025 12:41:53 +0900 (KST) Received: from localhost.localdomain (unknown [10.229.95.142]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250220034153epsmtip2f87312153609b5094ae5e8f81ba45d09~lzZ7cjPLm1561715617epsmtip2G; Thu, 20 Feb 2025 03:41:53 +0000 (GMT) From: Hyesoo Yu To: Cc: janghyuck.kim@samsung.com, vbabka@suse.cz, 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 v3 1/2] mm: slub: Print the broken data before restoring slub. Date: Thu, 20 Feb 2025 12:39:43 +0900 Message-ID: <20250220033953.1606820-2-hyesoo.yu@samsung.com> X-Mailer: git-send-email 2.48.0 In-Reply-To: <20250220033953.1606820-1-hyesoo.yu@samsung.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrPJsWRmVeSWpSXmKPExsWy7bCmmW7Tkm3pBhOnM1lM7DGwmLN+DZvF 9W9vGC3+dl5gtVjZ3cxmsXlOscXlXXPYLO6t+c9q0fb5H5BYshGofo2oxezGPkYHHo+ds+6y eyzYVOqxaVUnm8emT5PYPbreXmHyODHjN4vHkyvTmTwWNkxl9ujbsorR48yCI+wenzfJBXBH ZdtkpCampBYppOYl56dk5qXbKnkHxzvHm5oZGOoaWlqYKynkJeam2iq5+AToumXmAF2upFCW mFMKFApILC5W0rezKcovLUlVyMgvLrFVSi1IySkwL9ArTswtLs1L18tLLbEyNDAwMgUqTMjO uPH2JlvBUbWKk9PbmRoYd8h1MXJySAiYSPzo/8DYxcjFISSwg1HizZKHUM4nRomO6dvYQaqE BL4xSny6ZQHT0burmR2iaC+jxKudncwQzmdGidYPk9lAqtgE1CVObFnGCGKLCLBIrPz+nQWk iFlgBrPE9kO7mUASwgIBEp2H1jKD2CwCqhLPLh8Ca+YVsJFonD+JDWKdvMTtNSdZQGxOAVuJ N23L2CFqBCVOznwCFmcGqmneOhvsCgmBLRwSC5ovAC3gAHJcJHZvFoWYIyzx6vgWdghbSuJl fxuUXSyxbfFhJojeBkaJzR33mSESxhKznrUzgsxhFtCUWL9LH2KkssSRW1Br+SQ6Dv9lhwjz SnS0CUE0KkvsXzaPBcKWlHi0tp0VwvaQuHBqKyskrCYwSjw4+I59AqPCLCTfzELyzSyExQsY mVcxiqUWFOempxYbFRjCYzg5P3cTIzgla7nuYJz89oPeIUYmDsZDjBIczEoivG31W9KFeFMS K6tSi/Lji0pzUosPMZoCw3ois5Rocj4wK+SVxBuaWBqYmJkZmhuZGpgrifNW72hJFxJITyxJ zU5NLUgtgulj4uCUamDa+j9Qd07fnz8Tkl7f0D5Qv21i3/njR58/9dwkOHFnxM1g38tzxa4r vJ7DMuPbXqdFc59ZxTV3rU/ne6PG9Dgs6eDrRK3ko3MaHs1yn/B34b/4241R8051MHw97u/0 QGmKWwCzxMvtDwqel2dqNCyY82Dq5ufLvu1T+3Rtek36hiiVu0+emxwNC9xVEe0X+bRJ1rZn sfDE7NnTtJUdMlVz323c/KZiIs8LjeNndmlf9+Od3XWzuCrMaV3xrs/H3ZKcswNeaxyfM0n/ 2w35v/ZlGmdXf3XXYLDMVGG6WRX140qL2tkDv5zm7En9Ou/tyYl2f7QenNp9btLVk2cjPOYt OHdAzU9abt5U9VmxVt/EK6qVWIozEg21mIuKEwENL4GwUgQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrNLMWRmVeSWpSXmKPExsWy7bCSvG7jkm3pBgs+iVpM7DGwmLN+DZvF 9W9vGC3+dl5gtVjZ3cxmsXlOscXlXXPYLO6t+c9q0fb5H5BYspHJYuIaUYvZjX2MDjweO2fd ZfdYsKnUY9OqTjaPTZ8msXt0vb3C5HFixm8WjydXpjN5LGyYyuzRt2UVo8eZBUfYPT5vkgvg juKySUnNySxLLdK3S+DKuPH2JlvBUbWKk9PbmRoYd8h1MXJySAiYSPTuambvYuTiEBLYzSgx 93MXG0RCUmLW55NMELawxP2WI6wQRR8ZJQ7/ms4MkmATUJc4sWUZI4gtIsAisfL7dxaQImaB JcwSx+ZPAysSFvCTWPj2LwuIzSKgKvHs8iGwDbwCNhKN8ydBbZOXuL3mJFgNp4CtxJu2Zewg thBQzbl9x5kg6gUlTs58AlbDDFTfvHU28wRGgVlIUrOQpBYwMq1ilEwtKM5Nz002LDDMSy3X K07MLS7NS9dLzs/dxAiOHy2NHYzvvjXpH2Jk4mA8xCjBwawkwttWvyVdiDclsbIqtSg/vqg0 J7X4EKM0B4uSOO9Kw4h0IYH0xJLU7NTUgtQimCwTB6dUA1PAjSOffwe0lK8uvfNrz8SrSYfu 5f2Qbvq5oWTrccU5BUEXd+1zDXmzOcHQQn1PM9vPNyFrVSy+7JsQJuR//TZn/9aCRUfz4jQ3 dF/lluZ8dH9mVW2ZonPRApmIzetcNjWGTVM/YzQjNFNBmuWcj7iov/8U70XzenbZ5PqdkNLK evf1c5N2+RXLq9yWKlujShZXncu20rYQe/AyRbHXoSSd1ej2g3WK21/O2a0pHRhql85q2D/P RX3ywk8vxK/q7onWsWB/JvOXr/Tgk+wbM8q4DFwWbfb91f9h/dHSN00xbZ/lnqa/sUyeVLxh R0qV9Ial1aW1S69dXWezlyclisd3yvrwYssXjLY1dz6yuiixFGckGmoxFxUnAgBLUrd/DgMA AA== X-CMS-MailID: 20250220034153epcas2p286194dda687b47a3dec8fb89b868f96f X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: AUTO_CONFIDENTIAL CMS-TYPE: 102P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250220034153epcas2p286194dda687b47a3dec8fb89b868f96f References: <20250220033953.1606820-1-hyesoo.yu@samsung.com> Previously, the restore occured after printing the object in slub. After commit 47d911b02cbe ("slab: make check_object() more consistent"), the bytes are printed after the restore. This information about the bytes before the restore is highly valuable for debugging purpose. For instance, in a event of cache issue, it displays byte patterns by breaking them down into 64-bytes units. Without this information, we can only speculate on how it was broken. Hence the corrupted regions should be printed prior to the restoration process. However if an object breaks in multiple places, the same log may be output multiple times. Therefore the slub log is reported only once to prevent redundant printing, by sending a parameter indicating whether an error has occurred previously. Changes in v3: - Change the parameter type of check_bytes_and_report. Changes in v2: - Instead of using print_section every time on check_bytes_and_report, just print it once for the entire slub object before the restore. Signed-off-by: Hyesoo Yu Change-Id: I73cf76c110eed62506643913517c957c05a29520 --- mm/slub.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index b3969d63cc04..de62fed12236 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1192,12 +1192,13 @@ static void restore_bytes(struct kmem_cache *s, cha= r *message, u8 data, =20 static pad_check_attributes int check_bytes_and_report(struct kmem_cache *s, struct slab *slab, - u8 *object, char *what, - u8 *start, unsigned int value, unsigned int bytes) + u8 *object, char *what, u8 *start, unsigned int value, + unsigned int bytes, bool slab_obj_print) { u8 *fault; u8 *end; u8 *addr =3D slab_address(slab); + char buf[100]; =20 metadata_access_enable(); fault =3D memchr_inv(kasan_reset_tag(start), value, bytes); @@ -1212,11 +1213,14 @@ check_bytes_and_report(struct kmem_cache *s, struct= slab *slab, if (slab_add_kunit_errors()) goto skip_bug_print; =20 - slab_bug(s, "%s overwritten", what); pr_err("0x%p-0x%p @offset=3D%tu. First byte 0x%x instead of 0x%x\n", fault, end - 1, fault - addr, fault[0], value); =20 + scnprintf(buf, 100, "%s overwritten", what); + if (slab_obj_print) + object_err(s, slab, object, buf); + skip_bug_print: restore_bytes(s, what, value, fault, end); return 0; @@ -1279,7 +1283,7 @@ static int check_pad_bytes(struct kmem_cache *s, stru= ct slab *slab, u8 *p) return 1; =20 return check_bytes_and_report(s, slab, p, "Object padding", - p + off, POISON_INUSE, size_from_object(s) - off); + p + off, POISON_INUSE, size_from_object(s) - off, true); } =20 /* Check the pad bytes at the end of a slab page */ @@ -1329,11 +1333,11 @@ static int check_object(struct kmem_cache *s, struc= t slab *slab, =20 if (s->flags & SLAB_RED_ZONE) { if (!check_bytes_and_report(s, slab, object, "Left Redzone", - object - s->red_left_pad, val, s->red_left_pad)) + object - s->red_left_pad, val, s->red_left_pad, !!ret)) ret =3D 0; =20 if (!check_bytes_and_report(s, slab, object, "Right Redzone", - endobject, val, s->inuse - s->object_size)) + endobject, val, s->inuse - s->object_size, !!ret)) ret =3D 0; =20 if (slub_debug_orig_size(s) && val =3D=3D SLUB_RED_ACTIVE) { @@ -1342,7 +1346,7 @@ static int check_object(struct kmem_cache *s, struct = slab *slab, if (s->object_size > orig_size && !check_bytes_and_report(s, slab, object, "kmalloc Redzone", p + orig_size, - val, s->object_size - orig_size)) { + val, s->object_size - orig_size, !!ret)) { ret =3D 0; } } @@ -1350,7 +1354,7 @@ static int check_object(struct kmem_cache *s, struct = slab *slab, if ((s->flags & SLAB_POISON) && s->object_size < s->inuse) { if (!check_bytes_and_report(s, slab, p, "Alignment padding", endobject, POISON_INUSE, - s->inuse - s->object_size)) + s->inuse - s->object_size, !!ret)) ret =3D 0; } } @@ -1366,11 +1370,11 @@ static int check_object(struct kmem_cache *s, struc= t slab *slab, if (kasan_meta_size < s->object_size - 1 && !check_bytes_and_report(s, slab, p, "Poison", p + kasan_meta_size, POISON_FREE, - s->object_size - kasan_meta_size - 1)) + s->object_size - kasan_meta_size - 1, !!ret)) ret =3D 0; if (kasan_meta_size < s->object_size && !check_bytes_and_report(s, slab, p, "End Poison", - p + s->object_size - 1, POISON_END, 1)) + p + s->object_size - 1, POISON_END, 1, !!ret)) ret =3D 0; } /* @@ -1396,11 +1400,6 @@ static int check_object(struct kmem_cache *s, struct= slab *slab, ret =3D 0; } =20 - if (!ret && !slab_in_kunit_test()) { - print_trailer(s, slab, object); - add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); - } - return ret; } =20 --=20 2.28.0 From nobody Thu Dec 18 16:19:07 2025 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7869E1DED72 for ; Thu, 20 Feb 2025 03:41:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.25 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740022922; cv=none; b=m4G1i8T2hHMRsiLJ0K+YdSIFUxsvjVMpRuabVAJq9MPL0KUaxVrWVkGCCYRZcRauUuR93gsp7t1V2wvJ0GzDf43+hgqw0CFkvSz8oU6R914chRDiuT/cJizJy8FLFLiwTGKBFLen8sIgbKikF7aEcNmRFFKEnjDBHVjE6X/LItc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740022922; c=relaxed/simple; bh=OScdaKDtr8T06yXiVcDLxJw3B/t1G8+PUsSdSGgJfT8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:MIME-Version: Content-Type:References; b=UYv0zwhH4wP5aqd4lNCLI6MB8FdbsRFLqImkRDGA9GtoJMQqlPNwvp296fSinJhzwvUOsa3w/LaKlekc+4d+psizSo7vMLqhX6xVaNlTahZBaL4cZf4SChfdI0o7GNZ9FQn7VJdOPNpV4n60/2PGrVP6FS4XU451KKH4bULPkao= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=jwrcLfBR; arc=none smtp.client-ip=203.254.224.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="jwrcLfBR" Received: from epcas2p3.samsung.com (unknown [182.195.41.55]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20250220034157epoutp028498394d83d7eaebd3a1e7bd8ef9cba9~lzZ-Y4eWB1229612296epoutp02Z for ; Thu, 20 Feb 2025 03:41:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20250220034157epoutp028498394d83d7eaebd3a1e7bd8ef9cba9~lzZ-Y4eWB1229612296epoutp02Z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1740022917; bh=vjT+FDRV2/jMUKEGLa+CBlGRc7uvf1OYkjsKrrMpdZo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jwrcLfBR7DyGy7+8VT9UdXxTpVs0Tk/u+3krIfwfTiMpvfHgABMIZ2OgmmyZgYSjP 1mW7TfkltEWjQV3kt+UJ9RFi20zsLNVuqUF2FUoiEbkHYQBkrS2nljyYpcEjuKj9al g1YqLnwGrh8vaic/6OueIU130WuqaXDCa09srofM= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas2p3.samsung.com (KnoxPortal) with ESMTP id 20250220034156epcas2p3baa2889f044da38ee9248a81386468cd~lzZ_8thZ42335023350epcas2p3N; Thu, 20 Feb 2025 03:41:56 +0000 (GMT) Received: from epsmgec2p1-new.samsung.com (unknown [182.195.36.89]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4Yyzb84lm8z4x9Q2; Thu, 20 Feb 2025 03:41:56 +0000 (GMT) Received: from epcas2p2.samsung.com ( [182.195.41.54]) by epsmgec2p1-new.samsung.com (Symantec Messaging Gateway) with SMTP id C4.3D.32010.484A6B76; Thu, 20 Feb 2025 12:41:56 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas2p1.samsung.com (KnoxPortal) with ESMTPA id 20250220034155epcas2p156b90cfb655a03cce4bfac9683f0bfe1~lzZ99UehS0484304843epcas2p1Y; Thu, 20 Feb 2025 03:41:55 +0000 (GMT) Received: from epsmgmcp1.samsung.com (unknown [182.195.42.82]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20250220034155epsmtrp228b8489697316fce430374a5077087a8~lzZ98qRJW0154001540epsmtrp2g; Thu, 20 Feb 2025 03:41:55 +0000 (GMT) X-AuditID: b6c32a4d-acffa70000007d0a-4b-67b6a484f61d Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmcp1.samsung.com (Symantec Messaging Gateway) with SMTP id E5.C7.33707.384A6B76; Thu, 20 Feb 2025 12:41:55 +0900 (KST) Received: from localhost.localdomain (unknown [10.229.95.142]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250220034155epsmtip2387cdf1b25b38d44199bd5ae42908dcf~lzZ9s6xmK1425514255epsmtip2i; Thu, 20 Feb 2025 03:41:55 +0000 (GMT) From: Hyesoo Yu To: Cc: janghyuck.kim@samsung.com, vbabka@suse.cz, 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 v3 2/2] mm: slub: call WARN() when the slab detect an error Date: Thu, 20 Feb 2025 12:39:44 +0900 Message-ID: <20250220033953.1606820-3-hyesoo.yu@samsung.com> X-Mailer: git-send-email 2.48.0 In-Reply-To: <20250220033953.1606820-1-hyesoo.yu@samsung.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrMJsWRmVeSWpSXmKPExsWy7bCmmW7Lkm3pBkfvqFhM7DGwmLN+DZvF 9W9vGC3+dl5gtVjZ3cxmsXlOscXlXXPYLO6t+c9q0fb5H5BYspHJYuIaUYvZjX2MDjweO2fd ZfdYsKnUY9OqTjaPTZ8msXt0vb3C5HFixm8WjydXpjN5LGyYyuzRt2UVo8eZBUfYPT5vkgvg jsq2yUhNTEktUkjNS85PycxLt1XyDo53jjc1MzDUNbS0MFdSyEvMTbVVcvEJ0HXLzAG6XEmh LDGnFCgUkFhcrKRvZ1OUX1qSqpCRX1xiq5RakJJTYF6gV5yYW1yal66Xl1piZWhgYGQKVJiQ nXF3tVbBacWKfz37WRsYV0h3MXJySAiYSNzc9Yqti5GLQ0hgD6PEqhUnmSGcT4wSm+fcR3De TVjECNOy/PszVojETkaJ08d/MEE4nxkl3qzYywpSxSagLnFiyzKwDhEBFomV37+zgBQxC8xg lth+aDcTSEJYwFuif+ZMdhCbRUBVYtraZ2BxXgEbiWs3NkCtk5e4veYkC4jNKWAr8aZtGTtE jaDEyZlPwOLMQDXNW2czQ9Qv5ZA4fMQdwnaRmHj4KTuELSzx6vgWKFtK4vO7vWwQdrHEtsWH wT6QEGgAerrjPtQgY4lZz9qBjuAAWqApsX6XPogpIaAsceQW1Fo+iY7Df9khwrwSHW1CEI3K EvuXzWOBsCUlHq1tZ4WwPSQeL1wNDasJwBB9vIlxAqPCLCTfzELyzSyExQsYmVcxSqUWFOem pyYbFRjq5qWWw2M5OT93EyM4NWv57mB8vf6v3iFGJg7GQ4wSHMxKIrxt9VvShXhTEiurUovy 44tKc1KLDzGaAsN7IrOUaHI+MDvklcQbmlgamJiZGZobmRqYK4nzVu9oSRcSSE8sSc1OTS1I LYLpY+LglGpgat0VfDbof/G803bB54s5JCy4LT7xuz774JV9cGp885aru2ViDkVsqz1uPCfW 2vG8p6benckf1Vp6i0y/rGy6o8v+W3mqeLDVrl1z83772V0WP9C/ILZP+PBR0e/MD283q4pf bk7Ne35g/W7vM24rEicWOIpEr+bME/icUXqDN73lj558nLN1yvICRifTs3td54fJJDCK1uYt cZ+dzSBxS1bCtapkTyL/gttFxfVbNu5Mnzwrg1eqNffbzFqfGNEftjzMyZwzu3V898flO59t T6+8ELX/U+65hwpupRdW+4eq2R1fs11mB+9p4w1hDof3PV9h86LIdv2p1dtEe+7IXH//iz8q Lj4jnfdT/H4lluKMREMt5qLiRADaHBzGVgQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrGLMWRmVeSWpSXmKPExsWy7bCSvG7zkm3pBv9u6FtM7DGwmLN+DZvF 9W9vGC3+dl5gtVjZ3cxmsXlOscXlXXPYLO6t+c9q0fb5H5BYspHJYuIaUYvZjX2MDjweO2fd ZfdYsKnUY9OqTjaPTZ8msXt0vb3C5HFixm8WjydXpjN5LGyYyuzRt2UVo8eZBUfYPT5vkgvg juKySUnNySxLLdK3S+DKuLtaq+C0YsW/nv2sDYwrpLsYOTkkBEwkln9/xtrFyMUhJLCdUWLu svWMEAlJiVmfTzJB2MIS91uOQBV9ZJT4c3o1C0iCTUBd4sSWZWANIgIsEiu/f2cBKWIWWMIs cWz+NGaQhLCAt0T/zJnsIDaLgKrEtLXPwKbyCthIXLuxAWqbvMTtNSfBhnIK2Eq8aVsGVi8E VHNu33GoekGJkzOfgNUwA9U3b53NPIFRYBaS1CwkqQWMTKsYRVMLinPTc5MLDPWKE3OLS/PS 9ZLzczcxgqNGK2gH47L1f/UOMTJxMB5ilOBgVhLhbavfki7Em5JYWZValB9fVJqTWnyIUZqD RUmcVzmnM0VIID2xJDU7NbUgtQgmy8TBKdXANJX1fMDCZSpLTcI4Op73WM89uNjyafbWazWT +Zz2Zu+/dKz0ZuQKg1ev/s5lCIo7eS7L0mmRQf7h+779MV9O9fEu+jDr5dGAsqfab0sZnPv/ t73tUm635F5+9NeLmh0V1lwd8qv+qYhb3r5h87ahO9lc3fi524nWWm375b8PlmyysV7ub5YX HcrzY/+qskXTGVWXue9eJzD5hNnZqLdzdhnM5RTL8jR8Y+14n1fuhllLqaLGD5l9vMF9a9du ONOzxenNtiW78+Rv/ureLhpot6pe7F/+bu72oNigkq0K66dfXFx8W3Q9c3xc03uhXb4tCz0O b3ia4zWfIy691aTFR1+0NbbvBY/JwkKPUoG7SizFGYmGWsxFxYkA097L5QkDAAA= X-CMS-MailID: 20250220034155epcas2p156b90cfb655a03cce4bfac9683f0bfe1 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: AUTO_CONFIDENTIAL CMS-TYPE: 102P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250220034155epcas2p156b90cfb655a03cce4bfac9683f0bfe1 References: <20250220033953.1606820-1-hyesoo.yu@samsung.com> 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. There are cases where slab_err is called before meaningful logs are printed. If the WARN() in slab_err cause a panic, these logs will not be printed. WARN() should called after these logs are printed. Thus slab_err() is splited to __slab_err that calls the WARN() and it is called after printing logs. Changes in v3: - move the WARN from slab_fix to slab_err, object_err 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 Change-Id: I90b2ea9ffc58e3826f7ae9f1a774bb48c2d43bf4 --- mm/slub.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index de62fed12236..7f0583a71cda 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1096,8 +1096,6 @@ static void print_trailer(struct kmem_cache *s, struc= t 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(); } =20 static void object_err(struct kmem_cache *s, struct slab *slab, @@ -1109,6 +1107,8 @@ static void object_err(struct kmem_cache *s, struct s= lab *slab, slab_bug(s, "%s", reason); print_trailer(s, slab, object); add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); + + WARN_ON(1); } =20 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; } =20 +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 *sla= b, 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); } =20 static void init_object(struct kmem_cache *s, void *object, u8 val) @@ -1316,9 +1322,10 @@ slab_pad_check(struct kmem_cache *s, struct slab *sl= ab) while (end > fault && end[-1] =3D=3D POISON_INUSE) end--; =20 - slab_err(s, slab, "Padding overwritten. 0x%p-0x%p @offset=3D%tu", - fault, end - 1, fault - start); + slab_bug(s, "Padding overwritten. 0x%p-0x%p @offset=3D%tu", + fault, end - 1, fault - start); print_section(KERN_ERR, "Padding ", pad, remainder); + __slab_err(slab); =20 restore_bytes(s, "slab padding", POISON_INUSE, fault, end); } @@ -5431,14 +5438,13 @@ static int calculate_sizes(struct kmem_cache_args *= args, struct kmem_cache *s) return !!oo_objects(s->oo); } =20 -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 =3D slab_address(slab); void *p; =20 - slab_err(s, slab, text, s->name); + slab_bug(s, "Objects remaining on __kmem_cache_shutdown()"); =20 spin_lock(&object_map_lock); __fill_map(object_map, s, slab); @@ -5453,6 +5459,8 @@ static void list_slab_objects(struct kmem_cache *s, s= truct slab *slab, } } spin_unlock(&object_map_lock); + + __slab_err(slab); #endif } =20 @@ -5473,8 +5481,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); --=20 2.28.0