vfio/display: Fix error path in call site of ramfb_setup()
vfio_display_dmabuf_init() and vfio_display_region_init() calls ramfb_setup() without checking its return value. So we may run into a situation that vfio_display_probe() succeed but errp is set. This is risky and may lead to assert failure in error_setv(). Cc: Gerd Hoffmann <kraxel@redhat.com> Fixes: b290659fc3d ("hw/vfio/display: add ramfb support") Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
9067d50dff
commit
9442d8af67
@ -361,6 +361,9 @@ static int vfio_display_dmabuf_init(VFIOPCIDevice *vdev, Error **errp)
|
|||||||
vdev);
|
vdev);
|
||||||
if (vdev->enable_ramfb) {
|
if (vdev->enable_ramfb) {
|
||||||
vdev->dpy->ramfb = ramfb_setup(errp);
|
vdev->dpy->ramfb = ramfb_setup(errp);
|
||||||
|
if (!vdev->dpy->ramfb) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
vfio_display_edid_init(vdev);
|
vfio_display_edid_init(vdev);
|
||||||
return 0;
|
return 0;
|
||||||
@ -488,6 +491,9 @@ static int vfio_display_region_init(VFIOPCIDevice *vdev, Error **errp)
|
|||||||
vdev);
|
vdev);
|
||||||
if (vdev->enable_ramfb) {
|
if (vdev->enable_ramfb) {
|
||||||
vdev->dpy->ramfb = ramfb_setup(errp);
|
vdev->dpy->ramfb = ramfb_setup(errp);
|
||||||
|
if (!vdev->dpy->ramfb) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user