]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: xfs_rtbuf_get should check the bmapi_read results
authorDarrick J. Wong <darrick.wong@oracle.com>
Thu, 28 Jun 2018 20:11:57 +0000 (15:11 -0500)
committerEric Sandeen <sandeen@redhat.com>
Thu, 28 Jun 2018 20:11:57 +0000 (15:11 -0500)
Source kernel commit: a03f1641c7a6d4e88c6aae0cd3d52305cdb967a0

The xfs_rtbuf_get function should check the block mapping it gets back
from bmapi_read.  If there are no mappings or the mapping isn't a real
extent, we should return -EFSCORRUPTED rather than trying to read a
garbage value.  We also require realtime bitmap blocks to be real,
written allocations.

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>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_rtbitmap.c

index cf04ccac4c69e3a74d3c1e45e8eb3c99c25efbe5..652eb4f69d8e1a9de05d822b2342d8f951dd7cbe 100644 (file)
@@ -85,6 +85,9 @@ xfs_rtbuf_get(
        if (error)
                return error;
 
+       if (nmap == 0 || !xfs_bmap_is_real_extent(&map))
+               return -EFSCORRUPTED;
+
        ASSERT(map.br_startblock != NULLFSBLOCK);
        error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp,
                                   XFS_FSB_TO_DADDR(mp, map.br_startblock),