[PATCH] makedumpfile: Fix the variable pfn_needed leaking

Minfei Huang mhuang at redhat.com
Tue Nov 11 00:54:39 PST 2014


If the page pfn calculated by read_from_splitblock_table is bigger than
pfn_needed, the variable pfn_needed will leak.

makedumpfile cannot assign the pfn averagely bacause of condition
pfn_needed invalid.

Signed-off-by: Minfei Huang <mhuang at redhat.com>
---
 makedumpfile.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/makedumpfile.c b/makedumpfile.c
index 59c4952..8807a90 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -8415,7 +8415,7 @@ calculate_end_pfn_by_splitblock(mdf_pfn_t start_pfn,
 		return info->max_mapnr;
 
 	mdf_pfn_t end_pfn;
-	long long pfn_needed, offset;
+	long long pfn_needed, offset, per_splitblock_pfn;
 	char *splitblock_value_offset;
 
 	pfn_needed = info->num_dumpable / info->num_dumpfile;
@@ -8424,7 +8424,8 @@ calculate_end_pfn_by_splitblock(mdf_pfn_t start_pfn,
 	end_pfn = start_pfn;
 
 	while (*cur_splitblock_num < splitblock->num && pfn_needed > 0) {
-		pfn_needed -= read_from_splitblock_table(splitblock_value_offset);
+		per_splitblock_pfn = read_from_splitblock_table(splitblock_value_offset); 
+		pfn_needed = pfn_needed < per_splitblock_pfn ? 0 : pfn_needed - per_splitblock_pfn;
 		splitblock_value_offset += splitblock->entry_size;
 		++*cur_splitblock_num;
 	}
-- 
1.8.3.1




More information about the kexec mailing list