Skip to content

Commit c5f45d6

Browse files
author
Dave Anderson
committed
Address several Coverity Scan "RESOURCE_LEAK" issues in the following
top-level source files: cmdline.c, kvmdump.c, lkcd_v8.c, xendump.c, symbols.c, unwind_x86_32_64.c, va_server.c and va_server_v1.c. ([email protected])
1 parent 3141bba commit c5f45d6

8 files changed

+42
-9
lines changed

cmdline.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -1319,8 +1319,10 @@ is_shell_script(char *s)
13191319
if ((fd = open(s, O_RDONLY)) < 0)
13201320
return FALSE;
13211321

1322-
if (isatty(fd))
1322+
if (isatty(fd)) {
1323+
close(fd);
13231324
return FALSE;
1325+
}
13241326

13251327
if (read(fd, interp, 2) != 2) {
13261328
close(fd);

kvmdump.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -846,8 +846,10 @@ kvmdump_mapfile_exists(void)
846846

847847
sprintf(filename, "%s.map", pc->dumpfile);
848848

849-
if (!file_exists(filename, &stat) || !S_ISREG(stat.st_mode))
849+
if (!file_exists(filename, &stat) || !S_ISREG(stat.st_mode)) {
850+
free(filename);
850851
return FALSE;
852+
}
851853

852854
if (is_kvmdump_mapfile(filename)) {
853855
pc->kvmdump_mapfile = filename;

lkcd_v8.c

+1
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ lkcd_dump_init_v8_arch(dump_header_t *dh)
184184

185185
memcpy(&dump_header_asm_v8, &arch_hdr, sizeof(dump_header_asm_t));
186186

187+
free(hdr_buf);
187188
return 0;
188189

189190
err:

symbols.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -3898,12 +3898,10 @@ is_bfd_format(char *filename)
38983898
#else
38993899
struct bfd *bfd;
39003900
#endif
3901-
char **matching;
3902-
39033901
if ((bfd = bfd_openr(filename, NULL)) == NULL)
39043902
return FALSE;
39053903

3906-
if (!bfd_check_format_matches(bfd, bfd_object, &matching)) {
3904+
if (!bfd_check_format_matches(bfd, bfd_object, NULL)) {
39073905
bfd_close(bfd);
39083906
return FALSE;
39093907
}

unwind_x86_32_64.c

+1
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,7 @@ init_unwind_table(void)
819819
error(WARNING, "cannot read %s data from %s\n",
820820
is_ehframe ? ".eh_frame" : ".debug_frame", pc->namelist);
821821
free(unwind_table);
822+
close(fd);
822823
return;
823824
}
824825

va_server.c

+10
Original file line numberDiff line numberDiff line change
@@ -313,20 +313,27 @@ int read_map(char *crash_file)
313313
ret = fseek(vas_file_p, (long)0, SEEK_SET);
314314
if(ret == -1) {
315315
printf("va_server: unable to fseek, err = %d\n", ferror(vas_file_p));
316+
free(hdr);
316317
free(disk_hdr);
317318
return -1;
318319
}
319320
items = fread((void *)disk_hdr, 1, Page_Size, vas_file_p);
320321
if(items != Page_Size) {
322+
free(hdr);
323+
free(disk_hdr);
321324
return -1;
322325
}
323326
if(disk_hdr->magic[0] != CRASH_MAGIC) {
327+
free(hdr);
328+
free(disk_hdr);
324329
return -1;
325330
}
326331
ret = fseek(vas_file_p, (long)((disk_hdr->map_block) * disk_hdr->blk_size), SEEK_SET);
327332

328333
if(ret == -1) {
329334
printf("va_server: unable to fseek, err = %d\n", ferror(vas_file_p));
335+
free(hdr);
336+
free(disk_hdr);
330337
return -1;
331338
}
332339

@@ -338,10 +345,13 @@ int read_map(char *crash_file)
338345
vas_file_p);
339346
if(items != disk_hdr->map_blocks) {
340347
printf("unable to read map entries, err = %d\n", errno);
348+
free(hdr);
349+
free(disk_hdr);
341350
return -1;
342351
}
343352

344353
vas_map_base = hdr;
354+
free(disk_hdr);
345355
return 0;
346356
}
347357

