]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
daemon: Remove 4kb stack allocation of security label
authorMatthias Bolte <matthias.bolte@googlemail.com>
Sun, 3 Apr 2011 09:21:25 +0000 (11:21 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Tue, 5 Apr 2011 07:08:58 +0000 (09:08 +0200)
daemon/remote.c

index 1700c2d37b6a4dba8713870545680af81dafae84..dd85ef16dad7849877d16fd8c450a6be1877c8bd 100644 (file)
@@ -1607,7 +1607,7 @@ remoteDispatchDomainGetSecurityLabel(struct qemud_server *server ATTRIBUTE_UNUSE
                                      remote_domain_get_security_label_ret *ret)
 {
     virDomainPtr dom;
-    virSecurityLabel seclabel;
+    virSecurityLabelPtr seclabel;
 
     dom = get_nonnull_domain(conn, args->dom);
     if (dom == NULL) {
@@ -1615,22 +1615,30 @@ remoteDispatchDomainGetSecurityLabel(struct qemud_server *server ATTRIBUTE_UNUSE
         return -1;
     }
 
-    memset(&seclabel, 0, sizeof seclabel);
-    if (virDomainGetSecurityLabel(dom, &seclabel) == -1) {
+    if (VIR_ALLOC(seclabel) < 0) {
+        virDomainFree(dom);
+        remoteDispatchOOMError(rerr);
+        return -1;
+    }
+
+    if (virDomainGetSecurityLabel(dom, seclabel) == -1) {
         remoteDispatchConnError(rerr, conn);
         virDomainFree(dom);
+        VIR_FREE(seclabel);
         return -1;
     }
 
-    ret->label.label_len = strlen(seclabel.label) + 1;
+    ret->label.label_len = strlen(seclabel->label) + 1;
     if (VIR_ALLOC_N(ret->label.label_val, ret->label.label_len) < 0) {
         virDomainFree(dom);
+        VIR_FREE(seclabel);
         remoteDispatchOOMError(rerr);
         return -1;
     }
-    strcpy(ret->label.label_val, seclabel.label);
-    ret->enforcing = seclabel.enforcing;
+    strcpy(ret->label.label_val, seclabel->label);
+    ret->enforcing = seclabel->enforcing;
     virDomainFree(dom);
+    VIR_FREE(seclabel);
 
     return 0;
 }