• Darrick J. Wong's avatar
    xfs: truncate should remove all blocks, not just to the end of the page cache · 4bbb04ab
    Darrick J. Wong authored
    xfs_itruncate_extents_flags() is supposed to unmap every block in a file
    from EOF onwards.  Oddly, it uses s_maxbytes as the upper limit to the
    bunmapi range, even though s_maxbytes reflects the highest offset the
    pagecache can support, not the highest offset that XFS supports.
    
    The result of this confusion is that if you create a 20T file on a
    64-bit machine, mount the filesystem on a 32-bit machine, and remove the
    file, we leak everything above 16T.  Fix this by capping the bunmapi
    request at the maximum possible block offset, not s_maxbytes.
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    4bbb04ab
xfs_inode.c 107 KB