From: Eric Sandeen Date: Wed, 29 Jul 2015 23:21:08 +0000 (+1000) Subject: metadump: Zero unused tail of symlink blocks X-Git-Tag: v3.2.4~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=23b2ae23d97bfe5fa5e405c91e0340828288e2cd;p=thirdparty%2Fxfsprogs-dev.git metadump: Zero unused tail of symlink blocks Symlink blocks may contain stale data past the end of their content; zero it out. Signed-off-by: Eric Sandeen Signed-off-by: Eric Sandeen Reviewed-by: Brian Foster Signed-off-by: Dave Chinner --- diff --git a/db/metadump.c b/db/metadump.c index 462623652..c40c896e0 100644 --- a/db/metadump.c +++ b/db/metadump.c @@ -1282,15 +1282,27 @@ process_dir_data_block( } static void -obfuscate_symlink_block( +process_symlink_block( char *block) { + char *link = block; + if (xfs_sb_version_hascrc(&(mp)->m_sb)) - block += sizeof(struct xfs_dsymlink_hdr); + link += sizeof(struct xfs_dsymlink_hdr); + + if (obfuscate) + obfuscate_path_components(link, XFS_SYMLINK_BUF_SPACE(mp, + mp->m_sb.sb_blocksize)); + if (zero_stale_data) { + size_t linklen, zlen; - obfuscate_path_components(block, - XFS_SYMLINK_BUF_SPACE(mp, - mp->m_sb.sb_blocksize)); + linklen = strlen(link); + zlen = mp->m_sb.sb_blocksize - linklen; + if (xfs_sb_version_hascrc(&mp->m_sb)) + zlen -= sizeof(struct xfs_dsymlink_hdr); + if (zlen < mp->m_sb.sb_blocksize) + memset(link + linklen, 0, zlen); + } } #define MAX_REMOTE_VALS 4095 @@ -1444,10 +1456,8 @@ process_single_fsb_objects( iocur_top->need_crc = 1; break; case TYP_SYMLINK: - if (obfuscate) { - obfuscate_symlink_block(dp); - iocur_top->need_crc = 1; - } + process_symlink_block(dp); + iocur_top->need_crc = 1; break; case TYP_ATTR: if (obfuscate) {