From patchwork Thu Feb 20 03:39:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hyesoo Yu X-Patchwork-Id: 13983275 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 81221C021B1 for ; Thu, 20 Feb 2025 03:42:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 159C54401C4; Wed, 19 Feb 2025 22:42:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 06AE14401AE; Wed, 19 Feb 2025 22:42:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E289F4401C4; Wed, 19 Feb 2025 22:42:01 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id BF60C4401AE for ; Wed, 19 Feb 2025 22:42:01 -0500 (EST) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 822EEB16DA for ; Thu, 20 Feb 2025 03:42:01 +0000 (UTC) X-FDA: 83138924442.23.16D97F5 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by imf30.hostedemail.com (Postfix) with ESMTP id 7430980005 for ; Thu, 20 Feb 2025 03:41:58 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=plkFSWtX; spf=pass (imf30.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=1740022919; 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=H4azcLXLwKXZ7Rp0EynOTNSZHZ93h+/31V07oqrMJzE=; b=xNS6AyNTrUMEwchMmFCUiDljQAYNNxvkfiUEb7MAkSMnqvxAwjr5xbRFCsMCLHZgwxi70V loEw+1R8YVwGm+4rwi4xEq5IAGDS/PpXYhtvyTEj09z3AEik+NsGDPx0GejKWEJclFI+0O 3BrinhZAB2Cy34NihHgHuOBbwnOugio= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740022919; a=rsa-sha256; cv=none; b=7yFg3IHs203lZmZkftlkqlWrgdarPME8ET81976+tgXaABeR3KPxs2AzT0oQxzicfb/Ao6 bz/J+3nu0yYhp7pLBcVDaiTNTPS8icKM0B7lhZaxCRSrEbvN97ihN/HjAzcE703vZiCutM DSg2lXmoJ2a1eh6x6JSfVIaKfrrY2Hg= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=plkFSWtX; spf=pass (imf30.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 epcas2p2.samsung.com (unknown [182.195.41.54]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20250220034155epoutp0266deb7d277bcf993c2cf8847318062bb~lzZ9Uq7b51268312683epoutp02P for ; Thu, 20 Feb 2025 03:41:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20250220034155epoutp0266deb7d277bcf993c2cf8847318062bb~lzZ9Uq7b51268312683epoutp02P 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> MIME-Version: 1.0 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 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> X-Rspam-User: X-Rspamd-Queue-Id: 7430980005 X-Rspamd-Server: rspam07 X-Stat-Signature: fwqz37js8ogyswotr597j1hc9o3w9i4f X-HE-Tag: 1740022918-325707 X-HE-Meta: U2FsdGVkX19jjMnKt/vCqyjNdaLV/4cryA0mPq0+Z0mASHHQ8qJQX5Xf4y9tbEeyr+ZnY04K2UcljqnIHccwUIRnzURmdPOIFQG1lM4Q3N/Czkxec7WkUTEMxxHn8fXnVz4UFmadAlpE2rXrZDHjxKvwsPiQmuGL0F+Ka0/HfoEs87VxCO1JlNupLcVwI7JpZh7WMPwVsfgQkQwlVSIrEfIkVlu7A7YflFwSAh8eqG95GkFJLW1b+Jdb80l9blWv0ZcfGfYTgC2sxSk79+XGMO7unQrBNQvEzThdFSiiwkUZbE27dbZUgCcQ29PHGqGbfX2xVAhLsDuYYqzooRJTkpGvzo3dRwOAxqQnbYD1WqpD6n6w7T2vVNfMxBVCgLzgMtH+idnJgFSVdzfXJ8HdHypQ+5k43RFhCUii9Dov8d1ZwC2IOQTk+SCnB93kfGOy4ExnCrZDZNfYTKMLMawcpiNg/xPNW1udWvweXOl6AOUhMy69173li5HN2SNoNoGNrie9ho01SmfxClu8cxBmLDgaCZWtV++bFT0r83DSW6AXmYf96qIdV+KJDMwItXSTDlw0EZFtDF7WLRtnsprb4TDcqWBx/7F6RsLeUjImr+n3+XDqwjADCjsVvSWI/v1v/NwJ8clj05ht5sId+4pgnxGQmITEMwt3BSX45mbN9Sha6YEPfrAqEju6hQJTEByCyJsQDrBqiZzy40AcYgz7KLG/sLFaM6qP6cU2vhUmo+4xffBSUHAh9LpfCNeg/xzEJPfdU3VK7HybWUDiBlytwozk4Y655cZmc+OnQvcH+GVk/GTmsbwNB8s8eGm/sMe2Dd9oK5Hah/xShySn3OD40eYZJziPvhbcQBJlhQK51LiuRrOKOyKDlhnAJl4n0TiuvRr04t4Fl0vFB3f6yp1CjyJWDzjQqO43TeYdR7PDezTePXVfkC3dDAIT0u3hIHswhl1eWJvPt7jwyn3b4wf dfKxz2us 20JKmQSJBiKgia/ETo1oYCFdTuMKhUicnHU0zrC90RS/0Q56oszGOVHe/Ip6cJCXSCUMkL6v9m1qyIINGKL+qg/YiAd2pgIKeYqKryun4TeSLFjzb2gxHwOEcLFVASiqXTge4xvcpv5Wcsicxwcmm/BqAz6FYRY6XBR+c 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: 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, char *message, u8 data, 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 = slab_address(slab); + char buf[100]; metadata_access_enable(); fault = 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; - slab_bug(s, "%s overwritten", what); pr_err("0x%p-0x%p @offset=%tu. First byte 0x%x instead of 0x%x\n", fault, end - 1, fault - addr, fault[0], value); + 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, struct slab *slab, u8 *p) return 1; 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); } /* Check the pad bytes at the end of a slab page */ @@ -1329,11 +1333,11 @@ static int check_object(struct kmem_cache *s, struct slab *slab, 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 = 0; 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 = 0; if (slub_debug_orig_size(s) && val == 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 = 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 = 0; } } @@ -1366,11 +1370,11 @@ static int check_object(struct kmem_cache *s, struct 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 = 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 = 0; } /* @@ -1396,11 +1400,6 @@ static int check_object(struct kmem_cache *s, struct slab *slab, ret = 0; } - if (!ret && !slab_in_kunit_test()) { - print_trailer(s, slab, object); - add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); - } - return ret; }