From 106b5fa700bd1ff422382dc907d1ca97f0c3972d Mon Sep 17 00:00:00 2001 From: Zeng Zhaoming Date: Tue, 20 Dec 2011 19:30:05 +0800 Subject: tty: Fix memory leak in virtual console when enable unicode translation Virtual console unicode translation map leaks with following message when enable kmemleak: unreferenced object 0xeb5ec450 (size 192): comm "setfont", pid 665, jiffies 4294899028 (age 3696.220s) hex dump (first 32 bytes): e0 5b 9d eb 00 00 00 00 00 00 00 00 80 b9 ea eb .[.............. b0 5a 9d eb 00 00 00 00 00 00 00 00 00 00 00 00 .Z.............. backtrace: [] kmemleak_alloc+0x3c/0xa0 [] kmem_cache_alloc_trace+0xe2/0x250 [] con_clear_unimap+0x78/0xd0 [] vt_ioctl+0x1562/0x1d00 [] tty_ioctl+0x230/0x7c0 [] do_vfs_ioctl+0x79/0x2d0 [] sys_ioctl+0x6f/0x80 [] sysenter_do_call+0x12/0x38 [] 0xffffffff unreferenced object 0xeb9d5be0 (size 128): comm "setfont", pid 660, jiffies 4294899030 (age 3696.212s) hex dump (first 32 bytes): 60 c2 a6 eb 50 c8 a6 eb c0 54 9d eb 80 59 9d eb `...P....T...Y.. 90 53 9d eb 60 52 9d eb 60 92 9b eb 00 00 00 00 .S..`R..`....... backtrace: [] kmemleak_alloc+0x3c/0xa0 [] kmem_cache_alloc_trace+0xe2/0x250 [] con_insert_unipair+0x7c/0x150 [] con_set_unimap+0x15c/0x1f0 [] vt_ioctl+0x170b/0x1d00 [] tty_ioctl+0x230/0x7c0 [] do_vfs_ioctl+0x79/0x2d0 [] sys_ioctl+0x6f/0x80 [] sysenter_do_call+0x12/0x38 [] 0xffffffff The leak caused by con_set_default_unimap() not correct free the old map. Signed-off-by: Zeng Zhaoming Signed-off-by: Greg Kroah-Hartman --- drivers/tty/vt/consolemap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/tty') diff --git a/drivers/tty/vt/consolemap.c b/drivers/tty/vt/consolemap.c index 45d3e80156d4..a0f3d6c4d39d 100644 --- a/drivers/tty/vt/consolemap.c +++ b/drivers/tty/vt/consolemap.c @@ -584,7 +584,7 @@ int con_set_default_unimap(struct vc_data *vc) return 0; dflt->refcount++; *vc->vc_uni_pagedir_loc = (unsigned long)dflt; - if (p && --p->refcount) { + if (p && !--p->refcount) { con_release_unimap(p); kfree(p); } -- cgit v1.2.3