68328fb: fix cmap memory leaks
authorAndres Salomon <dilinger@queued.net>
Tue, 31 Mar 2009 22:25:28 +0000 (15:25 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 Apr 2009 15:59:31 +0000 (08:59 -0700)
- fix cmap leak in removal path

- fix cmap leak when register_framebuffer fails

- check return value of fb_alloc_cmap

Signed-off-by: Andres Salomon <dilinger@debian.org>
Acked-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/video/68328fb.c

index 7f907fb23b8a3414044eee2b8363b63f340ba1d7..0b17824b0eb5b3aa0db0772b76dc6f19b07e2be4 100644 (file)
@@ -471,9 +471,11 @@ int __init mc68x328fb_init(void)
        fb_info.pseudo_palette = &mc68x328fb_pseudo_palette;
        fb_info.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
 
-       fb_alloc_cmap(&fb_info.cmap, 256, 0);
+       if (fb_alloc_cmap(&fb_info.cmap, 256, 0))
+               return -ENOMEM;
 
        if (register_framebuffer(&fb_info) < 0) {
+               fb_dealloc_cmap(&fb_info.cmap);
                return -EINVAL;
        }
 
@@ -494,6 +496,7 @@ module_init(mc68x328fb_init);
 static void __exit mc68x328fb_cleanup(void)
 {
        unregister_framebuffer(&fb_info);
+       fb_dealloc_cmap(&fb_info.cmap);
 }
 
 module_exit(mc68x328fb_cleanup);