• Vamshi K Sthambamkadi's avatar
    tracing: Fix memory leak in __create_synth_event() · f40fc799
    Vamshi K Sthambamkadi authored
    kmemleak report:
    unreferenced object 0xc5a6f708 (size 8):
      comm "ftracetest", pid 1209, jiffies 4294911500 (age 6.816s)
      hex dump (first 8 bytes):
        00 c1 3d 60 14 83 1f 8a                          ..=`....
      backtrace:
        [<f0aa4ac4>] __kmalloc_track_caller+0x2a6/0x460
        [<7d3d60a6>] kstrndup+0x37/0x70
        [<45a0e739>] argv_split+0x1c/0x120
        [<c17982f8>] __create_synth_event+0x192/0xb00
        [<0708b8a3>] create_synth_event+0xbb/0x150
        [<3d1941e1>] create_dyn_event+0x5c/0xb0
        [<5cf8b9e3>] trace_parse_run_command+0xa7/0x140
        [<04deb2ef>] dyn_event_write+0x10/0x20
        [<8779ac95>] vfs_write+0xa9/0x3c0
        [<ed93722a>] ksys_write+0x89/0xc0
        [<b9ca0507>] __ia32_sys_write+0x15/0x20
        [<7ce02d85>] __do_fast_syscall_32+0x45/0x80
        [<cb0ecb35>] do_fast_syscall_32+0x29/0x60
        [<2467454a>] do_SYSENTER_32+0x15/0x20
        [<9beaa61d>] entry_SYSENTER_32+0xa9/0xfc
    unreferenced object 0xc5a6f078 (size 8):
      comm "ftracetest", pid 1209, jiffies 4294911500 (age 6.816s)
      hex dump (first 8 bytes):
        08 f7 a6 c5 00 00 00 00                          ........
      backtrace:
        [<bbac096a>] __kmalloc+0x2b6/0x470
        [<aa2624b4>] argv_split+0x82/0x120
        [<c17982f8>] __create_synth_event+0x192/0xb00
        [<0708b8a3>] create_synth_event+0xbb/0x150
        [<3d1941e1>] create_dyn_event+0x5c/0xb0
        [<5cf8b9e3>] trace_parse_run_command+0xa7/0x140
        [<04deb2ef>] dyn_event_write+0x10/0x20
        [<8779ac95>] vfs_write+0xa9/0x3c0
        [<ed93722a>] ksys_write+0x89/0xc0
        [<b9ca0507>] __ia32_sys_write+0x15/0x20
        [<7ce02d85>] __do_fast_syscall_32+0x45/0x80
        [<cb0ecb35>] do_fast_syscall_32+0x29/0x60
        [<2467454a>] do_SYSENTER_32+0x15/0x20
        [<9beaa61d>] entry_SYSENTER_32+0xa9/0xfc
    
    In __create_synth_event(), while iterating field/type arguments, the
    argv_split() will return array of atleast 2 elements even when zero
    arguments(argc=0) are passed. for e.g. when there is double delimiter
    or string ends with delimiter
    
    To fix call argv_free() even when argc=0.
    
    Link: https://lkml.kernel.org/r/20210304094521.GA1826@cosmosSigned-off-by: default avatarVamshi K Sthambamkadi <vamshi.k.sthambamkadi@gmail.com>
    Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    f40fc799
trace_events_synth.c 53.2 KB