diff options
author | Mathieu Malaterre <malat@debian.org> | 2018-03-12 17:06:54 +0100 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> | 2018-03-12 17:06:54 +0100 |
commit | 9cbaf4d969ec4f5eb7a4e97afade374ee8056ef1 (patch) | |
tree | fa98decdd4ec07cccfa38d855ef2a1fd4c12ffec /drivers/video | |
parent | 069ee21a8234459473b238e65701d2e79c194ec7 (diff) |
video: offb: Deallocate the color map
The function offb_destroy did not deallocate the color map leaving some
memory around after destruction. Call the color map deallocate function to
remove the memory leak.
Handle another case where color map should have been deallocated during an
error code path.
Fix memory leaks reported by kmemleak:
# dmesg
...
[ 1884.719941] kmemleak: 3 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
# cat /sys/kernel/debug/kmemleak
unreferenced object 0xde3d9000 (size 512):
comm "swapper", pid 1, jiffies 4294892827 (age 1906.784s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 aa aa aa aa aa aa aa aa ................
55 55 55 55 55 55 55 55 ff ff ff ff ff ff ff ff UUUUUUUU........
backtrace:
[<f1433400>] fb_alloc_cmap_gfp+0x54/0x15c
[<cb6b409b>] offb_init_nodriver+0x8e8/0xa3c
[<b5a1c019>] offb_init+0xd0/0x164
[<322f82a3>] do_one_initcall+0x4c/0x178
[<b592db9f>] kernel_init_freeable+0x138/0x1cc
[<2a17fa0e>] kernel_init+0x24/0x118
[<4079749a>] ret_from_kernel_thread+0x5c/0x64
unreferenced object 0xde3d9200 (size 512):
comm "swapper", pid 1, jiffies 4294892827 (age 1906.784s)
hex dump (first 32 bytes):
00 00 00 00 aa aa aa aa 00 00 00 00 55 55 aa aa ............UU..
55 55 55 55 ff ff ff ff 55 55 55 55 ff ff ff ff UUUU....UUUU....
backtrace:
[<4bf3594d>] fb_alloc_cmap_gfp+0x6c/0x15c
[<cb6b409b>] offb_init_nodriver+0x8e8/0xa3c
[<b5a1c019>] offb_init+0xd0/0x164
[<322f82a3>] do_one_initcall+0x4c/0x178
[<b592db9f>] kernel_init_freeable+0x138/0x1cc
[<2a17fa0e>] kernel_init+0x24/0x118
[<4079749a>] ret_from_kernel_thread+0x5c/0x64
unreferenced object 0xde3d9600 (size 512):
comm "swapper", pid 1, jiffies 4294892827 (age 1906.784s)
hex dump (first 32 bytes):
00 00 aa aa 00 00 aa aa 00 00 aa aa 00 00 aa aa ................
55 55 ff ff 55 55 ff ff 55 55 ff ff 55 55 ff ff UU..UU..UU..UU..
backtrace:
[<23a3ea03>] fb_alloc_cmap_gfp+0x84/0x15c
[<cb6b409b>] offb_init_nodriver+0x8e8/0xa3c
[<b5a1c019>] offb_init+0xd0/0x164
[<322f82a3>] do_one_initcall+0x4c/0x178
[<b592db9f>] kernel_init_freeable+0x138/0x1cc
[<2a17fa0e>] kernel_init+0x24/0x118
[<4079749a>] ret_from_kernel_thread+0x5c/0x64
Signed-off-by: Mathieu Malaterre <malat@debian.org>
Cc: Rob Herring <robh@kernel.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/fbdev/offb.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/video/fbdev/offb.c b/drivers/video/fbdev/offb.c index 90d38de34479..77c0a2f45b3b 100644 --- a/drivers/video/fbdev/offb.c +++ b/drivers/video/fbdev/offb.c @@ -280,6 +280,7 @@ static void offb_destroy(struct fb_info *info) if (info->screen_base) iounmap(info->screen_base); release_mem_region(info->apertures->ranges[0].base, info->apertures->ranges[0].size); + fb_dealloc_cmap(&info->cmap); framebuffer_release(info); } @@ -518,6 +519,7 @@ static void __init offb_init_fb(const char *name, return; out_err: + fb_dealloc_cmap(&info->cmap); iounmap(info->screen_base); out_aper: iounmap(par->cmap_adr); |