Re: [PATCH v3] xfs: check for possible overflow in xfs_ioc_trim

Tomas Racek
2012-08-13T08:16:48Z

> [ Trimmed lkml from cc list. There's no need to cc lkml on XFS
> specific stuff. ]
>
> [ Trimmed linux-xfs@vger.kernel.org as that is not a list any XFS
> developer is subscribed to. ]

Oh, it's good to know (I used get_maintainer script before).

>
> On Thu, Aug 09, 2012 at 11:07:09AM +0200, Tomas Racek wrote:
> > If range.start or range.minlen is bigger than filesystem size,
> > return
> > invalid value error. This fixes possible overflow in BTOBB macro
> > when
> > passed value was nearly ULLONG_MAX.
> >
> > Signed-off-by: Tomas Racek <tracek@redhat.com>
> > ---
> > fs/xfs/xfs_discard.c | 6 ++++--
> > 1 files changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c
> > index f9c3fe3..4e07a56 100644
> > --- a/fs/xfs/xfs_discard.c
> > +++ b/fs/xfs/xfs_discard.c
> > @@ -179,12 +179,14 @@ xfs_ioc_trim(
> > * used by the fstrim application. In the end it really doesn't
> > * matter as trimming blocks is an advisory interface.
> > */
> > + if (range.start >= XFS_FSB_TO_B(mp, mp->m_sb.sb_dblocks) ||
> > + range.minlen > XFS_FSB_TO_B(mp, mp->m_sb.sb_dblocks))
> > + return -XFS_ERROR(EINVAL);
>
> That's not correct for minlen. The maximum minlen we can
> support is the length of the largest freespace extent in the
> filesystem, and that is limited to the size of an AG. i.e.
> XFS_FSB_TO_B(mp, XFS_ALLOC_AG_MAX_USABLE(mp))

Will do, thank you!

Tomas

>
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@fromorbit.com
>