X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fboot%2Fbootctl.c;h=bd55fa95b028591ccc463dd3dcc3ff143ad90b3f;hp=96637f12c64bd5ce812b8bdf25963b609cca776d;hb=3a4efbff2e729194d286f483bd8e122c52ff1129;hpb=2eec67acbb00593e414549a7e5b35eb7dd776b1b diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index 96637f12c..bd55fa95b 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -177,7 +177,13 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t fprintf(stderr, "Failed to probe partition entry UUID %s: %s\n", p, strerror(-r)); goto fail; } - sd_id128_from_string(v, uuid); + + r = sd_id128_from_string(v, uuid); + if (r < 0) { + fprintf(stderr, "Partition %s has invalid UUID: %s\n", p, v); + r = -EIO; + goto fail; + } errno = 0; r = blkid_probe_lookup_value(b, "PART_ENTRY_NUMBER", &v, NULL); @@ -365,15 +371,15 @@ static int status_binaries(const char *esp_path, sd_id128_t partition) { } static int print_efi_option(uint16_t id, bool in_order) { - char *title = NULL; - char *path = NULL; + _cleanup_free_ char *title = NULL; + _cleanup_free_ char *path = NULL; sd_id128_t partition; bool active; int r = 0; r = efi_get_boot_option(id, &title, &partition, &path, &active); if (r < 0) - goto finish; + return r; /* print only configured entries with partition information */ if (!path || sd_id128_equal(partition, SD_ID128_NULL)) @@ -388,10 +394,7 @@ static int print_efi_option(uint16_t id, bool in_order) { printf(" File: └─%s\n", path); printf("\n"); -finish: - free(title); - free(path); - return r; + return 0; } static int status_variables(void) { @@ -896,7 +899,7 @@ finish: } static int remove_from_order(uint16_t slot) { - uint16_t *order = NULL; + _cleanup_free_ uint16_t *order = NULL; int n_order; int i; int err = 0; @@ -917,7 +920,6 @@ static int remove_from_order(uint16_t slot) { break; } - free(order); return err; }