From 9249187f5b783dab0edcab0f3767da9f0b7253f0 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 9 Nov 2017 10:29:53 +0100 Subject: [PATCH] qemu: block: Don't leak server JSON object from protocol generators 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 600f315fea..8b23df8227 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; } -- GitLab