File 0016-metadump-Zero-unused-tail-of-symlink-blocks.patch of Package xfsprogs.5309

From 23b2ae23d97bfe5fa5e405c91e0340828288e2cd Mon Sep 17 00:00:00 2001
From: Eric Sandeen <sandeen@sandeen.net>
Date: Thu, 30 Jul 2015 09:21:08 +1000
Subject: [PATCH 16/20] metadump: Zero unused tail of symlink blocks
References: bsc#939367 CVE-2012-2150

Symlink blocks may contain stale data past the end
of their content; zero it out.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Acked-by: Jan Kara <jack@suse.com>

---
 db/metadump.c | 28 +++++++++++++++++++---------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/db/metadump.c b/db/metadump.c
index 462623652b6f..c40c896e05f6 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) {
-- 
2.1.4

openSUSE Build Service is sponsored by