mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
video: hyperv_fb: Fix a double free in hvfb_probe
[ Upstream commit37df9f3fed] Function hvfb_probe() calls hvfb_getmem(), expecting upon return that info->apertures is either NULL or points to memory that should be freed by framebuffer_release(). But hvfb_getmem() is freeing the memory and leaving the pointer non-NULL, resulting in a double free if an error occurs or later if hvfb_remove() is called. Fix this by removing all kfree(info->apertures) calls in hvfb_getmem(). This will allow framebuffer_release() to free the memory, which follows the pattern of other fbdev drivers. Fixes:3a6fb6c425("video: hyperv: hyperv_fb: Use physical memory for fb on HyperV Gen 1 VMs.") Signed-off-by: Lv Yunlong <lyl2019@mail.ustc.edu.cn> Reviewed-by: Michael Kelley <mikelley@microsoft.com> Link: https://lore.kernel.org/r/20210324103724.4189-1-lyl2019@mail.ustc.edu.cn Signed-off-by: Wei Liu <wei.liu@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a267a7e1c0
commit
2c7d850263
|
|
@ -1031,7 +1031,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
|
|||
PCI_DEVICE_ID_HYPERV_VIDEO, NULL);
|
||||
if (!pdev) {
|
||||
pr_err("Unable to find PCI Hyper-V video\n");
|
||||
kfree(info->apertures);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
|
|
@ -1129,7 +1128,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
|
|||
} else {
|
||||
pci_dev_put(pdev);
|
||||
}
|
||||
kfree(info->apertures);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -1141,7 +1139,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
|
|||
err1:
|
||||
if (!gen2vm)
|
||||
pci_dev_put(pdev);
|
||||
kfree(info->apertures);
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user