From 1b9d0744937a2f44b88577408f9eb9a879c00881 Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Thu, 10 Dec 2009 00:00:50 +0100 Subject: [PATCH] Add virBufferFreeAndReset() and replace free() Replace free(virBufferContentAndReset()) with virBufferFreeAndReset(). Update documentation and replace all remaining calls to free() with calls to VIR_FREE(). Also add missing calls to virBufferFreeAndReset() and virReportOOMError() in OOM error cases. --- HACKING | 5 ++- daemon/libvirtd.c | 44 +++++++++---------- docs/hacking.html.in | 7 +-- src/conf/capabilities.c | 4 +- src/conf/domain_conf.c | 11 +++-- src/conf/interface_conf.c | 5 +-- src/conf/network_conf.c | 4 +- src/conf/node_device_conf.c | 4 +- src/conf/secret_conf.c | 4 +- src/conf/storage_conf.c | 8 ++-- src/esx/esx_driver.c | 3 ++ src/esx/esx_vi.c | 10 ++--- src/esx/esx_vi_methods.c | 68 ++++++++---------------------- src/esx/esx_vmx.c | 11 +---- src/libvirt_private.syms | 1 + src/node_device/node_device_udev.c | 1 + src/opennebula/one_client.c | 9 ++-- src/opennebula/one_conf.c | 3 +- src/openvz/openvz_conf.c | 8 ++-- src/openvz/openvz_driver.c | 3 +- src/phyp/phyp_driver.c | 5 +-- src/qemu/qemu_conf.c | 39 +++++++++++------ src/qemu/qemu_driver.c | 5 ++- src/remote/remote_driver.c | 8 ++-- src/security/security_selinux.c | 6 +-- src/security/virt-aa-helper.c | 19 +++++---- src/storage/storage_backend.c | 10 ++--- src/storage/storage_driver.c | 3 +- src/uml/uml_conf.c | 4 +- src/util/buf.c | 13 ++++++ src/util/buf.h | 1 + src/util/conf.c | 5 ++- src/util/logging.c | 8 +++- src/util/qparams.c | 1 + src/util/util.c | 2 +- src/util/virterror.c | 8 ++-- src/xen/block_stats.c | 4 +- src/xen/xend_internal.c | 18 +++++--- src/xen/xm_internal.c | 19 +++++---- src/xen/xs_internal.c | 18 ++++---- tools/virsh.c | 4 +- 41 files changed, 201 insertions(+), 212 deletions(-) diff --git a/HACKING b/HACKING index 548e2a0245..3fb111326b 100644 --- a/HACKING +++ b/HACKING @@ -293,10 +293,11 @@ eg typical usage is as follows: ... virBufferAddLit(&buf, "\n"); - .... + ... if (virBufferError(&buf)) { - __virRaiseError(...); + virBufferFreeAndReset(&buf); + virReportOOMError(...); return NULL; } diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index d4e20ff2dd..6b7e33d988 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -582,7 +582,7 @@ static int qemudListenUnix(struct qemud_server *server, cleanup: if (sock->fd) close(sock->fd); - free(sock); + VIR_FREE(sock); return -1; } @@ -803,8 +803,8 @@ static int qemudInitPaths(struct qemud_server *server, _("Resulting path too long for buffer in qemudInitPaths()")); cleanup: - free (dir_prefix); - free (sock_dir_prefix); + VIR_FREE(dir_prefix); + VIR_FREE(sock_dir_prefix); return ret; } @@ -1452,8 +1452,7 @@ void qemudDispatchClientFailure(struct qemud_client *client) { sasl_dispose(&client->saslconn); client->saslconn = NULL; } - free(client->saslUsername); - client->saslUsername = NULL; + VIR_FREE(client->saslUsername); #endif if (client->tlssession) { gnutls_deinit (client->tlssession); @@ -2374,19 +2373,19 @@ static void qemudCleanup(struct qemud_server *server) { if (sock->watch) virEventRemoveHandleImpl(sock->watch); close(sock->fd); - free(sock); + VIR_FREE(sock); sock = next; } - free(server->logDir); + VIR_FREE(server->logDir); #ifdef HAVE_SASL if (server->saslUsernameWhitelist) { char **list = server->saslUsernameWhitelist; while (*list) { - free(*list); + VIR_FREE(*list); list++; } - free(server->saslUsernameWhitelist); + VIR_FREE(server->saslUsernameWhitelist); } #endif @@ -2743,10 +2742,9 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename) goto free_and_fail; } unix_sock_gid = grp->gr_gid; - VIR_FREE (buf); + VIR_FREE(buf); } - free (unix_sock_group); - unix_sock_group = NULL; + VIR_FREE(unix_sock_group); } GET_CONF_STR (conf, filename, unix_sock_ro_perms); @@ -2755,8 +2753,7 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename) VIR_ERROR(_("Failed to parse mode '%s'"), unix_sock_ro_perms); goto free_and_fail; } - free (unix_sock_ro_perms); - unix_sock_ro_perms = NULL; + VIR_FREE(unix_sock_ro_perms); } GET_CONF_STR (conf, filename, unix_sock_rw_perms); @@ -2765,8 +2762,7 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename) VIR_ERROR(_("Failed to parse mode '%s'"), unix_sock_rw_perms); goto free_and_fail; } - free (unix_sock_rw_perms); - unix_sock_rw_perms = NULL; + VIR_FREE(unix_sock_rw_perms); } GET_CONF_STR (conf, filename, unix_sock_dir); @@ -2801,12 +2797,11 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename) free_and_fail: virConfFree (conf); - free (mdns_name); - mdns_name = NULL; - free (unix_sock_ro_perms); - free (unix_sock_rw_perms); - free (unix_sock_group); - VIR_FREE (buf); + VIR_FREE(mdns_name); + VIR_FREE(unix_sock_ro_perms); + VIR_FREE(unix_sock_rw_perms); + VIR_FREE(unix_sock_group); + VIR_FREE(buf); /* Don't bother trying to free listen_addr, tcp_port, tls_port, key_file, cert_file, ca_file, or crl_file, since they are initialized to @@ -2817,9 +2812,8 @@ remoteReadConfigFile (struct qemud_server *server, const char *filename) if (tls_allowed_dn_list) { int i; for (i = 0; tls_allowed_dn_list[i]; i++) - free (tls_allowed_dn_list[i]); - free (tls_allowed_dn_list); - tls_allowed_dn_list = NULL; + VIR_FREE(tls_allowed_dn_list[i]); + VIR_FREE(tls_allowed_dn_list); } return -1; diff --git a/docs/hacking.html.in b/docs/hacking.html.in index 94b7238e76..af63411185 100644 --- a/docs/hacking.html.in +++ b/docs/hacking.html.in @@ -306,14 +306,15 @@ ... virBufferAddLit(&buf, "<domain>\n"); - virBufferVSprint(&buf, " <memory>%d</memory>\n", memory); + virBufferVSprint(&buf, " <memory>%d</memory>\n", memory); ... virBufferAddLit(&buf, "</domain>\n"); - .... + ... if (virBufferError(&buf)) { - __virRaiseError(...); + virBufferFreeAndReset(&buf); + virReportOOMError(...); return NULL; } diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index 6ebddf5f2a..476bba6e3a 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -769,8 +769,10 @@ virCapabilitiesFormatXML(virCapsPtr caps) virBufferAddLit(&xml, "\n"); - if (virBufferError(&xml)) + if (virBufferError(&xml)) { + virBufferFreeAndReset(&xml); return NULL; + } return virBufferContentAndReset(&xml); } diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index dca2e49964..5e94edf1ec 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3723,6 +3723,7 @@ virDomainCpuSetFormat(virConnectPtr conn, char *cpuset, int maxcpu) } if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); virReportOOMError(conn); return NULL; } @@ -4531,7 +4532,7 @@ char *virDomainDefFormat(virConnectPtr conn, virBuffer buf = VIR_BUFFER_INITIALIZER; unsigned char *uuid; char uuidstr[VIR_UUID_STRING_BUFLEN]; - const char *type = NULL, *tmp; + const char *type = NULL; int n, allones = 1; if (!(type = virDomainVirtTypeToString(def->virtType))) { @@ -4787,8 +4788,7 @@ char *virDomainDefFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); cleanup: - tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; } @@ -4797,7 +4797,7 @@ char *virDomainObjFormat(virConnectPtr conn, virDomainObjPtr obj, int flags) { - char *config_xml = NULL, *xml = NULL; + char *config_xml = NULL; virBuffer buf = VIR_BUFFER_INITIALIZER; virBufferVSprintf(&buf, "\n", @@ -4825,8 +4825,7 @@ char *virDomainObjFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); error: - xml = virBufferContentAndReset(&buf); - VIR_FREE(xml); + virBufferFreeAndReset(&buf); return NULL; } diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c index 31abf12890..3c99027cfc 100644 --- a/src/conf/interface_conf.c +++ b/src/conf/interface_conf.c @@ -1208,7 +1208,7 @@ char *virInterfaceDefFormat(virConnectPtr conn, const virInterfaceDefPtr def) { virBuffer buf = VIR_BUFFER_INITIALIZER; - const char *type = NULL, *tmp; + const char *type = NULL; if ((def == NULL) || ((def->name == NULL) && (def->type != VIR_INTERFACE_TYPE_VLAN))) { @@ -1271,8 +1271,7 @@ char *virInterfaceDefFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); cleanup: - tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; } diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 62b3007c25..ab76f21dd7 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -642,7 +642,6 @@ char *virNetworkDefFormat(virConnectPtr conn, { virBuffer buf = VIR_BUFFER_INITIALIZER; unsigned char *uuid; - char *tmp; char uuidstr[VIR_UUID_STRING_BUFLEN]; virBufferAddLit(&buf, "\n"); @@ -731,8 +730,7 @@ char *virNetworkDefFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); - tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; } diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 6003ab15ca..4bf71da700 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -246,7 +246,6 @@ char *virNodeDeviceDefFormat(virConnectPtr conn, { virBuffer buf = VIR_BUFFER_INITIALIZER; virNodeDevCapsDefPtr caps; - char *tmp; virBufferAddLit(&buf, "\n"); virBufferEscapeString(&buf, " %s\n", def->name); @@ -464,8 +463,7 @@ char *virNodeDeviceDefFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); - tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; } diff --git a/src/conf/secret_conf.c b/src/conf/secret_conf.c index 21215b29b7..538fa91052 100644 --- a/src/conf/secret_conf.c +++ b/src/conf/secret_conf.c @@ -303,7 +303,6 @@ virSecretDefFormat(virConnectPtr conn, const virSecretDefPtr def) virBuffer buf = VIR_BUFFER_INITIALIZER; unsigned char *uuid; char uuidstr[VIR_UUID_STRING_BUFLEN]; - char *tmp; virBufferVSprintf(&buf, "\n", def->ephemeral ? "yes" : "no", @@ -328,7 +327,6 @@ virSecretDefFormat(virConnectPtr conn, const virSecretDefPtr def) no_memory: virReportOOMError(conn); error: - tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; } diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 065cd048b5..0aefa06f6e 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -954,7 +954,7 @@ virStoragePoolDefFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); cleanup: - free(virBufferContentAndReset(&buf)); + virBufferFreeAndReset(&buf); return NULL; } @@ -1292,7 +1292,6 @@ virStorageVolDefFormat(virConnectPtr conn, virStorageVolDefPtr def) { virStorageVolOptionsPtr options; virBuffer buf = VIR_BUFFER_INITIALIZER; - char *tmp; options = virStorageVolOptionsForPoolType(pool->type); if (options == NULL) @@ -1351,8 +1350,7 @@ virStorageVolDefFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); cleanup: - tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; } @@ -1742,7 +1740,7 @@ char *virStoragePoolSourceListFormat(virConnectPtr conn, no_memory: virReportOOMError(conn); cleanup: - free(virBufferContentAndReset(&buf)); + virBufferFreeAndReset(&buf); return NULL; } diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 5737fe9660..ea464a37e9 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -2293,6 +2293,7 @@ esxDomainDumpXML(virDomainPtr domain, int flags) return xml; failure: + virBufferFreeAndReset(&buffer); VIR_FREE(xml); goto cleanup; @@ -2723,6 +2724,8 @@ esxDomainDefineXML(virConnectPtr conn, const char *xml ATTRIBUTE_UNUSED) return domain; failure: + virBufferFreeAndReset(&buffer); + domain = NULL; goto cleanup; diff --git a/src/esx/esx_vi.c b/src/esx/esx_vi.c index 04860e2068..5725b2fa61 100644 --- a/src/esx/esx_vi.c +++ b/src/esx/esx_vi.c @@ -532,7 +532,7 @@ esxVI_Context_DownloadFile(virConnectPtr conn, esxVI_Context *ctx, return 0; failure: - free(virBufferContentAndReset(&buffer)); + virBufferFreeAndReset(&buffer); return -1; } @@ -708,7 +708,7 @@ esxVI_Context_Execute(virConnectPtr conn, esxVI_Context *ctx, return 0; failure: - free(virBufferContentAndReset(&buffer)); + virBufferFreeAndReset(&buffer); esxVI_Response_Free(response); esxVI_Fault_Free(&fault); @@ -2065,7 +2065,7 @@ esxVI_StartSimpleVirtualMachineTask return result; failure: - free(virBufferContentAndReset(&buffer)); + virBufferFreeAndReset(&buffer); result = -1; @@ -2124,9 +2124,7 @@ esxVI_SimpleVirtualMachineMethod(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; diff --git a/src/esx/esx_vi_methods.c b/src/esx/esx_vi_methods.c index a80d1bf7a9..06b5fd4e60 100644 --- a/src/esx/esx_vi_methods.c +++ b/src/esx/esx_vi_methods.c @@ -158,9 +158,7 @@ esxVI_Login(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -214,9 +212,7 @@ esxVI_Logout(virConnectPtr conn, esxVI_Context *ctx) return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -283,9 +279,7 @@ esxVI_SessionIsActive(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -352,9 +346,7 @@ esxVI_RetrieveProperties(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -451,9 +443,7 @@ esxVI_MigrateVM_Task(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -509,9 +499,7 @@ esxVI_ReconfigVM_Task(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -579,9 +567,7 @@ esxVI_RegisterVM_Task(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -630,9 +616,7 @@ esxVI_UnregisterVM(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -702,9 +686,7 @@ esxVI_CreateFilter(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -758,9 +740,7 @@ esxVI_DestroyPropertyFilter(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -824,9 +804,7 @@ esxVI_WaitForUpdates(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -928,9 +906,7 @@ esxVI_ValidateMigration(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -1003,9 +979,7 @@ esxVI_FindByIp(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -1089,9 +1063,7 @@ esxVI_FindByUuid(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -1165,9 +1137,7 @@ esxVI_QueryAvailablePerfMetric(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -1232,9 +1202,7 @@ esxVI_QueryPerfCounter(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; @@ -1299,9 +1267,7 @@ esxVI_QueryPerf(virConnectPtr conn, esxVI_Context *ctx, return result; failure: - if (request == NULL) { - request = virBufferContentAndReset(&buffer); - } + virBufferFreeAndReset(&buffer); result = -1; diff --git a/src/esx/esx_vmx.c b/src/esx/esx_vmx.c index a16751393b..f5b45440f4 100644 --- a/src/esx/esx_vmx.c +++ b/src/esx/esx_vmx.c @@ -2124,7 +2124,6 @@ esxVMX_FormatConfig(virConnectPtr conn, esxVI_Context *ctx, int sched_cpu_affinity_length; unsigned char zero[VIR_UUID_BUFLEN]; virBuffer buffer = VIR_BUFFER_INITIALIZER; - char *vmx = NULL; memset(zero, 0, VIR_UUID_BUFLEN); @@ -2347,16 +2346,10 @@ esxVMX_FormatConfig(virConnectPtr conn, esxVI_Context *ctx, goto failure; } - vmx = virBufferContentAndReset(&buffer); - - return vmx; + return virBufferContentAndReset(&buffer); failure: - if (vmx == NULL) { - vmx = virBufferContentAndReset(&buffer); - } - - VIR_FREE(vmx); + virBufferFreeAndReset(&buffer); return NULL; } diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 72257d7263..58f99fb966 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -12,6 +12,7 @@ virBufferAddChar; virBufferContentAndReset; virBufferError; virBufferURIEncodeString; +virBufferFreeAndReset; # caps.h diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index c7238fc5f8..cf23be11d5 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -323,6 +323,7 @@ static int udevGenerateDeviceName(struct udev_device *device, } if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); VIR_ERROR("Buffer error when generating device name for device " "with sysname '%s'\n", udev_device_get_sysname(device)); ret = -1; diff --git a/src/opennebula/one_client.c b/src/opennebula/one_client.c index 39bb1ea69f..da806fc62a 100644 --- a/src/opennebula/one_client.c +++ b/src/opennebula/one_client.c @@ -26,6 +26,7 @@ #include "one_client.h" #include "datatypes.h" #include "util.h" +#include "memory.h" oneClient one_client; @@ -54,12 +55,12 @@ int c_oneReturnCode(xmlrpc_value *resultP) if( return_code ) { xmlrpc_DECREF(resultP); - free(return_string); + VIR_FREE(return_string); return 0; } else { - free(one_client.error); + VIR_FREE(one_client.error); one_client.error=return_string; return -1; @@ -125,7 +126,7 @@ int c_oneAllocateTemplate(char* vm_template) xmlrpc_DECREF(valueP); xmlrpc_DECREF(resultP); - free(one_client.error); + VIR_FREE(one_client.error); one_client.error=return_string; return -1; @@ -194,7 +195,7 @@ int c_oneVmInfo(int vmid, char* ret_info, int length) } xmlrpc_DECREF(resultP); - free(return_string); + VIR_FREE(return_string); return retval; } diff --git a/src/opennebula/one_conf.c b/src/opennebula/one_conf.c index baef217c62..2ed330b5f6 100644 --- a/src/opennebula/one_conf.c +++ b/src/opennebula/one_conf.c @@ -278,7 +278,6 @@ char* xmlOneTemplate(virConnectPtr conn,virDomainDefPtr def) no_memory: virReportOOMError(conn); - char* tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; }; diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index 33c2fd39b4..7e9abbfdab 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -345,10 +345,12 @@ openvz_replace(const char* str, str_start = offset + from_len; } - virBufferAdd(&buf, str_start, strlen(str_start)); + virBufferAdd(&buf, str_start, -1); - if(virBufferError(&buf)) - return NULL; + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + return NULL; + } return virBufferContentAndReset(&buf); } diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index aac2eb8056..1c0fccc4fb 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -792,8 +792,7 @@ openvzDomainSetNetworkConfig(virConnectPtr conn, return 0; exit: - param = virBufferContentAndReset(&buf); - VIR_FREE(param); + virBufferFreeAndReset(&buf); return -1; } diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index dfbc9680fd..c4fcfedb7a 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -486,13 +486,12 @@ phypExec(LIBSSH2_SESSION * session, char *cmd, int *exit_status, err: (*exit_status) = SSH_CMD_ERR; - char *cleanup_buf = virBufferContentAndReset(&tex_ret); - - VIR_FREE(cleanup_buf); + virBufferFreeAndReset(&tex_ret); return NULL; exit: if (virBufferError(&tex_ret)) { + virBufferFreeAndReset(&tex_ret); virReportOOMError(conn); return NULL; } diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 7d41b5d0d9..a25fac6d74 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1379,6 +1379,7 @@ qemuBuildHostNetStr(virConnectPtr conn, type_sep = ','; /* dead-store, but leave it, in case... */ } if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); virReportOOMError(conn); return -1; } @@ -1866,8 +1867,10 @@ int qemudBuildCommandLine(virConnectPtr conn, virBufferAddLit(&buf, "control,"); qemudBuildCommandLineChrDevStr(monitor_chr, &buf); - if (virBufferError(&buf)) - goto error; + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + goto no_memory; + } ADD_ARG_LIT("-monitor"); ADD_ARG(virBufferContentAndReset(&buf)); @@ -2054,8 +2057,8 @@ int qemudBuildCommandLine(virConnectPtr conn, } if (virBufferError(&opt)) { - virReportOOMError(conn); - goto error; + virBufferFreeAndReset(&opt); + goto no_memory; } optstr = virBufferContentAndReset(&opt); @@ -2197,8 +2200,10 @@ int qemudBuildCommandLine(virConnectPtr conn, virDomainChrDefPtr serial = def->serials[i]; qemudBuildCommandLineChrDevStr(serial, &buf); - if (virBufferError(&buf)) - goto error; + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + goto no_memory; + } ADD_ARG_LIT("-serial"); ADD_ARG(virBufferContentAndReset(&buf)); @@ -2214,8 +2219,10 @@ int qemudBuildCommandLine(virConnectPtr conn, virDomainChrDefPtr parallel = def->parallels[i]; qemudBuildCommandLineChrDevStr(parallel, &buf); - if (virBufferError(&buf)) - goto error; + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + goto no_memory; + } ADD_ARG_LIT("-parallel"); ADD_ARG(virBufferContentAndReset(&buf)); @@ -2240,8 +2247,10 @@ int qemudBuildCommandLine(virConnectPtr conn, } qemudBuildCommandLineChrDevChardevStr(channel, id, &buf); - if (virBufferError(&buf)) - goto error; + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + goto no_memory; + } ADD_ARG_LIT("-chardev"); ADD_ARG(virBufferContentAndReset(&buf)); @@ -2254,8 +2263,10 @@ int qemudBuildCommandLine(virConnectPtr conn, VIR_FREE(addr); - if (virBufferError(&buf)) - goto error; + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + goto no_memory; + } ADD_ARG_LIT("-net"); ADD_ARG(virBufferContentAndReset(&buf)); @@ -2313,8 +2324,10 @@ int qemudBuildCommandLine(virConnectPtr conn, virBufferVSprintf(&opt, "%d", def->graphics[0]->data.vnc.port - 5900); } - if (virBufferError(&opt)) + if (virBufferError(&opt)) { + virBufferFreeAndReset(&opt); goto no_memory; + } optstr = virBufferContentAndReset(&opt); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 7e60d0ebcd..2fb059db4a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4491,8 +4491,11 @@ static char *qemuDomainXMLToNative(virConnectPtr conn, tmp++; } - if (virBufferError(&buf)) + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); + virReportOOMError(conn); goto cleanup; + } ret = virBufferContentAndReset(&buf); diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index ecc0c17fc0..affeb0f82c 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -1424,10 +1424,10 @@ retry: /* Free hostname copy */ - free (priv->hostname); + VIR_FREE(priv->hostname); /* See comment for remoteType. */ - free (priv->type); + VIR_FREE(priv->type); /* Free callback list */ virDomainEventCallbackListFree(priv->callbackList); @@ -3411,7 +3411,7 @@ remoteDomainBlockPeek (virDomainPtr domain, rv = 0; cleanup: - free (ret.buffer.buffer_val); + VIR_FREE(ret.buffer.buffer_val); done: remoteDriverUnlock(priv); @@ -3462,7 +3462,7 @@ remoteDomainMemoryPeek (virDomainPtr domain, rv = 0; cleanup: - free (ret.buffer.buffer_val); + VIR_FREE(ret.buffer.buffer_val); done: remoteDriverUnlock(priv); diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index 255ba537b5..000bc8a520 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -77,8 +77,8 @@ mcsRemove(const char *mcs) else { mcsList = ptr->next; } - free(ptr->mcs); - free(ptr); + VIR_FREE(ptr->mcs); + VIR_FREE(ptr); return 0; } prevptr = ptr; @@ -293,7 +293,7 @@ SELinuxGetSecurityLabel(virConnectPtr conn, } strcpy(sec->label, (char *) ctx); - free(ctx); + VIR_FREE(ctx); sec->enforcing = security_getenforce(); if (sec->enforcing == -1) { diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index 62f0977f5d..35b29ada28 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -64,10 +64,10 @@ vahDeinit(vahControl * ctl) VIR_FREE(ctl->def); if (ctl->caps) virCapabilitiesFree(ctl->caps); - free(ctl->files); - free(ctl->hvm); - free(ctl->arch); - free(ctl->newdisk); + VIR_FREE(ctl->files); + VIR_FREE(ctl->hvm); + VIR_FREE(ctl->arch); + VIR_FREE(ctl->newdisk); return 0; } @@ -761,7 +761,7 @@ vah_add_file(virBufferPtr buf, const char *path, const char *perms) } clean: - free(tmp); + VIR_FREE(tmp); return rc; } @@ -883,8 +883,9 @@ get_files(vahControl * ctl) goto clean; if (virBufferError(&buf)) { - vah_error(NULL, 0, "failed to allocate file buffer"); - goto clean; + virBufferFreeAndReset(&buf); + vah_error(NULL, 0, "failed to allocate file buffer"); + goto clean; } rc = 0; @@ -1048,8 +1049,10 @@ main(int argc, char **argv) if (ctl->files) virBufferVSprintf(&buf, "%s", ctl->files); - if (virBufferError(&buf)) + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); vah_error(ctl, 1, "failed to allocate buffer"); + } included_files = virBufferContentAndReset(&buf); diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index bb926cdefb..a3b4d5aa97 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -445,8 +445,7 @@ cleanup: conn->secretDriver->undefine(secret); virSecretFree(secret); } - xml = virBufferContentAndReset(&buf); - VIR_FREE(xml); + virBufferFreeAndReset(&buf); virSecretDefFree(def); VIR_FREE(enc_secret); return ret; @@ -1317,8 +1316,7 @@ virStorageBackendRunProgNul(virConnectPtr conn, goto cleanup; n_tok = 0; for (i = 0; i < n_columns; i++) { - free (v[i]); - v[i] = NULL; + VIR_FREE(v[i]); } } } @@ -1331,8 +1329,8 @@ virStorageBackendRunProgNul(virConnectPtr conn, cleanup: for (i = 0; i < n_columns; i++) - free (v[i]); - free (v); + VIR_FREE(v[i]); + VIR_FREE(v); if (fp) fclose (fp); diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index fadba57d26..e01d5ae4d5 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -422,8 +422,7 @@ storageListDefinedPools(virConnectPtr conn, cleanup: storageDriverUnlock(driver); for (i = 0 ; i < got ; i++) { - free(names[i]); - names[i] = NULL; + VIR_FREE(names[i]); } memset(names, 0, nnames * sizeof(*names)); return -1; diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c index 0ace58fb0d..895a94d539 100644 --- a/src/uml/uml_conf.c +++ b/src/uml/uml_conf.c @@ -163,7 +163,6 @@ umlBuildCommandLineNet(virConnectPtr conn, virDomainNetDefPtr def, int idx) { - char *ret; virBuffer buf = VIR_BUFFER_INITIALIZER; /* General format: ethNN=type,options */ @@ -265,8 +264,7 @@ umlBuildCommandLineNet(virConnectPtr conn, return virBufferContentAndReset(&buf); error: - ret = virBufferContentAndReset(&buf); - VIR_FREE(ret); + virBufferFreeAndReset(&buf); return NULL; } diff --git a/src/util/buf.c b/src/util/buf.c index 9681635caa..e683928cd8 100644 --- a/src/util/buf.c +++ b/src/util/buf.c @@ -166,6 +166,19 @@ virBufferContentAndReset(const virBufferPtr buf) return str; } +/** + * virBufferFreeAndReset: + * @buf: the buffer to free and reset + * + * Frees the buffer content and resets the buffer structure. + */ +void virBufferFreeAndReset(const virBufferPtr buf) +{ + char *str = virBufferContentAndReset(buf); + + VIR_FREE(str); +} + /** * virBufferError: * @buf: the buffer diff --git a/src/util/buf.h b/src/util/buf.h index 94ee8a3d10..d9a17083ff 100644 --- a/src/util/buf.h +++ b/src/util/buf.h @@ -35,6 +35,7 @@ struct _virBuffer { #endif char *virBufferContentAndReset(const virBufferPtr buf); +void virBufferFreeAndReset(const virBufferPtr buf); int virBufferError(const virBufferPtr buf); unsigned int virBufferUse(const virBufferPtr buf); void virBufferAdd(const virBufferPtr buf, const char *str, int len); diff --git a/src/util/conf.c b/src/util/conf.c index 8126f698b7..0c7e556db1 100644 --- a/src/util/conf.c +++ b/src/util/conf.c @@ -927,15 +927,15 @@ virConfWriteFile(const char *filename, virConfPtr conf) } if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); virReportOOMError(NULL); return -1; } fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR ); if (fd < 0) { - char *tmp = virBufferContentAndReset(&buf); + virBufferFreeAndReset(&buf); virConfError(NULL, VIR_ERR_WRITE_FAILED, _("failed to open file")); - VIR_FREE(tmp); return -1; } @@ -983,6 +983,7 @@ virConfWriteMem(char *memory, int *len, virConfPtr conf) } if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); virReportOOMError(NULL); return -1; } diff --git a/src/util/logging.c b/src/util/logging.c index 757f78ccee..6bd8469c8d 100644 --- a/src/util/logging.c +++ b/src/util/logging.c @@ -867,8 +867,10 @@ char *virLogGetFilters(void) { } virLogUnlock(); - if (virBufferError(&filterbuf)) + if (virBufferError(&filterbuf)) { + virBufferFreeAndReset(&filterbuf); return NULL; + } return virBufferContentAndReset(&filterbuf); } @@ -905,8 +907,10 @@ char *virLogGetOutputs(void) { } virLogUnlock(); - if (virBufferError(&outputbuf)) + if (virBufferError(&outputbuf)) { + virBufferFreeAndReset(&outputbuf); return NULL; + } return virBufferContentAndReset(&outputbuf); } diff --git a/src/util/qparams.c b/src/util/qparams.c index d0a84b38e5..9b96c2ac30 100644 --- a/src/util/qparams.c +++ b/src/util/qparams.c @@ -154,6 +154,7 @@ qparam_get_query (const struct qparam_set *ps) } if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); virReportOOMError(NULL); return NULL; } diff --git a/src/util/util.c b/src/util/util.c index 3a85c5284a..694838a816 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -936,7 +936,7 @@ saferead_lim (int fd, size_t max_len, size_t *length) } } - free (buf); + VIR_FREE(buf); errno = save_errno; return NULL; } diff --git a/src/util/virterror.c b/src/util/virterror.c index 8b374ca66b..3ff02bad21 100644 --- a/src/util/virterror.c +++ b/src/util/virterror.c @@ -345,10 +345,10 @@ virResetError(virErrorPtr err) { if (err == NULL) return; - free(err->message); - free(err->str1); - free(err->str2); - free(err->str3); + VIR_FREE(err->message); + VIR_FREE(err->str1); + VIR_FREE(err->str2); + VIR_FREE(err->str3); memset(err, 0, sizeof(virError)); } diff --git a/src/xen/block_stats.c b/src/xen/block_stats.c index 73b94c161f..fdcaff74bb 100644 --- a/src/xen/block_stats.c +++ b/src/xen/block_stats.c @@ -156,12 +156,12 @@ check_bd_connected (xenUnifiedPrivatePtr priv, int device, int domid) * string instead of an error. Assume it's not connected * in this case. */ - free (rs); + VIR_FREE(rs); return 0; } r = STREQ (rs, "4"); - free (rs); + VIR_FREE(rs); return r; } diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index 76556d0507..241a102a9a 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -525,6 +525,7 @@ xend_op_ext(virConnectPtr xend, const char *path, char *error, } if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); virReportOOMError(NULL); return -1; } @@ -5293,8 +5294,10 @@ xenDaemonFormatSxprChr(virConnectPtr conn, break; } - if (virBufferError(buf)) + if (virBufferError(buf)) { + virReportOOMError(conn); return -1; + } return 0; } @@ -5634,8 +5637,10 @@ xenDaemonFormatSxprSound(virConnectPtr conn, virBufferVSprintf(buf, "%s%s", i ? "," : "", str); } - if (virBufferError(buf)) + if (virBufferError(buf)) { + virReportOOMError(conn); return -1; + } return 0; } @@ -5910,14 +5915,13 @@ xenDaemonFormatSxpr(virConnectPtr conn, if (virBufferError(&buf)) { virReportOOMError(conn); - return NULL; + goto error; } return virBufferContentAndReset(&buf); error: - tmp = virBufferContentAndReset(&buf); - VIR_FREE(tmp); + virBufferFreeAndReset(&buf); return NULL; } @@ -5964,7 +5968,7 @@ virDomainXMLDevID(virDomainPtr domain, return -1; tmp = virStrcpy(ref, xref, ref_len); - free(xref); + VIR_FREE(xref); if (tmp == NULL) return -1; } else if (dev->type == VIR_DOMAIN_DEVICE_NET) { @@ -5984,7 +5988,7 @@ virDomainXMLDevID(virDomainPtr domain, return -1; tmp = virStrcpy(ref, xref, ref_len); - free(xref); + VIR_FREE(xref); if (tmp == NULL) return -1; } else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV && diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c index 6c60839e51..3dc655bdda 100644 --- a/src/xen/xm_internal.c +++ b/src/xen/xm_internal.c @@ -1750,6 +1750,7 @@ int xenXMDomainPinVcpu(virDomainPtr domain, } if (virBufferError(&mapbuf)) { + virBufferFreeAndReset(&mapbuf); virReportOOMError(domain->conn); goto cleanup; } @@ -1980,7 +1981,6 @@ static int xenXMDomainConfigFormatDisk(virConnectPtr conn, { virBuffer buf = VIR_BUFFER_INITIALIZER; virConfValuePtr val, tmp; - char *str; if(disk->src) { if (disk->driverName) { @@ -2021,7 +2021,7 @@ static int xenXMDomainConfigFormatDisk(virConnectPtr conn, if (virBufferError(&buf)) { virReportOOMError(conn); - return -1; + goto cleanup; } if (VIR_ALLOC(val) < 0) { @@ -2042,8 +2042,7 @@ static int xenXMDomainConfigFormatDisk(virConnectPtr conn, return 0; cleanup: - str = virBufferContentAndReset(&buf); - VIR_FREE(str); + virBufferFreeAndReset(&buf); return -1; } @@ -2054,7 +2053,6 @@ static int xenXMDomainConfigFormatNet(virConnectPtr conn, { virBuffer buf = VIR_BUFFER_INITIALIZER; virConfValuePtr val, tmp; - char *str; xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData; virBufferVSprintf(&buf, "mac=%02x:%02x:%02x:%02x:%02x:%02x", @@ -2131,8 +2129,10 @@ static int xenXMDomainConfigFormatNet(virConnectPtr conn, virBufferVSprintf(&buf, ",vifname=%s", net->ifname); - if (virBufferError(&buf)) + if (virBufferError(&buf)) { + virReportOOMError(conn); goto cleanup; + } if (VIR_ALLOC(val) < 0) { virReportOOMError(conn); @@ -2152,8 +2152,7 @@ static int xenXMDomainConfigFormatNet(virConnectPtr conn, return 0; cleanup: - str = virBufferContentAndReset(&buf); - VIR_FREE(str); + virBufferFreeAndReset(&buf); return -1; } @@ -2482,8 +2481,10 @@ virConfPtr xenXMDomainConfigFormat(virConnectPtr conn, virBufferVSprintf(&buf, ",keymap=%s", def->graphics[0]->data.vnc.keymap); } - if (virBufferError(&buf)) + if (virBufferError(&buf)) { + virBufferFreeAndReset(&buf); goto no_memory; + } vfbstr = virBufferContentAndReset(&buf); diff --git a/src/xen/xs_internal.c b/src/xen/xs_internal.c index 0cca9b5807..10b1f8e614 100644 --- a/src/xen/xs_internal.c +++ b/src/xen/xs_internal.c @@ -434,7 +434,7 @@ xenStoreGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info) if (tmp != NULL) { if (tmp[0] == '1') info->state = VIR_DOMAIN_RUNNING; - free(tmp); + VIR_FREE(tmp); } else { info->state = VIR_DOMAIN_NOSTATE; } @@ -442,7 +442,7 @@ xenStoreGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info) if (tmp != NULL) { info->memory = atol(tmp); info->maxMem = atol(tmp); - free(tmp); + VIR_FREE(tmp); } else { info->memory = 0; info->maxMem = 0; @@ -452,7 +452,7 @@ xenStoreGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info) tmp = virDomainDoStoreQuery(domain->conn, domain->id, "cpu_time"); if (tmp != NULL) { info->cpuTime = atol(tmp); - free(tmp); + VIR_FREE(tmp); } else { info->cpuTime = 0; } @@ -462,7 +462,7 @@ xenStoreGetDomainInfo(virDomainPtr domain, virDomainInfoPtr info) tmp2 = virConnectDoStoreList(domain->conn, request, &nb_vcpus); if (tmp2 != NULL) { info->nrVirtCpu = nb_vcpus; - free(tmp2); + VIR_FREE(tmp2); } return (0); } @@ -698,7 +698,7 @@ xenStoreLookupByName(virConnectPtr conn, const char *name) tmp = xs_read(priv->xshandle, 0, prop, &len); if (tmp != NULL) { found = STREQ (name, tmp); - free(tmp); + VIR_FREE(tmp); if (found) break; } @@ -713,8 +713,8 @@ xenStoreLookupByName(virConnectPtr conn, const char *name) ret->id = id; done: - free(xenddomain); - free(idlist); + VIR_FREE(xenddomain); + VIR_FREE(idlist); return(ret); } @@ -843,7 +843,7 @@ int xenStoreDomainGetVNCPort(virConnectPtr conn, int domid) { ret = strtol(tmp, &end, 10); if (ret == 0 && end == tmp) ret = -1; - free(tmp); + VIR_FREE(tmp); } return(ret); } @@ -903,7 +903,7 @@ xenStoreDomainGetOSTypeID(virConnectPtr conn, int id) { if (vm) { snprintf(query, 199, "%s/image/ostype", vm); str = xs_read(priv->xshandle, 0, &query[0], &len); - free(vm); + VIR_FREE(vm); } if (str == NULL) str = strdup("linux"); diff --git a/tools/virsh.c b/tools/virsh.c index 9faac350eb..94a99e960b 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -3800,7 +3800,7 @@ static int buildPoolXML(const vshCmd *cmd, char **retname, char **xml) { return TRUE; cleanup: - free(virBufferContentAndReset(&buf)); + virBufferFreeAndReset(&buf); return FALSE; } @@ -4663,7 +4663,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd) } cleanup: - free(virBufferContentAndReset(&buf)); + virBufferFreeAndReset(&buf); virStoragePoolFree(pool); return FALSE; } -- 2.47.2