[PATCH] xfree86/modes: Fixed memory leak in xf86InitialConfiguration

Peter Hutterer peter.hutterer at who-t.net
Tue Mar 8 21:02:01 PST 2011


On Tue, Mar 08, 2011 at 01:11:50PM +0200, Erkki Seppälä wrote:
> There were two memory leaks in the function: one was the lack of free
> for "enabled", the other was the full lack of releasing anything when
> configuration was too small. The first issue was fixed by adding the
> missing free, the other was addressed by replacing the duplicate
> memory releasing sequences with one that is gotoed into.
> 
> Reviewed-by: Rami Ylimäki <rami.ylimaki at vincit.fi>
> Signed-off-by: Erkki Seppälä <erkki.seppala at vincit.fi>

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
  Peter





> ---
>  hw/xfree86/modes/xf86Crtc.c |   21 ++++++++-------------
>  1 files changed, 8 insertions(+), 13 deletions(-)
> 
> diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
> index 9a5e50a..7eaecdb 100644
> --- a/hw/xfree86/modes/xf86Crtc.c
> +++ b/hw/xfree86/modes/xf86Crtc.c
> @@ -2353,6 +2353,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
>      int			i = scrn->scrnIndex;
>      Bool have_outputs = TRUE;
>      Bool ret;
> +    Bool success = FALSE;
>  
>      /* Set up the device options */
>      config->options = xnfalloc (sizeof (xf86DeviceOptions));
> @@ -2411,11 +2412,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
>       * Set the position of each output
>       */
>      if (!xf86InitialOutputPositions (scrn, modes))
> -    {
> -	free(crtcs);
> -	free(modes);
> -	return FALSE;
> -    }
> +	goto bailout;
>  
>      /*
>       * Set initial panning of each output
> @@ -2426,11 +2423,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
>       * Assign CRTCs to fit output configuration
>       */
>      if (have_outputs && !xf86PickCrtcs (scrn, crtcs, modes, 0, width, height))
> -    {
> -	free(crtcs);
> -	free(modes);
> -	return FALSE;
> -    }
> +	goto bailout;
>      
>      /* XXX override xf86 common frame computation code */
>      
> @@ -2507,7 +2500,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
>       * Make sure the configuration isn't too small.
>       */
>      if (width < config->minWidth || height < config->minHeight)
> -	return FALSE;
> +	goto bailout;
>  
>      /*
>       * Limit the crtc config to virtual[XY] if the driver can't grow the
> @@ -2530,10 +2523,12 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
>  				   xf86CVTMode(width, height, 60, 0, 0));
>      }
>  
> -    
> +    success = TRUE;
> + bailout:
>      free(crtcs);
>      free(modes);
> -    return TRUE;
> +    free(enabled);
> +    return success;
>  }
>  
>  /*
> -- 
> 1.7.0.4
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 


More information about the xorg-devel mailing list