All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Mikhalitsyn <alex@amutable.com>
To: Christian Brauner <brauner@kernel.org>, linux-fsdevel@vger.kernel.org
Cc: Jann Horn <jannh@google.com>, Chris Mason <mason@kernel.org>,
	Josef Bacik	 <josef@toxicpanda.com>,
	Christoph Hellwig <hch@lst.de>,
	 linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
	 linux-nvme@lists.infradead.org,
	Alexander Viro <viro@zeniv.linux.org.uk>, Jan Kara <jack@suse.cz>,
	linux-scsi@vger.kernel.org, target-devel@vger.kernel.org,
		driver-core@lists.linux.dev, linux-mm@kvack.org,
	bpf@vger.kernel.org,  linux-security-module@vger.kernel.org,
	selinux@vger.kernel.org,  apparmor@lists.ubuntu.com,
	linux-nfs@vger.kernel.org, netdev@vger.kernel.org,
		fuse-devel@lists.linux.dev, linux-efi@vger.kernel.org,
		xen-devel@lists.xenproject.org, ocfs2-devel@lists.linux.dev,
		linux-s390@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
		linux-usb@vger.kernel.org, Amir Goldstein <amir73il@gmail.com>,
		linux-erofs@lists.ozlabs.org, linux-kselftest@vger.kernel.org
Subject: Re: [PATCH RFC 34/41] loop: refuse files on pseudo filesystems as backing files
Date: Fri, 13 Nov 2026 11:15:56 +0100	[thread overview]
Message-ID: <c5a694991af7e9182fd475a20bf4cfd73a13e395.camel@amutable.com> (raw)
In-Reply-To: <20261110-work-loop-pseudo-v1-34-4c998976c6c7@kernel.org>

