Skip to content

Commit

Permalink
staging: xgifb: prevent video RAM size exceeding PCI window size
Browse files Browse the repository at this point in the history
Add a sanity check for the video RAM size. It should fit into the
PCI window.

Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Aaro Koskinen authored and Greg Kroah-Hartman committed Sep 12, 2012
1 parent a09f347 commit 6b2a7e0
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions drivers/staging/xgifb/XGI_main_26.c
Original file line number Diff line number Diff line change
Expand Up @@ -1700,6 +1700,7 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
struct fb_info *fb_info;
struct xgifb_video_info *xgifb_info;
struct xgi_hw_device_info *hw_info;
unsigned long video_size_max;

fb_info = framebuffer_alloc(sizeof(*xgifb_info), &pdev->dev);
if (!fb_info)
Expand All @@ -1720,6 +1721,7 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
xgifb_info->subsysvendor = pdev->subsystem_vendor;
xgifb_info->subsysdevice = pdev->subsystem_device;

video_size_max = pci_resource_len(pdev, 0);
xgifb_info->video_base = pci_resource_start(pdev, 0);
xgifb_info->mmio_base = pci_resource_start(pdev, 1);
xgifb_info->mmio_size = pci_resource_len(pdev, 1);
Expand Down Expand Up @@ -1780,6 +1782,8 @@ static int __devinit xgifb_probe(struct pci_dev *pdev,
"Fatal error: Unable to determine RAM size.\n");
ret = -ENODEV;
goto error_disable;
} else if (xgifb_info->video_size > video_size_max) {
xgifb_info->video_size = video_size_max;
}

/* Enable PCI_LINEAR_ADDRESSING and MMIO_ENABLE */
Expand Down

0 comments on commit 6b2a7e0

Please sign in to comment.