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>
This commit is contained in:
parent
444c9a08bf
commit
ad222799be
3 changed files with 8 additions and 0 deletions
|
@ -1378,6 +1378,12 @@ static int drm_mode_group_init(struct drm_device *dev, struct drm_mode_group *gr
|
|||
return 0;
|
||||
}
|
||||
|
||||
void drm_mode_group_destroy(struct drm_mode_group *group)
|
||||
{
|
||||
kfree(group->id_list);
|
||||
group->id_list = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: Driver's shouldn't ever call drm_mode_group_init_legacy_group - it is
|
||||
* the drm core's responsibility to set up mode control groups.
|
||||
|
|
|
@ -294,6 +294,7 @@ static void drm_minor_free(struct drm_device *dev, unsigned int type)
|
|||
|
||||
slot = drm_minor_get_slot(dev, type);
|
||||
if (*slot) {
|
||||
drm_mode_group_destroy(&(*slot)->mode_group);
|
||||
kfree(*slot);
|
||||
*slot = NULL;
|
||||
}
|
||||
|
|
|
@ -915,6 +915,7 @@ extern const char *drm_get_tv_subconnector_name(int val);
|
|||
extern const char *drm_get_tv_select_name(int val);
|
||||
extern void drm_fb_release(struct drm_file *file_priv);
|
||||
extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_mode_group *group);
|
||||
extern void drm_mode_group_destroy(struct drm_mode_group *group);
|
||||
extern bool drm_probe_ddc(struct i2c_adapter *adapter);
|
||||
extern struct edid *drm_get_edid(struct drm_connector *connector,
|
||||
struct i2c_adapter *adapter);
|
||||
|
|
Loading…
Reference in a new issue