[libvirt] [PATCH] conf: Fix possible NULL dereference in virStorageVolTargetDefFormat

Matthias Bolte matthias.bolte at googlemail.com
Fri Jul 11 16:13:34 UTC 2014


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 | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 9ac5975..aa29658 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -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");
-- 
1.9.1




More information about the libvir-list mailing list