On 11/11/2014 04:54 PM, Minfei Huang wrote: > 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; > } Hello Huang, Actually, pfn_needed is used to indicate whether the dumpfile have enough pfn or not. It doesn't matter whether pfn_needed == 0 or pfn_needed < 0. I know what you want to express. Maybe you can get some useful information at http://lists.infradead.org/pipermail/kexec/2014-October/012805.html -- Thanks Zhou Wenjian