fb_add_videomode() can fail with -ENOMEM when its internal kmalloc()
cannot allocate a struct fb_modelist.
If that happens, the modelist stays empty but the driver continues to
register.
Add a check for its return value to prevent poteintial null-ptr-deref,
which is similar to the commit 17186f1f90d3
("fbdev: Fix do_register_framebuffer to prevent null-ptr-deref in 
fb_videomode_to_var").

Fixes: 1b6c79361ba5 ("video: imxfb: Add DT support")
Signed-off-by: Chenyuan Yang <[email protected]>
---
 drivers/video/fbdev/imxfb.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c
index f30da32cdaed..a077bf346bdf 100644
--- a/drivers/video/fbdev/imxfb.c
+++ b/drivers/video/fbdev/imxfb.c
@@ -996,8 +996,13 @@ static int imxfb_probe(struct platform_device *pdev)
        info->fix.smem_start = fbi->map_dma;
 
        INIT_LIST_HEAD(&info->modelist);
-       for (i = 0; i < fbi->num_modes; i++)
-               fb_add_videomode(&fbi->mode[i].mode, &info->modelist);
+       for (i = 0; i < fbi->num_modes; i++) {
+               ret = fb_add_videomode(&fbi->mode[i].mode, &info->modelist);
+               if (ret) {
+                       dev_err(&pdev->dev, "Failed to add videomode\n");
+                       goto failed_cmap;
+               }
+       }
 
        /*
         * This makes sure that our colour bitfield
-- 
2.34.1

Reply via email to