Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934832AbcKKRSG (ORCPT ); Fri, 11 Nov 2016 12:18:06 -0500 Received: from mailapp01.imgtec.com ([195.59.15.196]:55824 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934676AbcKKRSF (ORCPT ); Fri, 11 Nov 2016 12:18:05 -0500 Date: Fri, 11 Nov 2016 17:17:49 +0000 From: Eric Engestrom To: Colin King CC: David Airlie , , Subject: Re: [PATCH] drm/atomic: fix memory leak when fetching format name Message-ID: <20161111171749.GA6891@imgtec.com> References: <20161111162622.21119-1-colin.king@canonical.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline In-Reply-To: <20161111162622.21119-1-colin.king@canonical.com> User-Agent: Mutt/1.7.1 (2016-10-04) X-Originating-IP: [10.60.4.28] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1652 Lines: 46 On Friday, 2016-11-11 16:26:22 +0000, Colin King wrote: > From: Colin Ian King > > drm_get_format_name allocates memory that is not currently free'd > when printing the state. Fix this by kfree'ing the memory after > use. You are correct, but there are more cases of this, and another fix has been chosen. See this patch [1] for the fix and the rest of that thread [2] for the discussion. I'll send v4 (rebase and a missed `const`) as soon as I have the time, but the usage will remain the same as in v3. Cheers, Eric [1] https://lists.freedesktop.org/archives/dri-devel/2016-November/123250.html [2] https://lists.freedesktop.org/archives/dri-devel/2016-November/thread.html#122845 > > Signed-off-by: Colin Ian King > --- > drivers/gpu/drm/drm_atomic.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index f5ea7db..1d5e86a 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -917,9 +917,10 @@ static void drm_atomic_plane_print_state(struct drm_printer *p, > if (state->fb) { > struct drm_framebuffer *fb = state->fb; > int i, n = drm_format_num_planes(fb->pixel_format); > + char *format_name = drm_get_format_name(fb->pixel_format); > > - drm_printf(p, "\t\tformat=%s\n", > - drm_get_format_name(fb->pixel_format)); > + drm_printf(p, "\t\tformat=%s\n", format_name); > + kfree(format_name); > drm_printf(p, "\t\tsize=%dx%d\n", fb->width, fb->height); > drm_printf(p, "\t\tlayers:\n"); > for (i = 0; i < n; i++) { > -- > 2.10.2 >