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 86915E68954 for ; Thu, 31 Oct 2024 05:18:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF84F6B0089; Thu, 31 Oct 2024 01:18:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C89E56B008A; Thu, 31 Oct 2024 01:18:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B219F6B008C; Thu, 31 Oct 2024 01:18:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 88D796B0089 for ; Thu, 31 Oct 2024 01:18:28 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id EAE5FABD2F for ; Thu, 31 Oct 2024 05:18:27 +0000 (UTC) X-FDA: 82732740678.08.A2BFFB3 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf28.hostedemail.com (Postfix) with ESMTP id 57CA3C000B for ; Thu, 31 Oct 2024 05:17:59 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=RMPyA8IP; spf=pass (imf28.hostedemail.com: domain of nathan@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=nathan@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730351746; 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=71Bwhy9KO2vBrzJ9fxVeoFJYmXt21ghbykMyt3q7jGs=; b=invN0AffVb+h7Z5y+Qljuastn6RXPxhUKJTbW32TZ/9Y17p5CisEJ237xly0U7We7F0bj9 1UrI6GP9mp4M/kbDIHJ/w7qhhRWJMxKkIpJ031W5jbrcbmn7wAXo4eg2oJGCFx1WqhP74m uGRmnbFqzRGBgEMaqr/Cey4FRp/lTwM= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=RMPyA8IP; spf=pass (imf28.hostedemail.com: domain of nathan@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=nathan@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730351746; a=rsa-sha256; cv=none; b=NW3ublFxi1bnEHq+ISbjKEPPNepHqf4mepd9k+dqPAbbLzJPD9nLDazpVu9l9EO1zUMR3W oI8PK6nrcA0zjuUwES96mpyuiiOV1hrgoqzQdxVip4MPP3HtJnAjfy+D02OhunhGydh6/r HKI6QEx1UKZYTdW8NdynOonLXQ8xx60= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id C13F6A43B72; Thu, 31 Oct 2024 05:16:29 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AA908C4CEC3; Thu, 31 Oct 2024 05:18:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1730351904; bh=ZdinlePpULWqH7ET7gqNPsgQNIti4nJjHM5IQmdTsHc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=RMPyA8IPs8hjUViyUytsVxUaPGHlFCtTrKLcDtYdmuB+dklu31+1IdQ0srWoh3czY TTYFxFQeuagV/ZYap92pUk4XqttXxDHEMC+m7BFRjryC3uXhDZCvROOcKRwqzMHh29 NLhDLXADEfZlnsdXrHMtMyVH+tMGp/Y9g/vHR3u+tpbEohfO6YxdmRZK6a96mHPP8W qE9+mzTEyZnvaHqUxu3jmrX8pWtlqwS8UlaTvL/2kYGdCU8n1oCYeMuM4mnjEiI9dk 9v5j9llQIUtKuMLuBUI9STsks/xS2kyGvRLRgfRbGSSxBaPUIfQiiPA41rNNJDUlvw I9s7GF6+Y7odg== Date: Wed, 30 Oct 2024 22:18:22 -0700 From: Nathan Chancellor To: =?iso-8859-1?Q?Andr=E9?= Almeida Cc: Gabriel Krisman Bertazi , Alexander Viro , Christian Brauner , Jan Kara , Theodore Ts'o , Andreas Dilger , Hugh Dickins , Andrew Morton , Jonathan Corbet , smcv@collabora.com, kernel-dev@igalia.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-mm@kvack.org, linux-doc@vger.kernel.org, Gabriel Krisman Bertazi , llvm@lists.linux.dev Subject: Re: [PATCH v8 8/9] tmpfs: Expose filesystem features via sysfs Message-ID: <20241031051822.GA2947788@thelio-3990X> References: <20241021-tonyk-tmpfs-v8-0-f443d5814194@igalia.com> <20241021-tonyk-tmpfs-v8-8-f443d5814194@igalia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20241021-tonyk-tmpfs-v8-8-f443d5814194@igalia.com> X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 57CA3C000B X-Stat-Signature: 6femjfsfkrijnz67me3cg3q38ypew56m X-Rspam-User: X-HE-Tag: 1730351879-353166 X-HE-Meta: U2FsdGVkX1/TvjrnFBcXC89PTxnaW9jkoej3DtvwEnxQpGivDURUR4dME+VRyETp99XTy+0XrPQjnGRyFNyznQ48CB/tIeVNxNi8G066vSHpkz5+x6+dxMwEhMPYmHB7x0a/ldiOFfl7yn43fyeSjRy5aFHuWPabpDvvXgUAoi1Pri6fsO934it/hSeJD3X93nCRpOP5Nq/bJGruPljIAM/D6KeMpAXTlha7ikv8aSR+jLL7UUpod+u9f3F06pH2tPt0NXwQLH+hz9XB+zPF8G8dlbc+qhDBtXNhikEhMvOzPGaCAGRQ+aPXB9sZ6Sj2OgWc/0BKyS/Ng0BiW+qNM6qYMotjeYO9mvskplRpM5gHAgH8XQt0FlalxqUYZGBoS12SlSt8SSuGB0jmvjs0a2jmHTEtAEtvRaYKEu+Co5go0bJ4G+WK2ehCDjC4s8EosSKpYENTfgVMrsdMalGGVTHijFHhndIPXtdL43H45KllAmLJNy69QdaIzGdnS3Gz52ByRwc/oX0pZns1aNuHN3ZCfN1jS0eUZS3axX/lwzN1GzNnt+UMAIkdbP1TICc27rafmfPJtaHacR9TQF+E64O+l8ZzxTdnzPLozxach0nngQUCQsDqhw3xnldjlZnYJ3r00ihIGn8vnPB8EEO+zW9q+WsDyKLgQc3NBdOOAzMZ0mhp/EW9ljLwqgf3itM/4dQ6M9RpbUMD5sBXRW2DgvWBREtDI065bDJCWOGZXVAQUnKvyRG1JQ/FDqSsjfo/myH0p8OhRpkj6GDBCK3erGO6YFRlIK3r03IUwtVZBuMILwEe3X1MPd64IjCJEVl3YnPPIWNeUcZap5qlN6G/Q4ZmmATXQDuiIoMhbvD7pdrYtPZfdzlW4eQyXluNfd8r0rJxTEZ5pT+LudArMGgQEKhIRkwrJ5bcxn3XwlotF5IH86WYCPNV+CL2OPitJYdoYnawcn/WlVjO/Y6FNa9 0nNwpCjY 5NjLJFZpMDvVCWcswzU53JIjqoSARYfFgue97YjXf6dsStgrqWZJMgIZ8i+rksbuVULAYzq2FaK8+kXfS7Oby53M8Ocq2jzUwqCSsCx9gKmTcgqF61tNAT0CqOD2gzHVBQlimlGr+JMTqOYfm+DNOfSrSbe03McyDhZkZusk0G0AisF/jh2fA+hKUkvYSD5sNUIi+oTUR8MMe/e5FLeOZD9ei2Gsn2oxLjjcojLerZ3JhGr9lierhDS4I5E12h0i+9pGMpGO+3JBraaDoIbw7fFU3HcYjUyX4kIcG4fxx51+kLQiN0OmBGboOZ5xXuj6/JpoUa74G2qreatwcwR05xOMdGL9rBJW/LmiyCwK86CkTdV6Mb2/T4sWhW0gp1SzdQj0rEDlhMdPEw2dv+ffwc3tYjA== 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: Hi André, On Mon, Oct 21, 2024 at 01:37:24PM -0300, André Almeida wrote: > Expose filesystem features through sysfs, so userspace can query if > tmpfs support casefold. > > This follows the same setup as defined by ext4 and f2fs to expose > casefold support to userspace. > > Signed-off-by: André Almeida > Reviewed-by: Gabriel Krisman Bertazi > --- > mm/shmem.c | 37 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 37 insertions(+) > > diff --git a/mm/shmem.c b/mm/shmem.c > index ea01628e443423d82d44277e085b867ab9bf4b28..0739143d1419c732359d3a3c3457c3acb90c5b22 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -5546,3 +5546,40 @@ struct page *shmem_read_mapping_page_gfp(struct address_space *mapping, > return page; > } > EXPORT_SYMBOL_GPL(shmem_read_mapping_page_gfp); > + > +#if defined(CONFIG_SYSFS) && defined(CONFIG_TMPFS) > +#if IS_ENABLED(CONFIG_UNICODE) > +static DEVICE_STRING_ATTR_RO(casefold, 0444, "supported"); > +#endif > + > +static struct attribute *tmpfs_attributes[] = { > +#if IS_ENABLED(CONFIG_UNICODE) > + &dev_attr_casefold.attr.attr, > +#endif > + NULL > +}; > + > +static const struct attribute_group tmpfs_attribute_group = { > + .attrs = tmpfs_attributes, > + .name = "features" > +}; > + > +static struct kobject *tmpfs_kobj; > + > +static int __init tmpfs_sysfs_init(void) > +{ > + int ret; > + > + tmpfs_kobj = kobject_create_and_add("tmpfs", fs_kobj); > + if (!tmpfs_kobj) > + return -ENOMEM; > + > + ret = sysfs_create_group(tmpfs_kobj, &tmpfs_attribute_group); > + if (ret) > + kobject_put(tmpfs_kobj); > + > + return ret; > +} > + > +fs_initcall(tmpfs_sysfs_init); > +#endif /* CONFIG_SYSFS && CONFIG_TMPFS */ > > -- > 2.47.0 > This change as commit 5132f08bd332 ("tmpfs: Expose filesystem features via sysfs") in -next introduces a kCFI violation when accessing /sys/fs/tmpfs/features/casefold. An attribute group created with sysfs_create_group() has ->sysfs_ops() set to kobj_sysfs_ops, which has a ->show() value of kobj_attr_show(). When kobj_attr_show() goes to call the attribute's ->show() value after container_of(), there will be a type mismatch in the case of the casefold attr, as it was defined with a ->show() value of device_show_string() but that does not match the type of ->show() in 'struct kobj_attribute'. I can easily reproduce this with the following commands: $ printf 'CONFIG_%s=y\n' CFI_CLANG UNICODE >kernel/configs/repro.config $ make -skj"$(nproc)" ARCH=arm64 LLVM=1 mrproper virtconfig repro.config Image.gz ... $ curl -LSs https://github.com/ClangBuiltLinux/boot-utils/releases/download/20230707-182910/arm64-rootfs.cpio.zst | zstd -d >rootfs.cpio $ qemu-system-aarch64 \ -display none \ -nodefaults \ -cpu max,pauth-impdef=true \ -machine virt,gic-version=max,virtualization=true \ -append 'console=ttyAMA0 earlycon rdinit=/bin/sh' \ -kernel arch/arm64/boot/Image.gz \ -initrd rootfs.cpio \ -m 512m \ -serial mon:stdio ... # mount -t sysfs sys /sys # cat /sys/fs/tmpfs/features/casefold [ 70.558496] CFI failure at kobj_attr_show+0x2c/0x4c (target: device_show_string+0x0/0x38; expected type: 0xc527b809) [ 70.560018] Internal error: Oops - CFI: 00000000f2008228 [#1] PREEMPT SMP [ 70.560647] Modules linked in: [ 70.561770] CPU: 0 UID: 0 PID: 46 Comm: cat Not tainted 6.12.0-rc4-00008-g5132f08bd332 #1 [ 70.562429] Hardware name: linux,dummy-virt (DT) [ 70.562897] pstate: 21402009 (nzCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 70.563377] pc : kobj_attr_show+0x2c/0x4c [ 70.563674] lr : sysfs_kf_seq_show+0xb4/0x130 [ 70.563987] sp : ffff80008043bac0 [ 70.564236] x29: ffff80008043bac0 x28: 000000007ffff001 x27: 0000000000000000 [ 70.564877] x26: 0000000001000000 x25: 000000007ffff001 x24: 0000000000000001 [ 70.565339] x23: fff000000238a000 x22: ffff9fa31a3996f8 x21: fff00000023fc000 [ 70.565806] x20: fff000000201df80 x19: fff000000238b000 x18: 0000000000000000 [ 70.566273] x17: 00000000c527b809 x16: 00000000df43c25c x15: fff000001fef8200 [ 70.566727] x14: 0000000000000000 x13: fff00000022450f0 x12: 0000000000001000 [ 70.567177] x11: fff00000023fc000 x10: 0000000000000000 x9 : ffff9fa31a18fac4 [ 70.567682] x8 : ffff9fa319badde4 x7 : 0000000000000000 x6 : 000000000000003f [ 70.568138] x5 : 0000000000000040 x4 : 0000000000000000 x3 : 0000000000000004 [ 70.568585] x2 : fff00000023fc000 x1 : ffff9fa31a881f90 x0 : fff000000201df80 [ 70.569169] Call trace: [ 70.569389] kobj_attr_show+0x2c/0x4c [ 70.569706] sysfs_kf_seq_show+0xb4/0x130 [ 70.570020] kernfs_seq_show+0x44/0x54 [ 70.570280] seq_read_iter+0x14c/0x4b0 [ 70.570543] kernfs_fop_read_iter+0x60/0x198 [ 70.570820] copy_splice_read+0x1f0/0x2f4 [ 70.571092] splice_direct_to_actor+0xf4/0x2e0 [ 70.571376] do_splice_direct+0x68/0xb8 [ 70.571626] do_sendfile+0x1e8/0x488 [ 70.571874] __arm64_sys_sendfile64+0xe0/0x12c [ 70.572161] invoke_syscall+0x58/0x114 [ 70.572424] el0_svc_common+0xa8/0xdc [ 70.572676] do_el0_svc+0x1c/0x28 [ 70.572910] el0_svc+0x38/0x68 [ 70.573132] el0t_64_sync_handler+0x90/0xfc [ 70.573394] el0t_64_sync+0x190/0x19 [ 70.574001] Code: 72970131 72b8a4f1 6b11021f 54000040 (d4304500) [ 70.574635] ---[ end trace 0000000000000000 ]--- I am not sure if there is a better API exists or if a local copy should be rolled but I think the current scheme is definitely wrong because there is no 'struct device' here. If there is any patch I can test or further information I can provide, I am more than happy to do so. Cheers, Nathan