Re: [PATCH] xfs_repair: detect invalid zero-sized symlink inodes

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

 



On Wed, Mar 01, 2017 at 10:00:03AM -0500, Brian Foster wrote:
> Mathias Troiden reproduced a filesystem corruption that resulted in
> a zero-sized local format symlink inode. This is invalid state and
> results in an inode that cannot be accessed or modified.
> 
> The kernel detects this problem on inode access, fails and warns the
> user to umount and run xfs_repair. Unfortunately, xfs_repair doesn't
> even detect the problem. Thus the user has no path to recovery.
> 
> Update xfs_repair to check for invalid zero-sized symlinks and flag
> them as corrupted. This results in tossing the inode, but returns
> the fs to a valid state.
> 
> Reported-by: Mathias Troiden <mathias.troiden@xxxxxxxxx>
> Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx>

Looks good,
Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>

--D

> ---
>  repair/dinode.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/repair/dinode.c b/repair/dinode.c
> index 8d01409..d664f87 100644
> --- a/repair/dinode.c
> +++ b/repair/dinode.c
> @@ -1385,6 +1385,11 @@ process_symlink(
>  		return(1);
>  	}
>  
> +	if (be64_to_cpu(dino->di_size) == 0) {
> +		do_warn(_("zero size symlink in inode %" PRIu64 "\n"), lino);
> +		return 1;
> +	}
> +
>  	/*
>  	 * have to check symlink component by component.
>  	 * get symlink contents into data area
> -- 
> 2.7.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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