[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 26/29] xenctx: only alloc symbol if we are inserting it into the symbol table
>>> On 30.10.13 at 08:52, Matthew Daley <mattjd@xxxxxxxxx> wrote: > ...otherwise it's pointless, and will leak. > > Coverity-ID: 1055936 > Signed-off-by: Matthew Daley <mattjd@xxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> > --- > tools/xentrace/xenctx.c | 37 +++++++++++++++++++++++-------------- > 1 file changed, 23 insertions(+), 14 deletions(-) > > diff --git a/tools/xentrace/xenctx.c b/tools/xentrace/xenctx.c > index 4b774af..a86d512 100644 > --- a/tools/xentrace/xenctx.c > +++ b/tools/xentrace/xenctx.c > @@ -167,6 +167,7 @@ static void read_symbol_table(const char *symtab) > char *p; > struct symbol *symbol; > FILE *f; > + guest_word_t address; > > f = fopen(symtab, "r"); > if(f == NULL) { > @@ -178,10 +179,8 @@ static void read_symbol_table(const char *symtab) > if(fgets(line,256,f)==NULL) > break; > > - symbol = malloc(sizeof(*symbol)); > - > /* need more checks for syntax here... */ > - symbol->address = strtoull(line, &p, 16); > + address = strtoull(line, &p, 16); > if (!isspace((uint8_t)*p++)) > continue; > type = *p++; > @@ -196,7 +195,6 @@ static void read_symbol_table(const char *symtab) > */ > if (p[strlen(p)-1] == '\n') > p[strlen(p)-1] = '\0'; > - symbol->name = strdup(p); > > switch (type) { > case 'A': /* global absolute */ > @@ -207,20 +205,31 @@ static void read_symbol_table(const char *symtab) > case 'w': /* undefined weak function */ > continue; > default: > + symbol = malloc(sizeof(*symbol)); > + if (symbol == NULL) > + return; > + > + symbol->address = address; > + symbol->name = strdup(p); > + if (symbol->name == NULL) { > + free(symbol); > + return; > + } > + > insert_symbol(symbol); > break; > } > > - if (strcmp(symbol->name, "_stext") == 0) > - kernel_stext = symbol->address; > - else if (strcmp(symbol->name, "_etext") == 0) > - kernel_etext = symbol->address; > - else if (strcmp(symbol->name, "_sinittext") == 0) > - kernel_sinittext = symbol->address; > - else if (strcmp(symbol->name, "_einittext") == 0) > - kernel_einittext = symbol->address; > - else if (strcmp(symbol->name, "hypercall_page") == 0) > - kernel_hypercallpage = symbol->address; > + if (strcmp(p, "_stext") == 0) > + kernel_stext = address; > + else if (strcmp(p, "_etext") == 0) > + kernel_etext = address; > + else if (strcmp(p, "_sinittext") == 0) > + kernel_sinittext = address; > + else if (strcmp(p, "_einittext") == 0) > + kernel_einittext = address; > + else if (strcmp(p, "hypercall_page") == 0) > + kernel_hypercallpage = address; > } > > fclose(f); > -- > 1.7.10.4 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |