From d939d8f561d1f85a55e1216f3f347b23a2cbed40 Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Mon, 4 Nov 2019 14:59:32 +0800 Subject: [PATCH] soc: rockchip: system_monitor: Fix memleak in rockchip_parse_video_info unreferenced object 0xffffffc068ef4d00 (size 128): comm "MsgQueue", pid 6134, jiffies 4296734025 (age 942.967s) hex dump (first 32 bytes): 31 00 77 69 64 74 68 00 31 39 32 30 00 68 65 69 1.width.1920.hei 67 68 74 00 31 30 38 38 00 69 73 68 65 76 63 00 ght.1088.ishevc. backtrace: [<00000000a20494fa>] __kmalloc_track_caller+0x2c0/0x350 [<00000000c761fedd>] kstrdup+0x38/0x68 [<0000000007e9cfe0>] rockchip_parse_video_info+0x8c/0x110 [<000000009380a4ea>] rockchip_update_system_status+0x6c/0x208 [<000000002366d676>] status_store+0x1c/0x38 [<00000000262b2d89>] kobj_attr_store+0x14/0x28 [<0000000082de5cb2>] sysfs_kf_write+0x48/0x58 [<000000004cf22a2f>] kernfs_fop_write+0xec/0x1e8 [<000000002ce798af>] __vfs_write+0x34/0x158 [<00000000b71f587d>] vfs_write+0xb4/0x1c8 [<000000004acb036b>] ksys_write+0x64/0xe0 [<000000003a4572a8>] __arm64_sys_write+0x14/0x20 [<000000004373535e>] el0_svc_common.constprop.0+0xb8/0x178 [<00000000b1dff00e>] el0_svc_compat_handler+0x18/0x20 [<000000002ce195f8>] el0_svc_compat+0x8/0x34 [<000000005ee63479>] 0xffffffffffffffff Change-Id: Ie5e5728c4e0a067cad8178ad46f02fa21888e24e Signed-off-by: Finley Xiao --- drivers/soc/rockchip/rockchip_system_monitor.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/soc/rockchip/rockchip_system_monitor.c b/drivers/soc/rockchip/rockchip_system_monitor.c index e20796cca0c2..c5c2668e0c44 100644 --- a/drivers/soc/rockchip/rockchip_system_monitor.c +++ b/drivers/soc/rockchip/rockchip_system_monitor.c @@ -201,7 +201,7 @@ static struct video_info *rockchip_parse_video_info(const char *buf) { struct video_info *video_info; const char *cp = buf; - char *str; + char *str, *p; int ntokens = 0; while ((cp = strpbrk(cp + 1, ","))) @@ -216,12 +216,13 @@ static struct video_info *rockchip_parse_video_info(const char *buf) INIT_LIST_HEAD(&video_info->node); str = kstrdup(buf, GFP_KERNEL); - strsep(&str, ","); - video_info->width = rockchip_get_video_param(&str); - video_info->height = rockchip_get_video_param(&str); - video_info->ishevc = rockchip_get_video_param(&str); - video_info->videoFramerate = rockchip_get_video_param(&str); - video_info->streamBitrate = rockchip_get_video_param(&str); + p = str; + strsep(&p, ","); + video_info->width = rockchip_get_video_param(&p); + video_info->height = rockchip_get_video_param(&p); + video_info->ishevc = rockchip_get_video_param(&p); + video_info->videoFramerate = rockchip_get_video_param(&p); + video_info->streamBitrate = rockchip_get_video_param(&p); pr_debug("%c,width=%d,height=%d,ishevc=%d,videoFramerate=%d,streamBitrate=%d\n", buf[0], video_info->width,