Re: [PATCH 3/5] xfs_io: set fs_path when opening files on foreign filesystems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Feb 16, 2023 at 01:53:04PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
> 
> Ted noticed that the following command:
> 
> $ xfs_io -c 'fsmap -d 0 0' /mnt
> xfs_io: xfsctl(XFS_IOC_GETFSMAP) iflags=0x0 ["/mnt"]: Invalid argument
> 
> doesn't work on an ext4 filesystem.  The above command is supposed to
> issue a GETFSMAP query against the "data" device.  Although the manpage
> doesn't claim support for ext4, it turns out that this you get this
> trace data:
> 
>           xfs_io-4144  [002]   210.965642: ext4_getfsmap_low_key: dev
> 7:0 keydev 163:2567 block 0 len 0 owner 0 flags 0x0
>           xfs_io-4144  [002]   210.965645: ext4_getfsmap_high_key: dev
> 7:0 keydev 32:5277:0 block 0 len 0 owner -1 flags 0xffffffff
> 
> Notice the random garbage in the keydev field -- this happens because
> openfile (in xfs_io) doesn't initialize *fs_path if the caller doesn't
> supply a geometry structure or the opened file isn't on an XFS
> filesystem.  IOWs, we feed random heap garbage to the kernel, and the
> kernel rejects the call unnecessarily.
> 
> Fix this to set the fspath information even for foreign filesystems.
> 
> Reported-by: tytso@xxxxxxx
> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>

Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx>

> ---
>  io/open.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> 
> diff --git a/io/open.c b/io/open.c
> index d8072664c16..15850b5557b 100644
> --- a/io/open.c
> +++ b/io/open.c
> @@ -116,7 +116,7 @@ openfile(
>  	}
> 
>  	if (!geom || !platform_test_xfs_fd(fd))
> -		return fd;
> +		goto set_fspath;
> 
>  	if (flags & IO_PATH) {
>  		/* Can't call ioctl() on O_PATH fds */
> @@ -150,6 +150,7 @@ openfile(
>  		}
>  	}
> 
> +set_fspath:
>  	if (fs_path) {
>  		fsp = fs_table_lookup(path, FS_MOUNT_POINT);
>  		if (!fsp)
> 

-- 
Carlos Maiolino



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux