xen-pciback: fix up cleanup path when alloc fails
When allocating a pciback device fails, clear the private field. This could lead to an use-after free, however the 'really_probe' takes care of setting dev_set_drvdata(dev, NULL) in its failure path (which we would exercise if the ->probe function failed), so we we are OK. However lets be defensive as the code can change. Going forward we should clean up the pci_set_drvdata(dev, NULL) in the various code-base. That will be for another day. Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Reported-by: Jonathan Creekmore <jonathan.creekmore@gmail.com> Signed-off-by: Doug Goldstein <cardoe@cardoe.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
parent
408fb0e5aa
commit
584a561a6f
|
@ -44,7 +44,6 @@ static struct xen_pcibk_device *alloc_pdev(struct xenbus_device *xdev)
|
||||||
dev_dbg(&xdev->dev, "allocated pdev @ 0x%p\n", pdev);
|
dev_dbg(&xdev->dev, "allocated pdev @ 0x%p\n", pdev);
|
||||||
|
|
||||||
pdev->xdev = xdev;
|
pdev->xdev = xdev;
|
||||||
dev_set_drvdata(&xdev->dev, pdev);
|
|
||||||
|
|
||||||
mutex_init(&pdev->dev_lock);
|
mutex_init(&pdev->dev_lock);
|
||||||
|
|
||||||
|
@ -58,6 +57,9 @@ static struct xen_pcibk_device *alloc_pdev(struct xenbus_device *xdev)
|
||||||
kfree(pdev);
|
kfree(pdev);
|
||||||
pdev = NULL;
|
pdev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dev_set_drvdata(&xdev->dev, pdev);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
return pdev;
|
return pdev;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue