From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Emde Subject: Re: [PATCH] drm/edid: Fix potential memory leak in edid_load() Date: Tue, 07 Aug 2012 20:01:59 +0200 Message-ID: <50215817.6070009@osadl.org> References: <1344342186-6561-1-git-send-email-khoroshilov@ispras.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1344342186-6561-1-git-send-email-khoroshilov@ispras.ru> Sender: linux-kernel-owner@vger.kernel.org To: Alexey Khoroshilov Cc: David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, ldv-project@ispras.ru List-Id: dri-devel@lists.freedesktop.org On 08/07/2012 02:23 PM, Alexey Khoroshilov wrote: > Do not leak memory by updating pointer with potentially > NULL realloc return value. > > Found by Linux Driver Verification project (linuxtesting.org). Thanks, Alexey! Reviewed-by: Carsten Emde > Signed-off-by: Alexey Khoroshilov > --- > drivers/gpu/drm/drm_edid_load.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/drm_edid_load.c b/drivers/gpu/drm/drm_edid_load.c > index 66d4a28..0303935 100644 > --- a/drivers/gpu/drm/drm_edid_load.c > +++ b/drivers/gpu/drm/drm_edid_load.c > @@ -119,7 +119,7 @@ static int edid_load(struct drm_connector *connector, char *name, > { > const struct firmware *fw; > struct platform_device *pdev; > - u8 *fwdata = NULL, *edid; > + u8 *fwdata = NULL, *edid, *new_edid; > int fwsize, expected; > int builtin = 0, err = 0; > int i, valid_extensions = 0; > @@ -195,12 +195,14 @@ static int edid_load(struct drm_connector *connector, char *name, > "\"%s\" for connector \"%s\"\n", valid_extensions, > edid[0x7e], name, connector_name); > edid[0x7e] = valid_extensions; > - edid = krealloc(edid, (valid_extensions + 1) * EDID_LENGTH, > + new_edid = krealloc(edid, (valid_extensions + 1) * EDID_LENGTH, > GFP_KERNEL); > - if (edid == NULL) { > + if (new_edid == NULL) { > err = -ENOMEM; > + kfree(edid); > goto relfw_out; > } > + edid = new_edid; > } > > connector->display_info.raw_edid = edid;