]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
nodedev: Handle NULL command variable
authorJonathon Jongsma <jjongsma@redhat.com>
Tue, 22 Jun 2021 19:53:33 +0000 (14:53 -0500)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 1 Jul 2021 14:34:03 +0000 (16:34 +0200)
In commit 68580a51, I removed the checks for NULL cmd variables because
virCommandRun() already handles the case where it is called with a NULL
cmd. Unfortunately, it handles this case by raising a generic error
which is both unhelpful and overwrites our existing error message. So
for example, when I attempt to create a mediated device with an invalid
parent, I get the following output:

    virsh # nodedev-create mdev-test.xml
    error: Failed to create node device from mdev-test.xml
    error: internal error: invalid use of command API

With this patch, I now get a useful error message again:

    virsh # nodedev-create mdev-test.xml
    error: Failed to create node device from mdev-test.xml
    error: internal error: unable to find parent device 'pci_0000_00_03_0'

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
src/node_device/node_device_driver.c

index 607a3478a357043e07ddee012e8ad9b5d5757bf2..d13bae33f21c64f92f0cab53f1a1bf8f2649964a 100644 (file)
@@ -799,6 +799,10 @@ virMdevctlCreate(virNodeDeviceDef *def, char **uuid, char **errmsg)
                                                             MDEVCTL_CMD_CREATE,
                                                             uuid,
                                                             errmsg);
+
+    if (!cmd)
+        return -1;
+
     /* an auto-generated uuid is returned via stdout if no uuid is specified in
      * the mdevctl args */
     if (virCommandRun(cmd, &status) < 0 || status != 0)
@@ -819,6 +823,9 @@ virMdevctlDefine(virNodeDeviceDef *def, char **uuid, char **errmsg)
                                                             MDEVCTL_CMD_DEFINE,
                                                             uuid, errmsg);
 
+    if (!cmd)
+        return -1;
+
     /* an auto-generated uuid is returned via stdout if no uuid is specified in
      * the mdevctl args */
     if (virCommandRun(cmd, &status) < 0 || status != 0)
@@ -925,6 +932,9 @@ virMdevctlStop(virNodeDeviceDef *def, char **errmsg)
 
     cmd = nodeDeviceGetMdevctlCommand(def, MDEVCTL_CMD_STOP, NULL, errmsg);
 
+    if (!cmd)
+        return -1;
+
     if (virCommandRun(cmd, &status) < 0 || status != 0)
         return -1;
 
@@ -940,6 +950,9 @@ virMdevctlUndefine(virNodeDeviceDef *def, char **errmsg)
 
     cmd = nodeDeviceGetMdevctlCommand(def, MDEVCTL_CMD_UNDEFINE, NULL, errmsg);
 
+    if (!cmd)
+        return -1;
+
     if (virCommandRun(cmd, &status) < 0 || status != 0)
         return -1;
 
@@ -955,6 +968,9 @@ virMdevctlStart(virNodeDeviceDef *def, char **errmsg)
 
     cmd = nodeDeviceGetMdevctlCommand(def, MDEVCTL_CMD_START, NULL, errmsg);
 
+    if (!cmd)
+        return -1;
+
     if (virCommandRun(cmd, &status) < 0 || status != 0)
         return -1;