[PATCH] erofs: fix order >= MAX_ORDER warning due to crafted nagative i_size

Yue Hu zbestahu at gmail.com
Mon Sep 19 11:37:47 AEST 2022


On Fri,  9 Sep 2022 10:39:48 +0800
Gao Xiang <hsiangkao at linux.alibaba.com> wrote:

> As syzbot reported [1], the root cause is that i_size field is a
> signed type, and negative i_size is also less than EROFS_BLKSIZ.
> As a consequence, it's handled as fast symlink unexpectedly.
> 
> Let's fall back to the generic path to deal with such unusual i_size.
> 
> [1] https://lore.kernel.org/r/000000000000ac8efa05e7feaa1f@google.com
> Reported-by: syzbot+f966c13b1b4fc0403b19 at syzkaller.appspotmail.com
> Fixes: 431339ba9042 ("staging: erofs: add inode operations")
> Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
> ---
>  fs/erofs/inode.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/fs/erofs/inode.c b/fs/erofs/inode.c
> index 95a403720e8c..16cf9a283557 100644
> --- a/fs/erofs/inode.c
> +++ b/fs/erofs/inode.c
> @@ -214,7 +214,7 @@ static int erofs_fill_symlink(struct inode *inode, void *kaddr,
>  
>  	/* if it cannot be handled with fast symlink scheme */
>  	if (vi->datalayout != EROFS_INODE_FLAT_INLINE ||
> -	    inode->i_size >= EROFS_BLKSIZ) {
> +	    inode->i_size >= EROFS_BLKSIZ || inode->i_size < 0) {

Reviewed-by: Yue Hu <huyue2 at coolpad.com>

>  		inode->i_op = &erofs_symlink_iops;
>  		return 0;
>  	}



More information about the Linux-erofs mailing list