File 0018-metadump-Zero-unused-portions-of-DA_NODE-blocks.patch of Package xfsprogs.5309
From c83c169e813590d019d1200aa28f461ca275d447 Mon Sep 17 00:00:00 2001
From: Eric Sandeen <sandeen@sandeen.net>
Date: Thu, 30 Jul 2015 09:21:08 +1000
Subject: [PATCH 18/20] metadump: Zero unused portions of DA_NODE blocks
References: bsc#939367 CVE-2012-2150
Zero out unused portions of interior nodes of DA btrees
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
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 | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/db/metadump.c b/db/metadump.c
index 32a2f70369dd..d2935810733b 100644
--- a/db/metadump.c
+++ b/db/metadump.c
@@ -1483,6 +1483,31 @@ process_single_fsb_objects(
if (!obfuscate && !zero_stale_data)
goto write;
+ /* Zero unused part of interior nodes */
+ if (zero_stale_data) {
+ xfs_da_intnode_t *node = iocur_top->data;
+ int magic = be16_to_cpu(node->hdr.info.magic);
+
+ if (magic == XFS_DA_NODE_MAGIC ||
+ magic == XFS_DA3_NODE_MAGIC) {
+ struct xfs_da3_icnode_hdr hdr;
+ int used;
+
+ xfs_da3_node_hdr_from_disk(&hdr, node);
+ used = xfs_da3_node_hdr_size(node);
+
+ used += hdr.count
+ * sizeof(struct xfs_da_node_entry);
+
+ if (used < mp->m_sb.sb_blocksize) {
+ memset((char *)node + used, 0,
+ mp->m_sb.sb_blocksize - used);
+ iocur_top->need_crc = 1;
+ }
+ }
+ }
+
+ /* Handle leaf nodes */
dp = iocur_top->data;
switch (btype) {
case TYP_DIR2:
--
2.1.4