Skip to content

Commit cac5fce

Browse files
heinzelottodanvet
authored andcommitted
drm: Release reference from blob lookup after replacing property
drm_property_lookup_blob() returns a reference to the returned blob, and drm_atomic_replace_property_blob() takes a references to the blob it stores, so afterwards we are left owning a reference to the new_blob that we never release, and thus leak memory every time we update a property such as during drm_atomic_helper_legacy_gamma_set(). v2: update credentials, drm_property_unreference_blob() is NULL safe and NULL is passed consistently to it throughout drm_atomic.c so do so here. Reported-by: Felix Monninger <felix.monninger@gmail.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98420 Signed-off-by: Felix Monninger <felix.monninger@gmail.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: stable@vger.kernel.org Fixes: 5488dc1 ("drm: introduce pipe color correction properties") Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/20161025212808.3908-1-chris@chris-wilson.co.uk
1 parent 07d9a38 commit cac5fce

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

drivers/gpu/drm/drm_atomic.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,18 +420,21 @@ drm_atomic_replace_property_blob_from_id(struct drm_crtc *crtc,
420420
ssize_t expected_size,
421421
bool *replaced)
422422
{
423-
struct drm_device *dev = crtc->dev;
424423
struct drm_property_blob *new_blob = NULL;
425424

426425
if (blob_id != 0) {
427-
new_blob = drm_property_lookup_blob(dev, blob_id);
426+
new_blob = drm_property_lookup_blob(crtc->dev, blob_id);
428427
if (new_blob == NULL)
429428
return -EINVAL;
430-
if (expected_size > 0 && expected_size != new_blob->length)
429+
430+
if (expected_size > 0 && expected_size != new_blob->length) {
431+
drm_property_unreference_blob(new_blob);
431432
return -EINVAL;
433+
}
432434
}
433435

434436
drm_atomic_replace_property_blob(blob, new_blob, replaced);
437+
drm_property_unreference_blob(new_blob);
435438

436439
return 0;
437440
}

0 commit comments

Comments
 (0)