Re: VFS regression with 9pfs ("Lookup would have caused loop")

From: Will Deacon
Date: Wed Oct 09 2024 - 12:00:53 EST


On Mon, Sep 23, 2024 at 11:05:08AM +0100, Will Deacon wrote:
> Hi Eric,
>
> I'm trying to use kvmtool to run a simple guest under an Android host
> but, for v6.9+ guest kernels, 'init' reliably fails to run from a 9pfs
> mount because VFS emits this error:
>
> | VFS: Lookup of 'com.android.runtime' in 9p 9p would have caused loop
>
> The host directory being shared is a little odd, as it has symlinks out
> to other mount points. In the guest, /apex is a symlink to /host/apex.
> On the host, /apex/com.android.runtime is a mounted loopback device:
>
> /dev/block/loop13 on /apex/com.android.runtime type ext4 (ro,dirsync,seclabel,nodev,noatime)
>
> This used to work prior to 724a08450f74 ("fs/9p: simplify iget to remove
> unnecessary paths") and it looks like Oleg ran into something similar
> before:
>
> https://lore.kernel.org/all/20240408141436.GA17022@xxxxxxxxxx/
>
> although he worked around it by driving QEMU with different options.
>
> I can confirm that reverting the following commits gets mainline guests
> working again for me:
>
> 724a08450f74 "fs/9p: simplify iget to remove unnecessary paths"
> 11763a8598f8 "fs/9p: fix uaf in in v9fs_stat2inode_dotl"
> 10211b4a23cf "fs/9p: remove redundant pointer v9ses"
> d05dcfdf5e16 " fs/9p: mitigate inode collisions"
>
> Do you have any better ideas? I'm happy to test anything you might have,
> since this is 100% reproducible on my setup.

Adding the regression tracker as I've not heard anything back on this :(

#regzbot introduced: 724a08450f74

Will