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 33065C02182 for ; Mon, 20 Jan 2025 15:41:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5ADB16B007B; Mon, 20 Jan 2025 10:41:20 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 55DD16B0083; Mon, 20 Jan 2025 10:41:20 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3FF3C6B0085; Mon, 20 Jan 2025 10:41:20 -0500 (EST) 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 1ED3D6B007B for ; Mon, 20 Jan 2025 10:41:20 -0500 (EST) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id A429B120267 for ; Mon, 20 Jan 2025 15:41:19 +0000 (UTC) X-FDA: 83028244278.20.356144F Received: from mail-lf1-f53.google.com (mail-lf1-f53.google.com [209.85.167.53]) by imf02.hostedemail.com (Postfix) with ESMTP id 9D48480012 for ; Mon, 20 Jan 2025 15:41:17 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=aO3geRbb; spf=pass (imf02.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.167.53 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1737387677; 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=6phSGDaq3hv1mlLFFxnobjnfwoHhRp2zpkD5NzRqtp0=; b=TdDey5mXpfgCsPxYpQbb/t/c3g5aO57msoCvCAb16TyljhuISEeURmR/Dj3iO/QvsNCf85 P/Hj8kBP/AUxtPIu0J1OQ7PhW/+Iaa5fmI/pHleFhQC/rL3AvwJQzWrIJ1P9JCyJadkIRu Qlzxunm+TBncfkJy/9PQtqBFFMHmvUs= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=aO3geRbb; spf=pass (imf02.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.167.53 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1737387677; a=rsa-sha256; cv=none; b=w1kwILCc8mU5MGqT1tSxGkAq2WsFrlcm8DyeK65d6CdqMXOwk/oX1wEdQmqMFyIFb/m3cn qYngH/6nboX27va6aCGU45Av8wfzIBj7V02P7qI3907FQQTKAjGPzKOwS6AevtZDLSWR8H h9cXgzh5dmCfTfXRTHjbHg7jAhg5oCc= Received: by mail-lf1-f53.google.com with SMTP id 2adb3069b0e04-54021daa6cbso5102596e87.0 for ; Mon, 20 Jan 2025 07:41:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737387676; x=1737992476; darn=kvack.org; 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=6phSGDaq3hv1mlLFFxnobjnfwoHhRp2zpkD5NzRqtp0=; b=aO3geRbblydM0/UVCXZKdDv1JueB73SCZ730O4p1AJjHZNAXHHIew8ebrwVz7hsXMN NB+FxBDefGA7QoH/GFoG9srjZ3NfCeKSrK3xEQIBNPsIISYpjp4DQF+0NHlEYfL5zg1r oDqKyQtrZzwSyItnT5zS9N/5hJ0pMRsQp3AeccrBaVuSpeiakeJwNHALnilu6NcJk5Qv iP4R7OWnLZWemto+rLaRolGIqC0t/VE+vkaWWQ9odRvxfnT6KImVrbpYnOZF92yfW9T7 Qd4t3CCcoTMPbvwPY3145w7qjA8L7PqXQags0uh3xxHfY6DefyKm5ET84v4E9TPS9HJL AqNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737387676; x=1737992476; 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=6phSGDaq3hv1mlLFFxnobjnfwoHhRp2zpkD5NzRqtp0=; b=wG1pYUJlfsVmgr5Q+DGAETIUse74buzhrvjalr8on4f4n0hG2IqDiwFwlXh0f4rTfT /6Ne3sVk5fOSBxmRDqWKHc2crVIkQpsMPV8hj3DzVz6Puq1k+9rI8ooUm78qQddYbfti 24uL5wyS3/yiNnMs3z/H5uVKntIV8NPzteTRTOIhZv9WLvuqBecpW+meWDU1luqOls3d NkktTTwRVbnoY46SrTAx0+n1TOJ4Uh6Qy3RjGDalOJE5YhMgsyyi63AZWp3FAcqHrdut n78uQicU/Rh8xMK/BEJi3jGRxXPBKaDbwxmQRtlMQCLZMwnseroAITHqsK/QDaKOy1nW oFIA== X-Forwarded-Encrypted: i=1; AJvYcCVRIq/4cKmb58JiyAbYwPzfg5xdzpVuB80PDDqsxu7nDDiuzwI4jwEPAiQ/TGR7KzhRKX7uC7Ijhg==@kvack.org X-Gm-Message-State: AOJu0YxQJKj0wjgrxw+l2ZOdsZoC+lS4Q4xOALBM/OLObCZguKn9oZUh GO8E+Q2go2bf6pq+0u0aojMBp5tB0/8cGZ2PiXoetiZoNs8iR4cKhdkaTlXZamnufzZitvK1f2Q pw9pkZUcrC59wUe14JqoNfgQ/n1c= X-Gm-Gg: ASbGncuUT/+6gAjmHV6nG6w2lUZh8yeCSOvH5uIHcZ58p4EXC9fa0SERCO7r7x5pJXr 25VxdnooiSG1CGBmx5N6H/j4lX5Z2LSLthK+8xN2fLN/eL8kXcpo= X-Google-Smtp-Source: AGHT+IE31mT7c1JrfGuGiu8GGV1KRrNf+wAVdI3hJf9q82OOTyGEz62tZ6WSyWp4kUEU2Mqw5nsIuMeiRJmCBJJLwUM= X-Received: by 2002:ac2:5e9d:0:b0:540:1abe:d6d2 with SMTP id 2adb3069b0e04-5439c2824b4mr3975322e87.35.1737387675420; Mon, 20 Jan 2025 07:41:15 -0800 (PST) MIME-Version: 1.0 References: <20250120082908.4162780-1-hyesoo.yu@samsung.com> In-Reply-To: <20250120082908.4162780-1-hyesoo.yu@samsung.com> From: Hyeonggon Yoo <42.hyeyoo@gmail.com> Date: Tue, 21 Jan 2025 00:41:01 +0900 X-Gm-Features: AbW1kvZGlcjQq3dFQfHorYaRRanRk-TtNWJMLmLSLqZaZdCdxFWs1a5oa8uXvtk Message-ID: Subject: Re: [PATCH] mm: slub: Panic if the object corruption is checked. To: Hyesoo Yu Cc: janghyuck.kim@samsung.com, Andrew Morton , Jonathan Corbet , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 9D48480012 X-Stat-Signature: chpcxfsc9y64rqppuygrobn67ignf4ed X-Rspam-User: X-HE-Tag: 1737387677-483535 X-HE-Meta: U2FsdGVkX18afhENjptANYzSG1rsypRffxRaVeAyj24Fue62x6fwJdM6eRLQXT8NRA8Mm+0Tl6vkEWcltdiyqFXCT8C4C1BhnEX1Oj03QCKRvII+jym1mi/dbG6iZj/77tva4bZrQB5Qsqf7nreqATCcGyyjtRxcDIGZ1BApKiIorGIDGJ+LbLiMKiGA+7cO8M8N5/JXHnwsGtoUgRCgRzOCkQrBWRcuGWuLjdMv2aWFiT+IsNAeywev2GU1/1ZgOY8JtoDOWHShT2YwG4/QM3aEccupI/bPotPqvpI1G4kN+k/4j2+hiV9l9eLMrAt9aJl2cmpbjKokz5Sf0hcWWLdPLAxUu50kfK2gEVw1UfU+M5iMQRKkc1+PPw4akfFOGhzp1kx95xj7pUqJtfotT6NJO+gXjDjvFL8V4Y+cc/edtf2glnViZBFyo4zLBhyR2RZx7+N5bikHPL2RdfP5e8zjWSu/j+jpRGBeK/a0jpPHQ7bTyK5p7DXqrdy6o8GlEVNyBl5UsBLdwhNZvjGEktnaR1IBwSNFE0Yf0GHjO44ySa/REMVD7zddiQiO4589c4pAeKNOwlEnoX29RLK8Hsi4/h7KPcPpj9Bwm3dQzpOR/L2+DuXoI5qV0VpRfTp0Svym+usOwadeW75ScwR4SRK691A7SpL/Tj6jsC7Yg0Jq4Ah0hlVtucoQm1LGBLAGqUrc5Tm/tVv5Vvc/AhzWzInGGnCXWbndrfCe+vxXNR9G9i3+8qfsIHsNrkxddFUxVkK7NexEIeXAIEdi7nEWNLphL2yafNZcH8p/XZznISEXeSlFOnvoO+Mz1aqAee0hSH4sIbeB8QwLStSVcfkIwcAFM8QSaUaJ/Ff2lW9lhw7b3tUgP/pCYZ2ZAHoVInY9xbXwhGuDzyujD/8gXME6E+7iRc8CSMb59zB3fof5xlnHXTziFcc3ZxAIRlHbxB/kA8zuq7x5Q55NNQ9cR9j 3XmofgLb iMMCWhjFi8BY9WRJycq6rU0h/NxxFMKNEAad2C0QK2zFkyupBHS6cZa2cvQ9hNZIPqj0SMyTcJWvyeV7EQoUEwxJ0CoZUbsBHj70wptoTmz7eqdYbHn20IxDcEoBr6qKhvtjl0orgVJru+JSA7TcSfZ1KdBEAj5CBZGmCFMxtT3atbREd9W++dbVO0/j+fNqPeJE7eT7rr1MyRfWOO7AjVHGbVG+fGbL7DqxSejk5m3TNuyq+TPzM+RKPI2grTDUgKz3sBTC/66zYRMfCaxuwb8wAh+Y2LJ7/1tzLv2jKTD5UvL33iWxOYaYaFP2ss7sn8sM4e5C3uXgqC73uDkblwNK3h6LbQUIO22hbg/lXXJnhxBtghMcHxL/wNJR4XRVR1T/T3lMIqVBnizephbeXsxL3PuGajTh6fcfNb65uimCoGz/3s0xjkq3YTw== 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: On Mon, Jan 20, 2025 at 5:30=E2=80=AFPM Hyesoo Yu w= rote: > > 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. A flag has been added that can cause a panic when there > is a problem with the object. Hi Hyesoo, I'm concerned about this because it goes against the effort to avoid introducing new BUG() calls [1]. And I think it would be more appropriate to use existing panic_on_warn functionality [2] which causes a panic on WARN(), rather than introducing a SLUB-specific knob to do the same thing. However SLUB does not call WARN() and uses pr_err() instead when reporting an error. Vlastimil and I talked about changing it to use WARN() a while ago [3], but neither of us have done that yet. Probably you may want to look at it, as it also aligns with your purpose? FYI, if you would like to work on it, please make sure that it WARN() is suppressed during kunit test. [1] https://docs.kernel.org/process/deprecated.html#bug-and-bug-on [2] https://www.kernel.org/doc/html/v6.9/admin-guide/sysctl/kernel.html#pan= ic-on-warn [3] https://lore.kernel.org/linux-mm/d4219cd9-32d3-4697-93b9-6a44bf77d50c@s= use.cz Best, Hyeonggon > Signed-off-by: Hyesoo Yu > Change-Id: I4e7e5e0ec3421a7f6c84d591db052f79d3775493 > --- > Documentation/mm/slub.rst | 2 ++ > include/linux/slab.h | 4 ++++ > mm/slub.c | 14 ++++++++++++++ > 3 files changed, 20 insertions(+) > > diff --git a/Documentation/mm/slub.rst b/Documentation/mm/slub.rst > index 84ca1dc94e5e..ce58525db93d 100644 > --- a/Documentation/mm/slub.rst > +++ b/Documentation/mm/slub.rst > @@ -53,6 +53,7 @@ Possible debug options are:: > U User tracking (free and alloc) > T Trace (please only use on single slabs) > A Enable failslab filter mark for the cache > + C Panic if object corruption is checked. > O Switch debugging off for caches that would have > caused higher minimum slab orders > - Switch all debugging off (useful if the kernel is > @@ -113,6 +114,7 @@ options from the ``slab_debug`` parameter translate t= o the following files:: > U store_user > T trace > A failslab > + C corruption_panic > > failslab file is writable, so writing 1 or 0 will enable or disable > the option at runtime. Write returns -EINVAL if cache is an alias. > diff --git a/include/linux/slab.h b/include/linux/slab.h > index 10a971c2bde3..4391c30564d6 100644 > --- a/include/linux/slab.h > +++ b/include/linux/slab.h > @@ -31,6 +31,7 @@ enum _slab_flag_bits { > _SLAB_CACHE_DMA32, > _SLAB_STORE_USER, > _SLAB_PANIC, > + _SLAB_CORRUPTION_PANIC, > _SLAB_TYPESAFE_BY_RCU, > _SLAB_TRACE, > #ifdef CONFIG_DEBUG_OBJECTS > @@ -97,6 +98,9 @@ enum _slab_flag_bits { > #define SLAB_STORE_USER __SLAB_FLAG_BIT(_SLAB_STORE_USER) > /* Panic if kmem_cache_create() fails */ > #define SLAB_PANIC __SLAB_FLAG_BIT(_SLAB_PANIC) > +/* Panic if object corruption is checked */ > +#define SLAB_CORRUPTION_PANIC __SLAB_FLAG_BIT(_SLAB_CORRUPTION_PANIC) > + > /** > * define SLAB_TYPESAFE_BY_RCU - **WARNING** READ THIS! > * > diff --git a/mm/slub.c b/mm/slub.c > index 48cefc969480..36a8dabf1349 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -1306,6 +1306,8 @@ slab_pad_check(struct kmem_cache *s, struct slab *s= lab) > fault, end - 1, fault - start); > print_section(KERN_ERR, "Padding ", pad, remainder); > > + BUG_ON(s->flags & SLAB_CORRUPTION_PANIC); > + > restore_bytes(s, "slab padding", POISON_INUSE, fault, end); > } > > @@ -1389,6 +1391,8 @@ static int check_object(struct kmem_cache *s, struc= t slab *slab, > if (!ret && !slab_in_kunit_test()) { > print_trailer(s, slab, object); > add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); > + > + BUG_ON(s->flags & SLAB_CORRUPTION_PANIC); > } > > return ret; > @@ -1689,6 +1693,9 @@ parse_slub_debug_flags(char *str, slab_flags_t *fla= gs, char **slabs, bool init) > case 'a': > *flags |=3D SLAB_FAILSLAB; > break; > + case 'c': > + *flags |=3D SLAB_CORRUPTION_PANIC; > + break; > case 'o': > /* > * Avoid enabling debugging on caches if its mini= mum > @@ -6874,6 +6881,12 @@ static ssize_t store_user_show(struct kmem_cache *= s, char *buf) > > SLAB_ATTR_RO(store_user); > > +static ssize_t corruption_panic_show(struct kmem_cache *s, char *buf) > +{ > + return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_CORRUPTION_PANI= C)); > +} > +SLAB_ATTR_RO(corruption_panic); > + > static ssize_t validate_show(struct kmem_cache *s, char *buf) > { > return 0; > @@ -7092,6 +7105,7 @@ static struct attribute *slab_attrs[] =3D { > &red_zone_attr.attr, > &poison_attr.attr, > &store_user_attr.attr, > + &corruption_panic_attr.attr, > &validate_attr.attr, > #endif > #ifdef CONFIG_ZONE_DMA > -- > 2.48.0 >