| From 0f23cc2fa3a7e1612b7dd8658e5d98379437d16c Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 29 Apr 2020 13:42:32 +0300 |
| Subject: drm/tilcdc: fix leak & null ref in panel_connector_get_modes |
| |
| From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| |
| [ Upstream commit 3f9c1c872cc97875ddc8d63bc9fe6ee13652b933 ] |
| |
| If videomode_from_timings() returns true, the mode allocated with |
| drm_mode_create will be leaked. |
| |
| Also, the return value of drm_mode_create() is never checked, and thus |
| could cause NULL deref. |
| |
| Fix these two issues. |
| |
| Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20200429104234.18910-1-tomi.valkeinen@ti.com |
| Reviewed-by: Jyri Sarha <jsarha@ti.com> |
| Acked-by: Sam Ravnborg <sam@ravnborg.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/tilcdc/tilcdc_panel.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c |
| index 5584e656b8575..8c4fd1aa4c2db 100644 |
| --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c |
| +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c |
| @@ -143,12 +143,16 @@ static int panel_connector_get_modes(struct drm_connector *connector) |
| int i; |
| |
| for (i = 0; i < timings->num_timings; i++) { |
| - struct drm_display_mode *mode = drm_mode_create(dev); |
| + struct drm_display_mode *mode; |
| struct videomode vm; |
| |
| if (videomode_from_timings(timings, &vm, i)) |
| break; |
| |
| + mode = drm_mode_create(dev); |
| + if (!mode) |
| + break; |
| + |
| drm_display_mode_from_videomode(&vm, mode); |
| |
| mode->type = DRM_MODE_TYPE_DRIVER; |
| -- |
| 2.25.1 |
| |