[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 01/10] xen: make xen loader callable multiple times



On 18/02/16 17:58, Daniel Kiper wrote:
> On Thu, Feb 18, 2016 at 11:32:16AM +0100, Juergen Gross wrote:
>> On 18/02/16 11:12, Daniel Kiper wrote:
>>> On Wed, Feb 17, 2016 at 06:19:28PM +0100, Juergen Gross wrote:
>>>> The loader for xen paravirtualized environment isn't callable multiple
>>>> times as it won't free any memory in case of failure.
>>>>
>>>> Call grub_relocator_unload() as other modules do it before allocating
>>>
>>> Do you mean grub_xen_reset?
>>
>> No. I do want to call grub_relocator_unload() and I'm doing it in
>> grub_xen_reset(). Other modules don't call grub_xen_reset(). :-)
>>
>>>
>>>> a new relocator or when unloading the module.
>>>>
>>>> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
>>>> ---
>>>>  grub-core/loader/i386/xen.c        | 28 +++++++++++++++++++---------
>>>>  grub-core/loader/i386/xen_fileXX.c | 17 +++++++++++------
>>>>  2 files changed, 30 insertions(+), 15 deletions(-)
>>>>
>>>> diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c
>>>> index c4d9689..ff7c553 100644
>>>> --- a/grub-core/loader/i386/xen.c
>>>> +++ b/grub-core/loader/i386/xen.c
>>>> @@ -316,11 +316,23 @@ grub_xen_boot (void)
>>>>                              xen_inf.virt_base);
>>>>  }
>>>>
>>>> +static void
>>>> +grub_xen_reset (void)
>>>> +{
>>>> +  grub_memset (&next_start, 0, sizeof (next_start));
>>>> +  xen_module_info_page = NULL;
>>>> +  n_modules = 0;
>>>> +
>>>> +  grub_relocator_unload (relocator);
>>>> +  relocator = NULL;
>>>> +  loaded = 0;
>>>> +}
>>>> +
>>>>  static grub_err_t
>>>>  grub_xen_unload (void)
>>>>  {
>>>> +  grub_xen_reset ();
>>>>    grub_dl_unref (my_mod);
>>>> -  loaded = 0;
>>>>    return GRUB_ERR_NONE;
>>>>  }
>>>>
>>>> @@ -403,10 +415,7 @@ grub_cmd_xen (grub_command_t cmd __attribute__ 
>>>> ((unused)),
>>>>
>>>>    grub_loader_unset ();
>>>>
>>>> -  grub_memset (&next_start, 0, sizeof (next_start));
>>>> -
>>>> -  xen_module_info_page = NULL;
>>>> -  n_modules = 0;
>>>> +  grub_xen_reset ();
>>>>
>>>>    grub_create_loader_cmdline (argc - 1, argv + 1,
>>>>                          (char *) next_start.cmd_line,
>>>> @@ -503,16 +512,17 @@ grub_cmd_xen (grub_command_t cmd __attribute__ 
>>>> ((unused)),
>>>>    goto fail;
>>>>
>>>>  fail:
>>>> +  err = grub_errno;
>>>
>>> I do not think this is needed.
>>
>> grub_elf_close() and others might clobber grub_errno.
> 
> OK, so, please say it in comment. It is not obvious.

Okay.

>>>>    if (elf)
>>>>      grub_elf_close (elf);
>>>>    else if (file)
>>>>      grub_file_close (file);
>>>>
>>>> -  if (grub_errno != GRUB_ERR_NONE)
>>>> -    loaded = 0;
>>>> +  if (err != GRUB_ERR_NONE)
>>>> +    grub_xen_reset ();
>>>>
>>>> -  return grub_errno;
>>>> +  return err;
>>>>  }
>>>>
>>>>  static grub_err_t
>>>> @@ -552,7 +562,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ 
>>>> ((unused)),
>>>>      {
>>>>        err = grub_relocator_alloc_chunk_addr (relocator, &ch, max_addr, 
>>>> size);
>>>>        if (err)
>>>> -  return err;
>>>> +  goto fail;
>>>
>>> It looks that this change should not be part of this patch.
>>
>> Why not? It's correcting a memory leak in case of failure. Like the
>> other cases below, too. That's the purpose of this patch, after all.
> 
> OK but you are referring to grub_relocator_unload() in commit message
> and below you are trying to fix different memory leak in the same patch.
> So, I think everything below should be separate patch.

Okay.


Juergen


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.