[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 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. > >> 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. Daniel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |