Skip to content

Commit

Permalink
xfs: strengthen rtalloc query range checks
Browse files Browse the repository at this point in the history
Strengthen the rtalloc range query checks to make sure that the keys do
not run off the end of the realtime device inappropriately.  Note that
the query range functions require units of rt extents, not blocks,
despite the type name.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
Reviewed-by: Bill O'Donnell <billodo@redhat.com>
  • Loading branch information
Darrick J. Wong committed Jun 1, 2018
1 parent a03f164 commit 8ad560d
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions fs/xfs/libxfs/xfs_rtbitmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1038,8 +1038,11 @@ xfs_rtalloc_query_range(

if (low_rec->ar_startblock > high_rec->ar_startblock)
return -EINVAL;
else if (low_rec->ar_startblock == high_rec->ar_startblock)
if (low_rec->ar_startblock >= mp->m_sb.sb_rextents ||
low_rec->ar_startblock == high_rec->ar_startblock)
return 0;
if (high_rec->ar_startblock >= mp->m_sb.sb_rextents)
high_rec->ar_startblock = mp->m_sb.sb_rextents - 1;

/* Iterate the bitmap, looking for discrepancies. */
rtstart = low_rec->ar_startblock;
Expand Down Expand Up @@ -1083,7 +1086,7 @@ xfs_rtalloc_query_all(
struct xfs_rtalloc_rec keys[2];

keys[0].ar_startblock = 0;
keys[1].ar_startblock = tp->t_mountp->m_sb.sb_rblocks;
keys[1].ar_startblock = tp->t_mountp->m_sb.sb_rextents - 1;
keys[0].ar_blockcount = keys[1].ar_blockcount = 0;

return xfs_rtalloc_query_range(tp, &keys[0], &keys[1], fn, priv);
Expand Down

0 comments on commit 8ad560d

Please sign in to comment.