On Thu, Jul 20, 2017 at 11:06:12AM -0400, Brian Foster wrote: > There is a bit of an inconsistency in how ->b_maps is used for > contiguous buffers between kernel libxfs and xfsprogs due to the > independent buffer implementations. In the kernel, ->b_maps[0] is > always intialized to a valid range and in xfsprogs, ->b_maps is only > allocated for discontiguous buffers. > > This can lead to confusion when dealing with uncached kernel buffers > in common libxfs code because xfsprogs has no concept of uncached > buffers. Kernel uncached buffers have ->b_bn == XFS_BUF_DADDR_NULL > and ->b_maps[0] points to the physical block address. Block address > checks in common code for kernel uncached buffers, such as in > xfs_sb_verify(), therefore would need to check both places for an > address or risk broken logic or userspace segfaults. > > This problem currently manifests as an xfs_repair segfault due to a > NULL ->b_maps access in xfs_sb_verify(). Note that this problem is > only reproducible on builds with (-O2) optimization disabled, as the > affected parameter is currently unused and thus optimization > eliminates the problematic access. > > To fix this problem and eliminate the incompatibility, update the > userspace xfs_buf with an internal ->__b_map field and point > ->b_maps to it for contiguous buffers, similar to the kernel buffer > implementation. Set valid values in ->b_maps0] for contiguous ->b_maps[0] > buffers so common code will continue to work regardless of whether a > buffer is uncached in the kernel. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> Looks right but I haven't compiled/tested it so: Acked-by: Dave Chinner <dchinner@xxxxxxxxxx> -Dave. -- Dave Chinner david@xxxxxxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html