[PATCH 1/2] drm/client: Fix memory leak in drm_client_target_cloned
Thomas Zimmermann
tzimmermann at suse.de
Tue Jul 11 09:44:36 UTC 2023
Am 11.07.23 um 11:20 schrieb Jocelyn Falempe:
> dmt_mode is allocated and never freed in this function.
> It was found with the ast driver, but most drivers using generic fbdev
> setup are probably affected.
>
> This fixes the following kmemleak report:
> backtrace:
> [<00000000b391296d>] drm_mode_duplicate+0x45/0x220 [drm]
> [<00000000e45bb5b3>] drm_client_target_cloned.constprop.0+0x27b/0x480 [drm]
> [<00000000ed2d3a37>] drm_client_modeset_probe+0x6bd/0xf50 [drm]
> [<0000000010e5cc9d>] __drm_fb_helper_initial_config_and_unlock+0xb4/0x2c0 [drm_kms_helper]
> [<00000000909f82ca>] drm_fbdev_client_hotplug+0x2bc/0x4d0 [drm_kms_helper]
> [<00000000063a69aa>] drm_client_register+0x169/0x240 [drm]
> [<00000000a8c61525>] ast_pci_probe+0x142/0x190 [ast]
> [<00000000987f19bb>] local_pci_probe+0xdc/0x180
> [<000000004fca231b>] work_for_cpu_fn+0x4e/0xa0
> [<0000000000b85301>] process_one_work+0x8b7/0x1540
> [<000000003375b17c>] worker_thread+0x70a/0xed0
> [<00000000b0d43cd9>] kthread+0x29f/0x340
> [<000000008d770833>] ret_from_fork+0x1f/0x30
> unreferenced object 0xff11000333089a00 (size 128):
>
> cc: <stable at vger.kernel.org>
> Fixes: 1d42bbc8f7f9 ("drm/fbdev: fix cloning on fbcon")
> Reported-by: Zhang Yi <yizhan at redhat.com>
> Signed-off-by: Jocelyn Falempe <jfalempe at redhat.com>
Reviewed-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
> drivers/gpu/drm/drm_client_modeset.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c
> index 1b12a3c201a3..a4a62aa99984 100644
> --- a/drivers/gpu/drm/drm_client_modeset.c
> +++ b/drivers/gpu/drm/drm_client_modeset.c
> @@ -311,6 +311,9 @@ static bool drm_client_target_cloned(struct drm_device *dev,
> can_clone = true;
> dmt_mode = drm_mode_find_dmt(dev, 1024, 768, 60, false);
>
> + if (!dmt_mode)
> + goto fail;
> +
> for (i = 0; i < connector_count; i++) {
> if (!enabled[i])
> continue;
> @@ -326,11 +329,13 @@ static bool drm_client_target_cloned(struct drm_device *dev,
> if (!modes[i])
> can_clone = false;
> }
> + kfree(dmt_mode);
>
> if (can_clone) {
> DRM_DEBUG_KMS("can clone using 1024x768\n");
> return true;
> }
> +fail:
> DRM_INFO("kms: can't enable cloning when we probably wanted to.\n");
> return false;
> }
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20230711/a189bcf3/attachment.sig>
More information about the dri-devel
mailing list