[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