]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: Fix possible NULL dereference in virStorageVolTargetDefFormat
authorMatthias Bolte <matthias.bolte@googlemail.com>
Fri, 11 Jul 2014 16:13:34 +0000 (18:13 +0200)
committerEric Blake <eblake@redhat.com>
Fri, 11 Jul 2014 23:00:46 +0000 (17:00 -0600)
Commit dae1568c6c6455091e8cd9bc2e90a22af3d3880c converted the perms
member of the virStorageVolTarget struct into a pointer to make it
optional. But virStorageVolTargetDefFormat did not check perms for
NULL before dereferencing it.

src/conf/storage_conf.c

index 9ac5975ed8609ec559d693e24cf202d7266e78a2..aa2965833fb9700dd22aab2ccaed503e08dd15f3 100644 (file)
@@ -1423,22 +1423,24 @@ virStorageVolTargetDefFormat(virStorageVolOptionsPtr options,
         virBufferAsprintf(buf, "<format type='%s'/>\n", format);
     }
 
-    virBufferAddLit(buf, "<permissions>\n");
-    virBufferAdjustIndent(buf, 2);
+    if (def->perms) {
+        virBufferAddLit(buf, "<permissions>\n");
+        virBufferAdjustIndent(buf, 2);
 
-    virBufferAsprintf(buf, "<mode>0%o</mode>\n",
-                      def->perms->mode);
-    virBufferAsprintf(buf, "<owner>%u</owner>\n",
-                      (unsigned int) def->perms->uid);
-    virBufferAsprintf(buf, "<group>%u</group>\n",
-                      (unsigned int) def->perms->gid);
+        virBufferAsprintf(buf, "<mode>0%o</mode>\n",
+                          def->perms->mode);
+        virBufferAsprintf(buf, "<owner>%u</owner>\n",
+                          (unsigned int) def->perms->uid);
+        virBufferAsprintf(buf, "<group>%u</group>\n",
+                          (unsigned int) def->perms->gid);
 
 
-    virBufferEscapeString(buf, "<label>%s</label>\n",
-                          def->perms->label);
+        virBufferEscapeString(buf, "<label>%s</label>\n",
+                              def->perms->label);
 
-    virBufferAdjustIndent(buf, -2);
-    virBufferAddLit(buf, "</permissions>\n");
+        virBufferAdjustIndent(buf, -2);
+        virBufferAddLit(buf, "</permissions>\n");
+    }
 
     if (def->timestamps) {
         virBufferAddLit(buf, "<timestamps>\n");