VMCI: fix error handling path when registering guest driver
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 <julia.lawall@lip6.fr> Acked-by: Andy King <acking@vmware.com> Signed-off-by: Dmitry Torokhov <dtor@vmware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
52cb6a205c
commit
782f244535
@ -165,7 +165,7 @@ static void vmci_guest_cid_update(u32 sub_id,
|
|||||||
* true if required hypercalls (or fallback hypercalls) are
|
* true if required hypercalls (or fallback hypercalls) are
|
||||||
* supported by the host, false otherwise.
|
* 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;
|
bool result;
|
||||||
struct vmci_resource_query_msg *msg;
|
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);
|
check_msg = kmalloc(msg_size, GFP_KERNEL);
|
||||||
if (!check_msg) {
|
if (!check_msg) {
|
||||||
dev_err(&pdev->dev, "%s: Insufficient memory\n", __func__);
|
dev_err(&pdev->dev, "%s: Insufficient memory\n", __func__);
|
||||||
return false;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
check_msg->dst = vmci_make_handle(VMCI_HYPERVISOR_CONTEXT_ID,
|
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");
|
__func__, result ? "PASSED" : "FAILED");
|
||||||
|
|
||||||
/* We need the vector. There are no fallbacks. */
|
/* 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,
|
dev_warn(&pdev->dev,
|
||||||
"VMCI device unable to register notification bitmap with PPN 0x%x\n",
|
"VMCI device unable to register notification bitmap with PPN 0x%x\n",
|
||||||
(u32) bitmap_ppn);
|
(u32) bitmap_ppn);
|
||||||
|
error = -ENXIO;
|
||||||
goto err_remove_vmci_dev_g;
|
goto err_remove_vmci_dev_g;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check host capabilities. */
|
/* Check host capabilities. */
|
||||||
if (!vmci_check_host_caps(pdev))
|
error = vmci_check_host_caps(pdev);
|
||||||
|
if (error)
|
||||||
goto err_remove_bitmap;
|
goto err_remove_bitmap;
|
||||||
|
|
||||||
/* Enable device. */
|
/* Enable device. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user