On Tue, 2026-11-10 at 10:14 +0100, Christian Brauner wrote:
> Currently loop accepts any regular file that implements ->read_iter()
> as
> a backing file and any that also implements ->write_iter() as a
> writable
> one. That includes files on procfs, sysfs and other pseudo
> filesystems.
> For example, /proc/kcore attaches read-only as a loop device the size
> of
> the kernel's virtual address space, 64 PiB with 5-level paging. sysfs
> attributes attach read-write as 4096 byte loop devices. Writing a
> block
> to the loop device of /sys/kernel/mm/transparent_hugepage/enabled
> changes the THP setting.
> 
> That's not just nonsensical, it can be abused. Loop calls -
> >read_iter()
> and ->write_iter() of the backing file directly from its worker which
> runs with kernel credentials. But pseudo files enforce part of their
> access rules at read and write time against current. Dozens of sysfs
> ->show() and ->store() methods call capable(). Behind a loop device
> all
> of these checks are done against the loop worker instead of the task
> that opened the file. And setting up a loop device requires no
> capabilities, only access to the device nodes. So on v7.4-rc1:
> 
> - uid 0 without any capabilities can't write to
> /sys/kernel/reboot/mode
>   as mode_store() requires CAP_SYS_BOOT. Writing "warm" through a
> loop
>   device works.
> 
> - uid 0 without any capabilities can't read the files in
>   /sys/firmware/dmi/entries/*/ as dmi_sysfs_attr_show() requires
>   CAP_SYS_ADMIN. Reading them through a loop device works.
> 
> - An unprivileged container that was handed a loop device can't
> change
>   gro_flush_timeout of its own network devices as
>   gro_flush_timeout_store() requires CAP_NET_ADMIN in the initial
> user
>   namespace. Writing it through a loop device works.
> 
> The same goes for hard_offline_page, the md and sd attributes, rfkill
> and others.
> 
> Refuse files on pseudo filesystems as loop backing files. Note that
> file_is_pseudo() looks through overlayfs so stacking overlayfs on top
> of
> sysfs doesn't get around this.
> 
> Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>

Reviewed-by: Alexander Mikhalitsyn <alex@amutable.com>

> ---
>  drivers/block/loop.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/block/loop.c b/drivers/block/loop.c
> index c96e35c3ef42..1482580a1979 100644
> --- a/drivers/block/loop.c
> +++ b/drivers/block/loop.c
> @@ -537,6 +537,9 @@ static int loop_check_backing_file(struct file
> *file)
>  	if ((file->f_mode & FMODE_WRITE) && !file->f_op->write_iter)
>  		return -EINVAL;
>  
> +	if (file_is_pseudo(file))
> +		return -EINVAL;
> +
>  	return 0;
>  }
>  

  parent reply	other threads:[~2026-11-13 10:15 UTC|newest]

Thread overview: 139+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-10  9:14 [PATCH RFC 00/41] fs: don't use pseudo filesystem files as storage Christian Brauner
2026-11-10  9:14 ` [PATCH RFC 01/41] loop: refuse backing files that aren't open for reading Christian Brauner
2026-11-10  9:27   ` sashiko-bot
2026-11-10 12:53   ` Jan Kara
2026-11-11 14:55   ` Christoph Hellwig
2026-11-13  9:54   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 02/41] nvmet: check that the file backend supports ->{read,write}_iter Christian Brauner
2026-11-10  9:23   ` sashiko-bot
2026-11-10 12:53   ` Jan Kara
2026-11-11 14:56   ` Christoph Hellwig
2026-11-10  9:14 ` [PATCH RFC 03/41] target: fileio: check that the backing file " Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-10 12:54   ` Jan Kara
2026-11-11 14:56   ` Christoph Hellwig
2026-11-10  9:14 ` [PATCH RFC 04/41] fs: add SB_I_PSEUDO Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-10 12:55   ` Jan Kara
2026-11-11 15:04   ` Christoph Hellwig
2026-11-13 10:02   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 05/41] kernfs: use fc_init_pseudo() Christian Brauner
2026-11-10  9:25   ` sashiko-bot
2026-11-10 12:56   ` Jan Kara
2026-11-11 15:04   ` Christoph Hellwig
2026-11-13 10:02   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 06/41] proc: " Christian Brauner
2026-11-10  9:25   ` sashiko-bot
2026-11-10 12:56   ` Jan Kara
2026-11-11 15:04   ` Christoph Hellwig
2026-11-13 10:02   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 07/41] binfmt_misc: " Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-10 12:56   ` Jan Kara
2026-11-13 10:03   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 08/41] mqueue: " Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-11 15:05   ` Christoph Hellwig
2026-11-13 10:03   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 09/41] bpf: use fc_init_pseudo() for bpffs Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-11 15:05   ` Christoph Hellwig
2026-11-13 10:03   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 10/41] nullfs: use fc_init_pseudo() Christian Brauner
2026-11-10  9:23   ` sashiko-bot
2026-11-10 12:57   ` Jan Kara
2026-11-11 15:05   ` Christoph Hellwig
2026-11-13 10:03   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 11/41] failfs: " Christian Brauner
2026-11-10  9:23   ` sashiko-bot
2026-11-10 12:57   ` Jan Kara
2026-11-11 15:05   ` Christoph Hellwig
2026-11-10  9:14 ` [PATCH RFC 12/41] rust_binderfs: " Christian Brauner
2026-11-10  9:27   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 13/41] devpts: " Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-13 10:05   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 14/41] debugfs: " Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-10 12:59   ` Jan Kara
2026-11-13 10:05   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 15/41] tracefs: " Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-13 10:05   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 16/41] configfs: " Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-10 12:59   ` Jan Kara
2026-11-11  9:46   ` Breno Leitao
2026-11-13 10:06   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 17/41] securityfs: " Christian Brauner
2026-11-10  9:27   ` sashiko-bot
2026-11-13 10:10   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 18/41] selinux: use fc_init_pseudo() for selinuxfs Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-13 10:11   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 19/41] smack: use fc_init_pseudo() for smackfs Christian Brauner
2026-11-10  9:24   ` sashiko-bot
2026-11-12  1:50   ` [apparmor] " Casey Schaufler
2026-11-13 10:12   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 20/41] apparmor: use fc_init_pseudo() for apparmorfs Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 21/41] nfsd: use fc_init_pseudo() Christian Brauner
2026-11-10  9:25   ` sashiko-bot
2026-11-10 14:55   ` Chuck Lever
2026-11-10  9:14 ` [PATCH RFC 22/41] sunrpc: use fc_init_pseudo() for rpc_pipefs Christian Brauner
2026-11-10  9:25   ` sashiko-bot
2026-11-13 10:13   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 23/41] fuse: use fc_init_pseudo() for fusectl Christian Brauner
2026-11-10  9:25   ` sashiko-bot
2026-11-13 10:13   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 24/41] efivarfs: use fc_init_pseudo() Christian Brauner
2026-11-10  9:25   ` sashiko-bot
2026-11-13 10:13   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 25/41] pstore: " Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-13 10:13   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 26/41] xenfs: " Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 27/41] openpromfs: " Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 28/41] ocfs2: use fc_init_pseudo() for dlmfs Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-10 13:01   ` Jan Kara
2026-11-10  9:14 ` [PATCH RFC 29/41] s390/hypfs: use fc_init_pseudo() Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 30/41] powerpc/spufs: " Christian Brauner
2026-11-10  9:31   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 31/41] usb: gadget: f_fs: " Christian Brauner
2026-11-10  9:26   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 32/41] usb: gadget: gadgetfs: " Christian Brauner
2026-11-10  9:27   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 33/41] fs: add file_is_pseudo() Christian Brauner
2026-11-10  9:29   ` sashiko-bot
2026-11-10 13:02   ` Jan Kara
2026-11-13 10:15   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 34/41] loop: refuse files on pseudo filesystems as backing files Christian Brauner
2026-11-10  9:33   ` sashiko-bot
2026-11-10 13:03   ` Jan Kara
2026-11-13 10:15   ` Alexander Mikhalitsyn [this message]
2026-11-10  9:14 ` [PATCH RFC 35/41] zloop: refuse zone files on pseudo filesystems Christian Brauner
2026-11-10  9:36   ` sashiko-bot
2026-11-13 10:17   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 36/41] nvmet: refuse files on pseudo filesystems as namespace backing files Christian Brauner
2026-11-10  9:31   ` sashiko-bot
2026-11-10 15:07   ` Bui Nguyen Nhu Quynh
2026-11-10  9:14 ` [PATCH RFC 37/41] target: fileio: refuse files on pseudo filesystems as " Christian Brauner
2026-11-10  9:33   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 38/41] fuse: refuse files on pseudo filesystems as passthrough " Christian Brauner
2026-11-10  9:28   ` sashiko-bot
2026-11-10 10:14   ` Amir Goldstein
2026-11-11 15:12   ` Christoph Hellwig
2026-11-13 10:25     ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 39/41] usb: gadget: f_mass_storage: refuse files on pseudo filesystems Christian Brauner
2026-11-10  9:28   ` sashiko-bot
2026-11-10  9:14 ` [PATCH RFC 40/41] erofs: refuse files on pseudo filesystems as backing files Christian Brauner
2026-11-10  9:29   ` sashiko-bot
2026-11-10 20:45   ` Gao Xiang
2026-11-13 10:27   ` Alexander Mikhalitsyn
2026-11-10  9:14 ` [PATCH RFC 41/41] selftests/filesystems: add backing file tests for pseudo files Christian Brauner
2026-11-10  9:29   ` sashiko-bot
2026-11-13 10:28   ` Alexander Mikhalitsyn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c5a694991af7e9182fd475a20bf4cfd73a13e395.camel@amutable.com \
    --to=alex@amutable.com \
    --cc=amir73il@gmail.com \
    --cc=apparmor@lists.ubuntu.com \
    --cc=bpf@vger.kernel.org \
    --cc=brauner@kernel.org \
    --cc=driver-core@lists.linux.dev \
    --cc=fuse-devel@lists.linux.dev \
    --cc=hch@lst.de \
    --cc=jack@suse.cz \
    --cc=jannh@google.com \
    --cc=josef@toxicpanda.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mason@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=ocfs2-devel@lists.linux.dev \
    --cc=selinux@vger.kernel.org \
    --cc=target-devel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.