[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] vnc: severe memory leak caused by broken palette_destro
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] vnc: severe memory leak caused by broken palette_destroy() function |
Date: |
Mon, 21 Mar 2011 12:33:48 +0000 |
On Mon, Mar 21, 2011 at 11:52 AM, Ulrich Obergfell <address@hidden> wrote:
>
> The following commit breaks the code of the function palette_destroy().
>
> http://git.kernel.org/?p=virt/kvm/qemu-kvm.git;a=commit;h=e31e3694afef58ba191cbcc6875ec243e5971268
>
> The broken code causes a severe memory leak of 'VncPalette' structures
> because it never frees anything:
>
> 70 void palette_destroy(VncPalette *palette)
> 71 {
> 72 if (palette == NULL) {
> 73 qemu_free(palette);
> 74 }
> 75 }
>
> Calling qemu_free() unconditionally could be considered. However,
> the original code (prior to the aforementioned commit) returned
> immediately if 'palette' was NULL. In order to be closer to the
> original code, the proposed patch corrects the 'if' statement.
>
> Signed-off-by: Ulrich Obergfell <address@hidden>
>
>
> diff -up ./ui/vnc-palette.c.orig0 ./ui/vnc-palette.c
> --- ./ui/vnc-palette.c.orig0 2011-03-15 03:53:22.000000000 +0100
> +++ ./ui/vnc-palette.c 2011-03-20 11:52:57.257560295 +0100
> @@ -69,7 +69,7 @@ void palette_init(VncPalette *palette, s
>
> void palette_destroy(VncPalette *palette)
> {
> - if (palette == NULL) {
> + if (palette) {
> qemu_free(palette);
> }
> }
Please drop the if (palette) check entirely because qemu_free(NULL) is
a nop. There's no need to perform this check at all.
Stefan