If creation of the main JSON object containing the storage portion of a
virStorageSource would fail but we'd allocate the server structure we'd
leak it. Found by coverity.
---
src/qemu/qemu_block.c | 72 ++++++++++++++++++++++++++++++++-------------------
1 file changed, 46 insertions(+), 26 deletions(-)
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 600f315fe..8b23df822 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -833,13 +833,18 @@ qemuBlockStorageSourceGetNBDProps(virStorageSourcePtr src)
if (!serverprops)
return NULL;
- ignore_value(virJSONValueObjectCreate(&ret,
- "s:driver", "nbd",
- "a:server", serverprops,
- "S:export", src->path,
- "S:tls-creds", src->tlsAlias,
- NULL));
+ if (virJSONValueObjectCreate(&ret,
+ "s:driver", "nbd",
+ "a:server", serverprops,
+ "S:export", src->path,
+ "S:tls-creds", src->tlsAlias,
+ NULL) < 0)
+ goto cleanup;
+
+ serverprops = NULL;
+ cleanup:
+ virJSONValueFree(serverprops);
return ret;
}
@@ -859,16 +864,21 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src)
if (src->auth)
username = srcPriv->secinfo->s.aes.username;
- ignore_value(virJSONValueObjectCreate(&ret,
- "s:driver", "rbd",
- "s:pool", src->volume,
- "s:image", src->path,
- "S:snapshot", src->snapshot,
- "S:conf", src->configFile,
- "A:server", servers,
- "S:user", username,
- NULL));
+ if (virJSONValueObjectCreate(&ret,
+ "s:driver", "rbd",
+ "s:pool", src->volume,
+ "s:image", src->path,
+ "S:snapshot", src->snapshot,
+ "S:conf", src->configFile,
+ "A:server", servers,
+ "S:user", username,
+ NULL) < 0)
+ goto cleanup;
+ servers = NULL;
+
+ cleanup:
+ virJSONValueFree(servers);
return ret;
}
@@ -891,12 +901,17 @@ qemuBlockStorageSourceGetSheepdogProps(virStorageSourcePtr src)
return NULL;
/* libvirt does not support the 'snap-id' and 'tag' properties */
- ignore_value(virJSONValueObjectCreate(&ret,
- "s:driver", "sheepdog",
- "a:server", serverprops,
- "s:vdi", src->path,
- NULL));
+ if (virJSONValueObjectCreate(&ret,
+ "s:driver", "sheepdog",
+ "a:server", serverprops,
+ "s:vdi", src->path,
+ NULL) < 0)
+ goto cleanup;
+ serverprops = NULL;
+
+ cleanup:
+ virJSONValueFree(serverprops);
return ret;
}
@@ -921,13 +936,18 @@ qemuBlockStorageSourceGetSshProps(virStorageSourcePtr src)
if (src->auth)
username = src->auth->username;
- ignore_value(virJSONValueObjectCreate(&ret,
- "s:driver", "ssh",
- "s:path", src->path,
- "a:server", serverprops,
- "S:user", username,
- NULL));
+ if (virJSONValueObjectCreate(&ret,
+ "s:driver", "ssh",
+ "s:path", src->path,
+ "a:server", serverprops,
+ "S:user", username,
+ NULL) < 0)
+ goto cleanup;
+
+ serverprops = NULL;
+ cleanup:
+ virJSONValueFree(serverprops);
return ret;
}
--
2.14.3