Hello HATAYAMA-san,

>Kumagai-san,
>
>Could you review these patches?

Thanks for fixing them, I've reviewed the patches.
I'll merge the patches into v1.6.1.

Regards,
Atsushi Kumagai

>On 2016/06/20 14:57, HATAYAMA Daisuke wrote:
>> Currently, makedumpfile results in segmentation fault on
>> sadump-related formats:
>>
>>     # ~/makedumpfile --message-level 31 -l -d 31 -x ./vmlinux vmcore
>>     sadump: read dump device as single partition
>>     sadump: single partition configuration
>>     page_size    : 4096
>>     Segmentation fault
>>
>> This is because although commit
>> 5fc24bf754fa6d2c0bd0f1c6f5655de371efb9d5 started dynamically
>> allocating the buffer of struct dump_bitmap, the sadump source code
>> doesn't follow the change.
>>
>> This commit fixes this by following the change.
>>
>> Signed-off-by: HATAYAMA Daisuke <[email protected]>
>> ---
>>  makedumpfile.c |  5 ++++-
>>  sadump_info.c  | 28 ++++++++++++++++++++++++++--
>>  2 files changed, 30 insertions(+), 3 deletions(-)
>>
>> diff --git a/makedumpfile.c b/makedumpfile.c
>> index 853b999..90cfc3e 100644
>> --- a/makedumpfile.c
>> +++ b/makedumpfile.c
>> @@ -11229,8 +11229,11 @@ out:
>>                      free(info->kh_memory);
>>              if (info->valid_pages)
>>                      free(info->valid_pages);
>> -            if (info->bitmap_memory)
>> +            if (info->bitmap_memory) {
>> +                    if (info->bitmap_memory->buf)
>> +                            free(info->bitmap_memory->buf);
>>                      free(info->bitmap_memory);
>> +            }
>>              if (info->fd_memory)
>>                      close(info->fd_memory);
>>              if (info->fd_dumpfile)
>> diff --git a/sadump_info.c b/sadump_info.c
>> index 20376f0..8716167 100644
>> --- a/sadump_info.c
>> +++ b/sadump_info.c
>> @@ -832,18 +832,28 @@ sadump_initialize_bitmap_memory(void)
>>                     strerror(errno));
>>              return FALSE;
>>      }
>> +
>>      bmp->fd = info->fd_memory;
>>      bmp->file_name = info->name_memory;
>>      bmp->no_block = -1;
>> -    memset(bmp->buf, 0, BUFSIZE_BITMAP);
>>      bmp->offset = dumpable_bitmap_offset;
>>
>> +    bmp->buf = malloc(BUFSIZE_BITMAP);
>> +    if (!bmp->buf) {
>> +            ERRMSG("Can't allocate memory for the memory-bitmap's buffer. 
>> %s\n",
>> +                   strerror(errno));
>> +            free(bmp);
>> +            return FALSE;
>> +    }
>> +    memset(bmp->buf, 0, BUFSIZE_BITMAP);
>> +
>>      max_section = divideup(si->max_mapnr, SADUMP_PF_SECTION_NUM);
>>
>>      block_table = calloc(sizeof(unsigned long long), max_section);
>>      if (block_table == NULL) {
>>              ERRMSG("Can't allocate memory for the block_table. %s\n",
>>                     strerror(errno));
>> +            free(bmp->buf);
>>              free(bmp);
>>              return FALSE;
>>      }
>> @@ -870,8 +880,17 @@ sadump_initialize_bitmap_memory(void)
>>      bmp->fd = info->fd_memory;
>>      bmp->file_name = info->name_memory;
>>      bmp->no_block = -1;
>> -    memset(bmp->buf, 0, BUFSIZE_BITMAP);
>>      bmp->offset = si->sub_hdr_offset + sh->block_size * sh->sub_hdr_size;
>> +
>> +    bmp->buf = malloc(BUFSIZE_BITMAP);
>> +    if (!bmp->buf) {
>> +            ERRMSG("Can't allocate memory for the memory-bitmap's buffer. 
>> %s\n",
>> +                   strerror(errno));
>> +            free(bmp);
>> +            return FALSE;
>> +    }
>> +    memset(bmp->buf, 0, BUFSIZE_BITMAP);
>> +
>>      si->ram_bitmap = bmp;
>>
>>      /*
>> @@ -1904,6 +1923,11 @@ free_sadump_info(void)
>>              fclose(si->file_elf_note);
>>      if (si->cpu_online_mask_buf)
>>              free(si->cpu_online_mask_buf);
>> +    if (si->ram_bitmap) {
>> +            if (si->ram_bitmap->buf)
>> +                    free(si->ram_bitmap->buf);
>> +            free(si->ram_bitmap);
>> +    }
>>  }
>>
>>  void
>>
>
>--
>Thanks.
>HATAYAMA, Daisuke

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to