[Top] [All Lists]

Re: [PATCH] fix overflow in xfs_growfs_data_private

To: Eric Sandeen <sandeen@xxxxxxxxxxx>
Subject: Re: [PATCH] fix overflow in xfs_growfs_data_private
From: Felix Blyakher <felixb@xxxxxxx>
Date: Tue, 26 May 2009 07:23:26 -0500
Cc: xfs-oss <xfs@xxxxxxxxxxx>, Richard Ems <Richard.Ems@xxxxxxxxxxxxxxxxx>
In-reply-to: <4A184EC4.1050007@xxxxxxxxxxx>
References: <4A184EC4.1050007@xxxxxxxxxxx>

On May 23, 2009, at 2:30 PM, Eric Sandeen wrote:

In the case where growing a filesystem would leave the last AG
too small, the fixup code has an overflow in the calculation
of the new size with one fewer ag, because "nagcount" is a 32
bit number.  If the new filesystem has > 2^32 blocks in it
this causes a problem resulting in an EINVAL return from growfs:

# xfs_io -f -c "truncate 19998630180864" fsfile
# mkfs.xfs -f -bsize=4096 -dagsize=76288719b,size=3905982455b fsfile
# mount -o loop fsfile mnt/
# xfs_growfs mnt/

Is it really 'mnt/', not '/mnt'?

meta-data=/dev/loop0             isize=256    agcount=52,
agsize=76288719 blks
        =                       sectsz=512   attr=2
data = bsize=4096 blocks=3905982455, imaxpct=5
        =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=32768, version=2
= sectsz=512 sunit=0 blks, lazy- count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0
xfs_growfs: XFS_IOC_FSGROWFSDATA xfsctl failed: Invalid argument

Reported-by: richard.ems@xxxxxxxxxxxxxxxxx
Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxxx>

Nice find and the neat fix, Eric.

Reviewed-by: Felix Blyakher <felixb@xxxxxxx>

<Prev in Thread] Current Thread [Next in Thread>