va_server_v1.c

+19-3
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ u_long vas_find_end_v1(void)
253253
}
254254
int read_maps_v1(char *crash_file)
255255
{
256-
int *cur_entry_p;
256+
int *cur_entry_p, *cp;
257257
int ret, items, blk_pos;
258258

259259
cur_entry_p = (int *)malloc(Page_Size);
@@ -266,25 +266,32 @@ int read_maps_v1(char *crash_file)
266266
vas_file_p = fopen(crash_file, "r");
267267
if(vas_file_p == (FILE *)0) {
268268
printf("read_maps: bad ret from fopen for %s: %s\n", crash_file, strerror(errno));
269+
free(cur_entry_p);
269270
return -1;
270271
}
271272
ret = fseek(vas_file_p, (long)0, SEEK_SET);
272273
if(ret == -1) {
273274
printf("read_maps: unable to fseek in %s, errno = %d\n", crash_file, ferror(vas_file_p));
275+
free(cur_entry_p);
274276
return -1;
275277
}
276278
items = fread((void *)cur_entry_p, 1, Page_Size, vas_file_p);
277279
if(items != Page_Size) {
278280
printf("read_maps: unable to read header from %s, errno = %d\n", crash_file, ferror(vas_file_p));
281+
free(cur_entry_p);
279282
return -1;
280283
}
281284
ret = -1;
282-
while ((blk_pos = *cur_entry_p++)) {
283-
if (read_map_v1(blk_pos))
285+
cp = cur_entry_p;
286+
while ((blk_pos = *cp++)) {
287+
if (read_map_v1(blk_pos)) {
288+
free(cur_entry_p);
284289
return -1;
290+
}
285291
ret = 0;
286292
}
287293

294+
free(cur_entry_p);
288295
return ret;
289296
}
290297

@@ -308,21 +315,28 @@ int read_map_v1(int blk_pos)
308315
ret = fseek(vas_file_p, (long)(blk_pos*Page_Size), SEEK_SET);
309316
if(ret == -1) {
310317
console("va_server: unable to fseek, err = %d\n", ferror(vas_file_p));
318+
free(hdr);
311319
free(disk_hdr);
312320
return -1;
313321
}
314322
items = fread((void *)disk_hdr, 1, Page_Size, vas_file_p);
315323
if(items != Page_Size) {
324+
free(hdr);
325+
free(disk_hdr);
316326
return -1;
317327
}
318328
if(disk_hdr->magic[0] != CRASH_MAGIC) {
319329
console("va_server: bad magic 0x%lx\n", disk_hdr->magic[0]);
330+
free(hdr);
331+
free(disk_hdr);
320332
return -1;
321333
}
322334
ret = fseek(vas_file_p, (long)((blk_pos + disk_hdr->map_block) * disk_hdr->blk_size), SEEK_SET);
323335

324336
if(ret == -1) {
325337
printf("va_server: unable to fseek, err = %d\n", ferror(vas_file_p));
338+
free(hdr);
339+
free(disk_hdr);
326340
return -1;
327341
}
328342

@@ -338,6 +352,8 @@ int read_map_v1(int blk_pos)
338352
vas_file_p);
339353
if(items != hdr->map_entries) {
340354
printf("unable to read map entries, err = %d\n", errno);
355+
free(hdr);
356+
free(disk_hdr);
341357
return -1;
342358
}
343359

xendump.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -2775,8 +2775,10 @@ xc_core_dump_elfnote(off_t sh_offset, size_t sh_size, int store)
27752775
index += sizeof(struct elfnote) + elfnote->descsz;
27762776
}
27772777

2778-
if (!store)
2778+
if (!store) {
2779+
free(notes_buffer);
27792780
return;
2781+
}
27802782

27812783
if (elfnote_header) {
27822784
xd->xc_core.header.xch_magic = elfnote_header->xch_magic;
@@ -2798,6 +2800,7 @@ xc_core_dump_elfnote(off_t sh_offset, size_t sh_size, int store)
27982800
xd->xc_core.format_version = format_version->version;
27992801
}
28002802

2803+
free(notes_buffer);
28012804
}
28022805

28032806
/*

0 commit comments

Comments
 (0)