Re: [PATCH v2] drm: Release reference from blob lookup after replacing property

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 26, 2016 at 10:48:07AM +0300, Ville Syrjälä wrote:
> On Tue, Oct 25, 2016 at 10:28:08PM +0100, Chris Wilson wrote:
> > From: Felix Monninger <felix.monninger@xxxxxxxxx>
> > 
> > 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@xxxxxxxxx>
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98420
> > Signed-off-by: Felix Monninger <felix.monninger@xxxxxxxxx>
> > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> 
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: 5488dc16fde7 ("drm: introduce pipe color correction properties")
> Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> 
> The single return path bikeshed looked OK to me too, so my r-b can
> be applied there as well, if people prefer that version.

Applied to drm-misc-fixes (yes I'm trying out something new).
-Daniel

> 
> > ---
> >  drivers/gpu/drm/drm_atomic.c | 9 ++++++---
> >  1 file changed, 6 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> > index 1b5a32df9a9a..e0760c138355 100644
> > --- a/drivers/gpu/drm/drm_atomic.c
> > +++ b/drivers/gpu/drm/drm_atomic.c
> > @@ -416,18 +416,21 @@ drm_atomic_replace_property_blob_from_id(struct drm_crtc *crtc,
> >  					 ssize_t expected_size,
> >  					 bool *replaced)
> >  {
> > -	struct drm_device *dev = crtc->dev;
> >  	struct drm_property_blob *new_blob = NULL;
> >  
> >  	if (blob_id != 0) {
> > -		new_blob = drm_property_lookup_blob(dev, blob_id);
> > +		new_blob = drm_property_lookup_blob(crtc->dev, blob_id);
> >  		if (new_blob == NULL)
> >  			return -EINVAL;
> > -		if (expected_size > 0 && expected_size != new_blob->length)
> > +
> > +		if (expected_size > 0 && expected_size != new_blob->length) {
> > +			drm_property_unreference_blob(new_blob);
> >  			return -EINVAL;
> > +		}
> >  	}
> >  
> >  	drm_atomic_replace_property_blob(blob, new_blob, replaced);
> > +	drm_property_unreference_blob(new_blob);
> >  
> >  	return 0;
> >  }
> > -- 
> > 2.10.1
> > 
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@xxxxxxxxxxxxxxxxxxxxx
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
> -- 
> Ville Syrjälä
> Intel OTC
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux