Fix memory and resource handling in the Dragon recovery updater.

This fixes the following cppcheck reports:
[flash_file.c:61]: (error) Memory leak: dev
[vboot_interface.c:56]: (error) Resource leak: file
[vboot_interface.c:62]: (error) Resource leak: file
[vboot_interface.c:62]: (error) Memory leak: data
[vboot_interface.c:83]: (error) Resource leak: file

Change-Id: I09a8c863ea691ee1ffa8fc011d384f8aafa91e8c
diff --git a/recovery/updater/flash_file.c b/recovery/updater/flash_file.c
index ee923ff..3fe8cb3 100644
--- a/recovery/updater/flash_file.c
+++ b/recovery/updater/flash_file.c
@@ -58,7 +58,7 @@
 		return file_blob_open(dev, value);
 
 	if (value->type != VAL_STRING)
-		return NULL;
+		goto out_free;
 
 	dev->fd = open(value->data, O_RDWR);
 	if (dev->fd == -1) {
diff --git a/recovery/updater/vboot_interface.c b/recovery/updater/vboot_interface.c
index a37a1c7..9e74b2b 100644
--- a/recovery/updater/vboot_interface.c
+++ b/recovery/updater/vboot_interface.c
@@ -52,18 +52,26 @@
 	fseek(file, 0, SEEK_END);
 	size = ftell(file);
 	data = malloc(size + 1);
-	if (!data)
-		return NULL;
+	if (!data) {
+		goto out_close;
+	}
 	data[size] = '\0';
 
 	rewind(file);
 	if (fread(data, 1, size, file) != size) {
 		ALOGD("Unable to read FDT property %s\n", prop);
-		return NULL;
+		goto out_free;
 	}
 	fclose(file);
 
 	return data;
+
+out_free:
+	free(data);
+
+out_close:
+	fclose(file);
+	return NULL;
 }
 
 uint32_t fdt_read_u32(const char *prop)
@@ -80,6 +88,7 @@
 	}
 	if (fread(&data, 1, sizeof(data), file) != sizeof(data)) {
 		ALOGD("Unable to read FDT property %s\n", prop);
+		fclose(file);
 		return -1U;
 	}
 	fclose(file);