Commit 265ca29a7162a9437efabdb3b133237eef49ab7b
1 parent
3adae656
uImage: don't leak file data or file descriptor (Hollis Blanchard)
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5761 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
10 additions
and
9 deletions
loader.c
| ... | ... | @@ -354,6 +354,7 @@ int load_uboot(const char *filename, target_ulong *ep, int *is_linux) |
| 354 | 354 | uboot_image_header_t h; |
| 355 | 355 | uboot_image_header_t *hdr = &h; |
| 356 | 356 | uint8_t *data = NULL; |
| 357 | + int ret = -1; | |
| 357 | 358 | |
| 358 | 359 | fd = open(filename, O_RDONLY | O_BINARY); |
| 359 | 360 | if (fd < 0) |
| ... | ... | @@ -361,23 +362,23 @@ int load_uboot(const char *filename, target_ulong *ep, int *is_linux) |
| 361 | 362 | |
| 362 | 363 | size = read(fd, hdr, sizeof(uboot_image_header_t)); |
| 363 | 364 | if (size < 0) |
| 364 | - goto fail; | |
| 365 | + goto out; | |
| 365 | 366 | |
| 366 | 367 | bswap_uboot_header(hdr); |
| 367 | 368 | |
| 368 | 369 | if (hdr->ih_magic != IH_MAGIC) |
| 369 | - goto fail; | |
| 370 | + goto out; | |
| 370 | 371 | |
| 371 | 372 | /* TODO: Implement Multi-File images. */ |
| 372 | 373 | if (hdr->ih_type == IH_TYPE_MULTI) { |
| 373 | 374 | fprintf(stderr, "Unable to load multi-file u-boot images\n"); |
| 374 | - goto fail; | |
| 375 | + goto out; | |
| 375 | 376 | } |
| 376 | 377 | |
| 377 | 378 | /* TODO: Implement compressed images. */ |
| 378 | 379 | if (hdr->ih_comp != IH_COMP_NONE) { |
| 379 | 380 | fprintf(stderr, "Unable to load compressed u-boot images\n"); |
| 380 | - goto fail; | |
| 381 | + goto out; | |
| 381 | 382 | } |
| 382 | 383 | |
| 383 | 384 | /* TODO: Check CPU type. */ |
| ... | ... | @@ -391,20 +392,20 @@ int load_uboot(const char *filename, target_ulong *ep, int *is_linux) |
| 391 | 392 | *ep = hdr->ih_ep; |
| 392 | 393 | data = qemu_malloc(hdr->ih_size); |
| 393 | 394 | if (!data) |
| 394 | - goto fail; | |
| 395 | + goto out; | |
| 395 | 396 | |
| 396 | 397 | if (read(fd, data, hdr->ih_size) != hdr->ih_size) { |
| 397 | 398 | fprintf(stderr, "Error reading file\n"); |
| 398 | - goto fail; | |
| 399 | + goto out; | |
| 399 | 400 | } |
| 400 | 401 | |
| 401 | 402 | cpu_physical_memory_write_rom(hdr->ih_load, data, hdr->ih_size); |
| 402 | 403 | |
| 403 | - return hdr->ih_size; | |
| 404 | + ret = hdr->ih_size; | |
| 404 | 405 | |
| 405 | -fail: | |
| 406 | +out: | |
| 406 | 407 | if (data) |
| 407 | 408 | qemu_free(data); |
| 408 | 409 | close(fd); |
| 409 | - return -1; | |
| 410 | + return ret; | |
| 410 | 411 | } | ... | ... |