From patchwork Wed Feb 26 08:12:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hyesoo Yu X-Patchwork-Id: 13991723 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 75736C19776 for ; Wed, 26 Feb 2025 08:14:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DFE54280007; Wed, 26 Feb 2025 03:14:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D5FF8280001; Wed, 26 Feb 2025 03:14:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B15B7280007; Wed, 26 Feb 2025 03:14:05 -0500 (EST) 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 90E42280001 for ; Wed, 26 Feb 2025 03:14:05 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 20CDF51E21 for ; Wed, 26 Feb 2025 08:14:05 +0000 (UTC) X-FDA: 83161382850.07.2D1CD00 Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by imf01.hostedemail.com (Postfix) with ESMTP id 082304000C for ; Wed, 26 Feb 2025 08:14:01 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=JSqww87L; spf=pass (imf01.hostedemail.com: domain of hyesoo.yu@samsung.com designates 203.254.224.33 as permitted sender) smtp.mailfrom=hyesoo.yu@samsung.com; dmarc=pass (policy=none) header.from=samsung.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740557642; a=rsa-sha256; cv=none; b=PLW8SOSnPecSxIk/3B2eIKtQ27KGzDkoopZwwCyZ6UicVIPlNYxQ39vqCFsStOats01+qX Uh0aVXMVCsljFSCd/ZWHi4CcrRB3RiFS22j4hHwKv1/4XmHvYcGUOy1i/6200If2TrWBcL H2pTtqctnuczuObMG2CDhWF+qtWjCUc= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=samsung.com header.s=mail20170921 header.b=JSqww87L; spf=pass (imf01.hostedemail.com: domain of hyesoo.yu@samsung.com designates 203.254.224.33 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=1740557642; 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=y/oMSuvRKepLmXTKGntS/Q0V/kBVdNCAFR/MpTdZ1o8=; b=jc8GeOaDD1oWkrvScl4L/hK6itJ1p1HiePjdEyxlPnLl1wf8POnEsgnVXkNieV+gNqxIm2 rqFUSY1gavCwoAb88m3w0puc5wXmhw8PMDWDp7xKUi6zFGElJ6AqbR3jHNfzkrT0R8x4Iv W8LNgm1QnjWQ9+fkV2/RyvP2RL2nOCo= Received: from epcas2p2.samsung.com (unknown [182.195.41.54]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20250226081359epoutp035cf6c40a476cbf5b2cb2b0260b4e3239~ns-NvmcgW1718817188epoutp03O for ; Wed, 26 Feb 2025 08:13:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20250226081359epoutp035cf6c40a476cbf5b2cb2b0260b4e3239~ns-NvmcgW1718817188epoutp03O DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1740557639; bh=y/oMSuvRKepLmXTKGntS/Q0V/kBVdNCAFR/MpTdZ1o8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JSqww87LJh6TvIL0vN6mUf9sczbXExDkG4pPXBXqMnVxj2d8ZMF3GkDMoXAaWNrFv Qng2wJMNYQvzhVenHFseQcxAL05OJ5M8y3tz+YqD+AMO4JQYCJSnVU+OMaz1uXNXRp oZBvvD6Y/u6x+zkKebZhSbMBD+XfXrjXLd+kFRJQ= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas2p4.samsung.com (KnoxPortal) with ESMTP id 20250226081358epcas2p4e8cce881bccda9714b1e8ed47cc7a9a4~ns-NYqr812188621886epcas2p4l; Wed, 26 Feb 2025 08:13:58 +0000 (GMT) Received: from epsmgec2p1.samsung.com (unknown [182.195.36.68]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4Z2nLG15ctz4x9QC; Wed, 26 Feb 2025 08:13:58 +0000 (GMT) Received: from epcas2p1.samsung.com ( [182.195.41.53]) by epsmgec2p1.samsung.com (Symantec Messaging Gateway) with SMTP id 46.7C.22938.64DCEB76; Wed, 26 Feb 2025 17:13:58 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas2p2.samsung.com (KnoxPortal) with ESMTPA id 20250226081357epcas2p2f4c462b215b75291a9aeeec23aa1eaca~ns-MYMWbM2578225782epcas2p2V; Wed, 26 Feb 2025 08:13:57 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250226081357epsmtrp16d2e4ae7b529aa45a4a725ea784d30d4~ns-MXYt4l0588005880epsmtrp1j; Wed, 26 Feb 2025 08:13:57 +0000 (GMT) X-AuditID: b6c32a43-99d9b2400000599a-34-67becd467a02 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 15.A9.23488.54DCEB76; Wed, 26 Feb 2025 17:13:57 +0900 (KST) Received: from localhost.localdomain (unknown [10.229.95.142]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250226081357epsmtip20c43f30dedbf8fdfe160e8d4337488e8~ns-MFlIWK2001620016epsmtip2S; Wed, 26 Feb 2025 08:13:57 +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 1/2] mm: slub: Print the broken data before restoring slub. Date: Wed, 26 Feb 2025 17:12:00 +0900 Message-ID: <20250226081206.680495-2-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+NgFjrFJsWRmVeSWpSXmKPExsWy7bCmqa7b2X3pBhcPsFpM7DGwmLN+DZvF 9W9vGC3uL3vGYvG38wKrxcruZjaLzXOKLS7vmsNmcW/Nf1aLts//gMSSjUwWE9eIWsxu7GN0 4PXYOesuu8eCTaUem1Z1snls+jSJ3aPr7RUmjxMzfrN4PLkyncljYcNUZo+PT2+xePRtWcXo cWbBEXaPz5vkAniism0yUhNTUosUUvOS81My89JtlbyD453jTc0MDHUNLS3MlRTyEnNTbZVc fAJ03TJzgH5QUihLzCkFCgUkFhcr6dvZFOWXlqQqZOQXl9gqpRak5BSYF+gVJ+YWl+al6+Wl llgZGhgYmQIVJmRn7Dv9j61ghVrFkRWtrA2M0+S6GDk5JARMJC7MnsTexcjFISSwg1Fi5eab rBDOJ0aJOecXsUE43xgltn36BlTGAdby6nAeRHwvo8STVWuZIJzPjBK7bt5kA5nLJqAucWLL MkYQW0SARWLl9+8sIEXMAuuYJVbOnwyWEBYIkPh1/hcziM0ioCox6dp5JhCbV8BaYvOFc0wQ B8pL3F5zkgXE5hSwkXiz+Q4LRI2gxMmZT8BsZqCa5q2zmUEWSAgc4ZBYf/gMG0Szi8TtTU9Y IWxhiVfHt7BD2FISL/vboOxiiW2LDzNBNDcwSmzuuM8MkTCWmPWsnRHkZ2YBTYn1u/Qh3leW OHILai+fRMfhv9BQ4ZXoaBOCaFSW2L9sHguELSnxaG071AUeEvMWLocGbz+jxMZT05gmMCrM QvLOLCTvzEJYvICReRWjWGpBcW56arJRgSE8ipPzczcxghO1lvMOxivz/+kdYmTiYDzEKMHB rCTCy5m5J12INyWxsiq1KD++qDQntfgQoykwsCcyS4km5wNzRV5JvKGJpYGJmZmhuZGpgbmS OG/1jpZ0IYH0xJLU7NTUgtQimD4mDk6pBqYGhwuWKQpXVxzXjnu29bNwEc/ZhbkeJ1ZXdVQu 9mgVubr9Vud2lgPGXSfXtF2eyaelmhZk6SC7Jny+LadcTfEi36dr74vs4lo7r/Z20VObh/zr 8+f2vIvwLHr0rebBEUG9ojfnNmiWXgvo+hHZMCXjS/NUrxN78y+ounvNmHyqqcrLvcN0Hgev zmadhWvijrw/WPf35PTNWZELtpvMlz98Syy34aVsxGaNuzkxNT3yYRnrHX/mJM775mxnHP2H xSA8via2qXX3wlk/ElJcpq19J8nxm2F+5OllX2frihjV/f33f2Ow9ueqR1NTI9eWL/NqnOJ3 6OvtSMb7Zz3zuRfzaxqkv/qktUPh17eTUr5KLMUZiYZazEXFiQDQBIrZXQQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmkeLIzCtJLcpLzFFi42LZdlhJXtf17L50gzc75C0m9hhYzFm/hs3i +rc3jBb3lz1jsfjbeYHVYmV3M5vF5jnFFpd3zWGzuLfmP6tF2+d/QGLJRiaLiWtELWY39jE6 8HrsnHWX3WPBplKPTas62Tw2fZrE7tH19gqTx4kZv1k8nlyZzuSxsGEqs8fHp7dYPPq2rGL0 OLPgCLvH501yATxRXDYpqTmZZalF+nYJXBn7Tv9jK1ihVnFkRStrA+M0uS5GDg4JAROJV4fz uhi5OIQEdjNKLJt0jbWLkRMoLikx6/NJJghbWOJ+yxFWiKKPjBK3n89lAUmwCahLnNiyjBHE FhFgkVj5/TsLSBGzwB5miTfN28EmCQv4SSzcsResiEVAVWLStfNgU3kFrCU2XzgHtUFe4vaa k2BDOQVsJN5svsMCcp0QUM3RpTIQ5YISJ2c+ASthBipv3jqbeQKjwCwkqVlIUgsYmVYxSqYW FOem5yYbFhjmpZbrFSfmFpfmpesl5+duYgTHk5bGDsZ335r0DzEycTAeYpTgYFYS4eXM3JMu xJuSWFmVWpQfX1Sak1p8iFGag0VJnHelYUS6kEB6YklqdmpqQWoRTJaJg1OqgUkzaF3avzX8 zqfbou72OjZ9Sd4x55PA2TPGx9kDnX+KnFrS1p6Y/vHg+TTVhhcvVvG9FP5U387eMSOfc3Vn wlfWmawFpvHt3x9w/HuZOXk2/+3gk2/u/bFgPHhyyUVbPcnlZk8OsF06b/RzYi3n0ov/Na9E PT1Zbnc/61bS4cfq/RnhE/qNcx7ksYkUPI/hyn65bpXhgsboC7XSlv2yqoXBGw+ncx9TN4/W m7JK+VzD1eCwGtNKU++A9MC0sLOzwzcc+RrNGdcnq/T+oFz2sb/b2z0OcVvsvxSdvdJm5+yk DVMcLn66aM4q/+O8X57Vq183szpvLVh6c/6cwr9/X7Y9/3HnoV4Re2tO22a7biElluKMREMt 5qLiRAD25iFRFgMAAA== X-CMS-MailID: 20250226081357epcas2p2f4c462b215b75291a9aeeec23aa1eaca X-Msg-Generator: CA X-Sendblock-Type: AUTO_CONFIDENTIAL CMS-TYPE: 102P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250226081357epcas2p2f4c462b215b75291a9aeeec23aa1eaca References: <20250226081206.680495-1-hyesoo.yu@samsung.com> X-Stat-Signature: hpym63hc4oag49rrybydbpzpe3ug8uqw X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 082304000C X-Rspam-User: X-HE-Tag: 1740557641-650426 X-HE-Meta: U2FsdGVkX18iSdUffoXI9kX1cM2i9gT1HZux0PTOAMHw3NtwE/GtGVjFbNIugt3+JKdYQVpTMEJ/96qI2/jWIj5b/wKAo+k13/FYPw9RfH8oSDnq2WjMqjK8/hGk0slcBPzMTpF0ZsDW6gs00KZmXV3OP2dlQGgjsxs1R7c2IPz5ce0AqyzskbjpDKrRrL6chnjisVy33RQ6kaRjhYfJvS4efC9UOrCNjRppYR7ew+ajOPEOFnvPNdtNC4OKwPqeOugiZ0XeT7/xbrLl8L9fNBdFmwhGhgdLZSt7tSzxXd6wCf+lzxiUXSSrdHUNfef7vYj22RO1jxWl9tHBFnHF6OHEsaR08RDNZPDsn4xosXjzFPRkYjKb+O9CNAj8xv2CSAAL9iuxLdEEeWN3hULVpWqEg0jPmN7W6aW0NcuphsvhQq4tzRGHbJF3Ir9BpefHlUYhBKKPvZXvzrdXbcYCYPMK5Y4UZNT6xeFo9/bxfrKo8gUXV6q8aL/d9pR/dDSmNd1pjpeFJZGjglqzuN7Gob7YaP9jyDgS6afkYpTEJ8J+6q5/oyZTcO4Sq6vJhkpmm1L7gI1mdWWmDvtPYZQ9N/H5NoSbjfNpHKR65WbE4gzmjHD5kGiZlL9d1c3jjygeikR9kSZmgEmaFbiOvYWQJIfoBObTA1RInhcr5RIoqB+0gEcjKNhqZRMjmDDFidKetAow+80QsSK5Ngx07WjyDVCZR1Y5cUCxoTG5JPyvTt+207cJrwvgq08IlfkvqdzYjyQ5Ijlh+2HpbIrnSWpLGLOnYOTcJxS26dbYOwvqfJKSLiBxOmq7ylk3wk31A+BAAxFVVfHCv4bR7SvkKpANXvwIPeDmVcffOyGe0KNIewttfBpC0laXhM48mOUjMPf1bTWH/an92A2jJg35GAKjQ/8br1k+4lMCMXe186XtTqJZI/lXSsBTsJrVecFH8keepqNy1YUj/oM36LhB5T7 kM6E6a26 JNzKQVdfs+U5Hci2RnRp2nsEd7WiAxoUwTNl6U/xs9uGoyGpgWiqjHfubT2uFnIigF3ESb6JJ5vRWTgRtn/MAA8NccULMus+y0glJHnpxmJrcpO8MZFdmAJvb2ZlK0xz5zLh6f9JOy01QgTN0vdQg24Q6+jGVyTTYAfNT 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 v4: - Change the print format to include specific error names. 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 Reviewed-by: Harry Yoo --- mm/slub.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index b3969d63cc04..8c13cd43c0fd 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -1192,8 +1192,8 @@ 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; @@ -1212,10 +1212,11 @@ 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); + pr_err("[%s overwritten] 0x%p-0x%p @offset=%tu. First byte 0x%x instead of 0x%x\n", + what, fault, end - 1, fault - addr, fault[0], value); + + if (slab_obj_print) + object_err(s, slab, object, "Object corrupt"); skip_bug_print: restore_bytes(s, what, value, fault, end); @@ -1279,7 +1280,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 +1330,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 +1343,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 +1351,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 +1367,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 +1397,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; }