Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] The return value of `request_mem_region` for `cmap_regs_phys` is ignored, and the error path unconditionally calls `release_mem_region` on it.
--
--- Patch [1]: [PATCH] fbdev: platinumfb: add error checking for ioremap calls ---
commit 71a977c44688a9c49d5d28cb513b56fa5a810a1d
Author: yuebingkun <[email protected]>
fbdev: platinumfb: add error checking for ioremap calls
This commit adds error checking for ioremap() and ioremap_wt() calls in
platinumfb_probe() to prevent NULL pointer dereferences. It also transitions
the function to use goto-based cleanup for handling initialization failures.
> diff --git a/drivers/video/fbdev/platinumfb.c b/drivers/video/fbdev/platinumfb.c
> index a08d955d9b439..f74c937c839f8 100644
> --- a/drivers/video/fbdev/platinumfb.c
> +++ b/drivers/video/fbdev/platinumfb.c
[ ... ]
> @@ -623,13 +638,22 @@ static int platinumfb_probe(struct platform_device* odev)
> dev_set_drvdata(&odev->dev, info);
>
> rc = platinum_init_fb(info);
> - if (rc != 0) {
> - iounmap(pinfo->frame_buffer);
> - iounmap(pinfo->platinum_regs);
> - iounmap(pinfo->cmap_regs);
> - framebuffer_release(info);
> - }
> + if (rc != 0)
> + goto err_unmap_cmap;
> +
> + return 0;
>
> +err_unmap_cmap:
> + iounmap(pinfo->cmap_regs);
> +err_release_cmap:
> + release_mem_region(pinfo->cmap_regs_phys, 0x1000);
[Severity: High]
This is a pre-existing issue, but by adding this new error path, the code
propagates an unsafe assumption.
Earlier in platinumfb_probe(), the return value of request_mem_region()
is ignored:
request_mem_region(pinfo->cmap_regs_phys, 0x1000, "platinumfb cmap");
pinfo->cmap_regs = ioremap(pinfo->cmap_regs_phys, 0x1000);
If request_mem_region() fails (for instance, if the region is already
claimed), execution continues. If a subsequent step like ioremap() or
platinum_init_fb() then fails, the code will jump to this newly added
err_release_cmap label and unconditionally release the region.
Because __release_region() searches by address and doesn't verify the caller,
could this forcefully free an I/O memory region that actually belongs to
another driver, potentially leading to resource tree corruption or a
use-after-free?
> +err_unmap_regs:
> + iounmap(pinfo->platinum_regs);
> +err_unmap_fb:
> + iounmap(pinfo->frame_buffer);
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.