drm/fb_helper: Fix potential NULL pointer dereference
authorSachin Kamat <sachin.kamat@linaro.org>
Mon, 19 Nov 2012 09:44:58 +0000 (09:44 +0000)
committerDave Airlie <airlied@redhat.com>
Tue, 20 Nov 2012 05:40:56 +0000 (15:40 +1000)
kcalloc returns NULL on failure. Hence check for the return value
and exit on error to avoid NULL pointer dereference.

Fixes the following smatch errors:
drivers/gpu/drm/drm_fb_helper.c:1271 drm_setup_crtcs() error:
potential null dereference 'modes'.  (kcalloc returns null)
drivers/gpu/drm/drm_fb_helper.c:1272 drm_setup_crtcs() error:
potential null dereference 'crtcs'.  (kcalloc returns null)

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/drm_fb_helper.c

index 8c2de020e8eb7e743c1d7557435c2703d6f27d04..2c44af691e98e1953582ba1177cf03961ba21961 100644 (file)
@@ -1251,6 +1251,11 @@ static void drm_setup_crtcs(struct drm_fb_helper *fb_helper)
                        sizeof(struct drm_display_mode *), GFP_KERNEL);
        enabled = kcalloc(dev->mode_config.num_connector,
                          sizeof(bool), GFP_KERNEL);
+       if (!crtcs || !modes || !enabled) {
+               DRM_ERROR("Memory allocation failed\n");
+               goto out;
+       }
+
 
        drm_enable_connectors(fb_helper, enabled);
 
@@ -1289,6 +1294,7 @@ static void drm_setup_crtcs(struct drm_fb_helper *fb_helper)
                }
        }
 
+out:
        kfree(crtcs);
        kfree(modes);
        kfree(enabled);