Coverity has found a RESOURCE_LEAK...
<...snip...>
+static int
+virStorageFileBackendGlusterInit(virStorageFilePtr file)
+{
+ virStorageFileBackendGlusterPrivPtr priv = NULL;
+ virDomainDiskHostDefPtr host = &(file->hosts[0]);
+ const char *hostname = host->name;
+ int port = 0;
+
+ VIR_DEBUG("initializing gluster storage file %p(%s/%s)",
+ file, hostname, file->path);
+
+ if (VIR_ALLOC(priv) < 0)
+ return -1;
+
We have 'priv' here... but anywhere through to "error:" if we fail,
then
priv isn't free'd.
+ if (VIR_STRDUP(priv->volname, file->path) < 0)
+ goto error;
+
+ if (!(priv->path = strchr(priv->volname, '/'))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("invalid path of gluster volume: '%s'"),
+ file->path);
+ goto error;
+ }
+
+ *priv->path = '\0';
+ priv->path++;
+
+ if (host->port &&
+ virStrToLong_i(host->port, NULL, 10, &port) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("failed to parse port number '%s'"),
+ host->port);
+ goto error;
+ }
+
+ if (host->transport == VIR_DOMAIN_DISK_PROTO_TRANS_UNIX)
+ hostname = host->socket;
+
+
+ if (!(priv->vol = glfs_new(priv->volname))) {
+ virReportOOMError();
+ goto error;
+ }
+
+ if (glfs_set_volfile_server(priv->vol,
+
virDomainDiskProtocolTransportTypeToString(host->transport),
+ hostname, port) < 0) {
+ virReportSystemError(errno,
+ _("failed to set gluster volfile server
'%s'"),
+ hostname);
+ goto error;
+ }
+
+ if (glfs_init(priv->vol) < 0) {
+ virReportSystemError(errno,
+ _("failed to initialize gluster connection to "
+ "server: '%s'"), hostname);
+ goto error;
+ }
+
+ file->priv = priv;
+
+ return 0;
+
+error:
+ VIR_FREE(priv->volname);
+ glfs_fini(priv->vol);
Adding the free here would be the salve for Coverity.
John
+
+ return -1;
+}
+