| From foo@baz Sun Jun 17 12:07:34 CEST 2018 |
| From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| Date: Wed, 2 May 2018 12:11:59 +0300 |
| Subject: drm/omap: handle alloc failures in omap_connector |
| |
| From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| |
| [ Upstream commit 47aaaec818dfd1009d1358974a2931f05dd57203 ] |
| |
| Handle memory allocation failures in omap_connector to avoid NULL |
| derefs. |
| |
| Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20180502091159.7071-5-tomi.valkeinen@ti.com |
| Reviewed-by: Benoit Parrot <bparrot@ti.com> |
| Reviewed-by: Peter Ujfalusi <peter.ujfalusi@ti.com> |
| Signed-off-by: Sean Paul <seanpaul@chromium.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpu/drm/omapdrm/omap_connector.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/drivers/gpu/drm/omapdrm/omap_connector.c |
| +++ b/drivers/gpu/drm/omapdrm/omap_connector.c |
| @@ -121,6 +121,9 @@ static int omap_connector_get_modes(stru |
| if (dssdrv->read_edid) { |
| void *edid = kzalloc(MAX_EDID, GFP_KERNEL); |
| |
| + if (!edid) |
| + return 0; |
| + |
| if ((dssdrv->read_edid(dssdev, edid, MAX_EDID) > 0) && |
| drm_edid_is_valid(edid)) { |
| drm_mode_connector_update_edid_property( |
| @@ -139,6 +142,9 @@ static int omap_connector_get_modes(stru |
| struct drm_display_mode *mode = drm_mode_create(dev); |
| struct videomode vm = {0}; |
| |
| + if (!mode) |
| + return 0; |
| + |
| dssdrv->get_timings(dssdev, &vm); |
| |
| drm_display_mode_from_videomode(&vm, mode); |
| @@ -200,6 +206,10 @@ static int omap_connector_mode_valid(str |
| if (!r) { |
| /* check if vrefresh is still valid */ |
| new_mode = drm_mode_duplicate(dev, mode); |
| + |
| + if (!new_mode) |
| + return MODE_BAD; |
| + |
| new_mode->clock = vm.pixelclock / 1000; |
| new_mode->vrefresh = 0; |
| if (mode->vrefresh == drm_mode_vrefresh(new_mode)) |