[RHEL7,COMMIT] ms/tty/vt: Fix the memory leak in visual_init

Submitted by Konstantin Khorenko on Nov. 15, 2017, 1:14 p.m.

Details

Message ID 201711151314.vAFDEv4K012325@finist_ce7.work
State New
Series "Series without cover letter"
Headers show

Commit Message

Konstantin Khorenko Nov. 15, 2017, 1:14 p.m.
The commit is pushed to "branch-rh7-3.10.0-693.1.1.vz7.37.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-693.1.1.vz7.37.28
------>
commit 1d2a545b8e82899fb95a3cc2b5145c8f79cafb35
Author: Dongxing Zhang <dongxing.zhang@intel.com>
Date:   Wed Nov 15 16:14:57 2017 +0300

    ms/tty/vt: Fix the memory leak in visual_init
    
    If vc->vc_uni_pagedir_loc is not NULL, its refcount needs to be
    decreased before vc_uni_pagedir_loc is re-assigned.
    
    unreferenced object 0xffff88002cdd13b0 (size 512):
      comm "setfont", pid 503, jiffies 4294896503 (age 722.828s)
      hex dump (first 32 bytes):
        40 92 61 2b 00 88 ff ff 00 00 00 00 00 00 00 00  @.a+............
        00 00 00 00 00 00 00 00 a0 ad 61 2b 00 88 ff ff  ..........a+....
      backtrace:
        [<ffffffff817b755e>] kmemleak_alloc+0x4e/0xb0
        [<ffffffff811d4898>] kmem_cache_alloc_trace+0x1c8/0x240
        [<ffffffff814ae7d3>] con_do_clear_unimap.isra.2+0x83/0xe0
        [<ffffffff814ae9b2>] con_clear_unimap+0x22/0x40
        [<ffffffff814a8db8>] vt_ioctl+0xeb8/0x1170
        [<ffffffff8149b458>] tty_ioctl+0x208/0xca0
        [<ffffffff81207858>] do_vfs_ioctl+0x2f8/0x510
        [<ffffffff81207af1>] SyS_ioctl+0x81/0xa0
        [<ffffffff817ca2b2>] system_call_fastpath+0x16/0x75
        [<ffffffffffffffff>] 0xffffffffffffffff
    unreferenced object 0xffff88002b619240 (size 256):
      comm "setfont", pid 503, jiffies 4294896503 (age 722.828s)
      hex dump (first 32 bytes):
        90 bc 84 d5 00 88 ff ff 58 85 84 d5 00 88 ff ff  ........X.......
        88 ac 84 d5 00 88 ff ff e0 b1 84 d5 00 88 ff ff  ................
      backtrace:
        [<ffffffff817b755e>] kmemleak_alloc+0x4e/0xb0
        [<ffffffff811d4898>] kmem_cache_alloc_trace+0x1c8/0x240
        [<ffffffff814ae286>] con_insert_unipair+0x86/0x170
        [<ffffffff814af107>] con_set_unimap+0x1b7/0x280
        [<ffffffff814a8d65>] vt_ioctl+0xe65/0x1170
        [<ffffffff8149b458>] tty_ioctl+0x208/0xca0
        [<ffffffff81207858>] do_vfs_ioctl+0x2f8/0x510
        [<ffffffff81207af1>] SyS_ioctl+0x81/0xa0
        [<ffffffff817ca2b2>] system_call_fastpath+0x16/0x75
        [<ffffffffffffffff>] 0xffffffffffffffff
    
    Signed-off-by: Dongxing Zhang <dongxing.zhang@intel.com>
    Signed-off-by: Xiaoming Wang <xiaoming.wang@intel.com>
    Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
    Tested-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    https://jira.sw.ru/browse/PSBM-76924
    (cherry picked from commit 08b33249d89700ba555d4ab5cc88714192b8ee46)
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
---
 drivers/tty/vt/vt.c | 2 ++
 1 file changed, 2 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 07c5666..fbc6290 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -742,6 +742,8 @@  static void visual_init(struct vc_data *vc, int num, int init)
 	__module_get(vc->vc_sw->owner);
 	vc->vc_num = num;
 	vc->vc_display_fg = &master_display_fg;
+	if (vc->vc_uni_pagedir_loc)
+		con_free_unimap(vc);
 	vc->vc_uni_pagedir_loc = &vc->vc_uni_pagedir;
 	vc->vc_uni_pagedir = 0;
 	vc->vc_hi_font_mask = 0;