Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm: fix memory leak around mode_group (v2)

This mode group id_list was never being freed.

v2: take David's suggestion to free in minor_free.

Signed-off-by: Dave Airlie <airlied@redhat.com>

+8
+6
drivers/gpu/drm/drm_crtc.c
··· 1378 1378 return 0; 1379 1379 } 1380 1380 1381 + void drm_mode_group_destroy(struct drm_mode_group *group) 1382 + { 1383 + kfree(group->id_list); 1384 + group->id_list = NULL; 1385 + } 1386 + 1381 1387 /* 1382 1388 * NOTE: Driver's shouldn't ever call drm_mode_group_init_legacy_group - it is 1383 1389 * the drm core's responsibility to set up mode control groups.
+1
drivers/gpu/drm/drm_stub.c
··· 294 294 295 295 slot = drm_minor_get_slot(dev, type); 296 296 if (*slot) { 297 + drm_mode_group_destroy(&(*slot)->mode_group); 297 298 kfree(*slot); 298 299 *slot = NULL; 299 300 }
+1
include/drm/drm_crtc.h
··· 915 915 extern const char *drm_get_tv_select_name(int val); 916 916 extern void drm_fb_release(struct drm_file *file_priv); 917 917 extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group); 918 + extern void drm_mode_group_destroy(struct drm_mode_group *group); 918 919 extern bool drm_probe_ddc(struct i2c_adapter *adapter); 919 920 extern struct edid *drm_get_edid(struct drm_connector *connector, 920 921 struct i2c_adapter *adapter);