Re: [PATCH 1/1] xfs: reject crazy array sizes being fed to XFS_IOC_GETBMAP*

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

 



On Tue, 2022-01-25 at 18:18 -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@xxxxxxxxxx>
> 
> Syzbot tripped over the following complaint from the kernel:
> 
> WARNING: CPU: 2 PID: 15402 at mm/util.c:597 kvmalloc_node+0x11e/0x125
> mm/util.c:597
> 
> While trying to run XFS_IOC_GETBMAP against the following structure:
> 
> struct getbmap fubar = {
> 	.bmv_count	= 0x22dae649,
> };
> 
> Obviously, this is a crazy huge value since the next thing that the
> ioctl would do is allocate 37GB of memory.  This is enough to make
> kvmalloc mad, but isn't large enough to trip the validation
> functions.
> In other words, I'm fussing with checks that were **already
> sufficient**
> because that's easier than dealing with 644 internal bug
> reports.  Yes,
> that's right, six hundred and forty-four.
> 
> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx>
This fix looks fine to me.  Lets get it through.  Thanks!
Reviewed-By: Allison Henderson <allison.henderson@xxxxxxxxxx>
> ---
>  fs/xfs/xfs_ioctl.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> 
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index 03a6198c97f6..2515fe8299e1 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -1464,7 +1464,7 @@ xfs_ioc_getbmap(
>  
>  	if (bmx.bmv_count < 2)
>  		return -EINVAL;
> -	if (bmx.bmv_count > ULONG_MAX / recsize)
> +	if (bmx.bmv_count >= INT_MAX / recsize)
>  		return -ENOMEM;
>  
>  	buf = kvcalloc(bmx.bmv_count, sizeof(*buf), GFP_KERNEL);
> 




[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