Commit 1dda6805 authored by YoungJun Cho's avatar YoungJun Cho Committed by Dave Airlie

drm: delete unconsumed pending event list in drm_events_release

When there are unconsumed pending events, the events are
destroyed by calling destroy callback, but the events list
are remained, because there is no list_del().

It is possible that the page flip request is handled after
drm_events_release() is called and before drm_fb_release().
In this case a drm_pending_event is remained not freed.
So exynos driver checks again to remove it in its post
close routine. But the file_priv->event_list contains
undeleted ones, this can make oops for accessing invalid
memory.
Signed-off-by: default avatarYoungJun Cho <yj44.cho@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 06c5bf8c
...@@ -378,8 +378,10 @@ static void drm_events_release(struct drm_file *file_priv) ...@@ -378,8 +378,10 @@ static void drm_events_release(struct drm_file *file_priv)
} }
/* Remove unconsumed events */ /* Remove unconsumed events */
list_for_each_entry_safe(e, et, &file_priv->event_list, link) list_for_each_entry_safe(e, et, &file_priv->event_list, link) {
list_del(&e->link);
e->destroy(e); e->destroy(e);
}
spin_unlock_irqrestore(&dev->event_lock, flags); spin_unlock_irqrestore(&dev->event_lock, flags);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment