When host capabilities check failed or when we were unable to register doorbell
bitmap we were forgetting to set error code and were returning 0 which would
make upper layers believe that probe was successful.

Reported-by: Julia Lawall <[email protected]>
Acked-by: Andy King <[email protected]>
Signed-off-by: Dmitry Torokhov <[email protected]>
---
 drivers/misc/vmw_vmci/vmci_guest.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/misc/vmw_vmci/vmci_guest.c 
b/drivers/misc/vmw_vmci/vmci_guest.c
index c98b03b..d35cda0 100644
--- a/drivers/misc/vmw_vmci/vmci_guest.c
+++ b/drivers/misc/vmw_vmci/vmci_guest.c
@@ -165,7 +165,7 @@ static void vmci_guest_cid_update(u32 sub_id,
  * true if required hypercalls (or fallback hypercalls) are
  * supported by the host, false otherwise.
  */
-static bool vmci_check_host_caps(struct pci_dev *pdev)
+static int vmci_check_host_caps(struct pci_dev *pdev)
 {
        bool result;
        struct vmci_resource_query_msg *msg;
@@ -176,7 +176,7 @@ static bool vmci_check_host_caps(struct pci_dev *pdev)
        check_msg = kmalloc(msg_size, GFP_KERNEL);
        if (!check_msg) {
                dev_err(&pdev->dev, "%s: Insufficient memory\n", __func__);
-               return false;
+               return -ENOMEM;
        }
 
        check_msg->dst = vmci_make_handle(VMCI_HYPERVISOR_CONTEXT_ID,
@@ -196,7 +196,7 @@ static bool vmci_check_host_caps(struct pci_dev *pdev)
                __func__, result ? "PASSED" : "FAILED");
 
        /* We need the vector. There are no fallbacks. */
-       return result;
+       return result ? 0 : -ENXIO;
 }
 
 /*
@@ -564,12 +564,14 @@ static int vmci_guest_probe_device(struct pci_dev *pdev,
                        dev_warn(&pdev->dev,
                                 "VMCI device unable to register notification 
bitmap with PPN 0x%x\n",
                                 (u32) bitmap_ppn);
+                       error = -ENXIO;
                        goto err_remove_vmci_dev_g;
                }
        }
 
        /* Check host capabilities. */
-       if (!vmci_check_host_caps(pdev))
+       error = vmci_check_host_caps(pdev);
+       if (error)
                goto err_remove_bitmap;
 
        /* Enable device. */
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to