• Steven Rostedt (Red Hat)'s avatar
    tracing: Allow events to have NULL strings · 4e58e547
    Steven Rostedt (Red Hat) authored
    If an TRACE_EVENT() uses __assign_str() or __get_str on a NULL pointer
    then the following oops will happen:
    
    BUG: unable to handle kernel NULL pointer dereference at   (null)
    IP: [<c127a17b>] strlen+0x10/0x1a
    *pde = 00000000 ^M
    Oops: 0000 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.13.0-rc1-test+ #2
    Hardware name:                  /DG965MQ, BIOS MQ96510J.86A.0372.2006.0605.1717 06/05/2006^M
    task: f5cde9f0 ti: f5e5e000 task.ti: f5e5e000
    EIP: 0060:[<c127a17b>] EFLAGS: 00210046 CPU: 1
    EIP is at strlen+0x10/0x1a
    EAX: 00000000 EBX: c2472da8 ECX: ffffffff EDX: c2472da8
    ESI: c1c5e5fc EDI: 00000000 EBP: f5e5fe84 ESP: f5e5fe80
     DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
    CR0: 8005003b CR2: 00000000 CR3: 01f32000 CR4: 000007d0
    Stack:
     f5f18b90 f5e5feb8 c10687a8 0759004f 00000005 00000005 00000005 00200046
     00000002 00000000 c1082a93 f56c7e28 c2472da8 c1082a93 f5e5fee4 c106bc61^M
     00000000 c1082a93 00000000 00000000 00000001 00200046 00200082 00000000
    Call Trace:
     [<c10687a8>] ftrace_raw_event_lock+0x39/0xc0
     [<c1082a93>] ? ktime_get+0x29/0x69
     [<c1082a93>] ? ktime_get+0x29/0x69
     [<c106bc61>] lock_release+0x57/0x1a5
     [<c1082a93>] ? ktime_get+0x29/0x69
     [<c10824dd>] read_seqcount_begin.constprop.7+0x4d/0x75
     [<c1082a93>] ? ktime_get+0x29/0x69^M
     [<c1082a93>] ktime_get+0x29/0x69
     [<c108a46a>] __tick_nohz_idle_enter+0x1e/0x426
     [<c10690e8>] ? lock_release_holdtime.part.19+0x48/0x4d
     [<c10bc184>] ? time_hardirqs_off+0xe/0x28
     [<c1068c82>] ? trace_hardirqs_off_caller+0x3f/0xaf
     [<c108a8cb>] tick_nohz_idle_enter+0x59/0x62
     [<c1079242>] cpu_startup_entry+0x64/0x192
     [<c102299c>] start_secondary+0x277/0x27c
    Code: 90 89 c6 89 d0 88 c4 ac 38 e0 74 09 84 c0 75 f7 be 01 00 00 00 89 f0 48 5e 5d c3 55 89 e5 57 66 66 66 66 90 83 c9 ff 89 c7 31 c0 <f2> ae f7 d1 8d 41 ff 5f 5d c3 55 89 e5 57 66 66 66 66 90 31 ff
    EIP: [<c127a17b>] strlen+0x10/0x1a SS:ESP 0068:f5e5fe80
    CR2: 0000000000000000
    ---[ end trace 01bc47bf519ec1b2 ]---
    
    New tracepoints have been added that have allowed for NULL pointers
    being assigned to strings. To fix this, change the TRACE_EVENT() code
    to check for NULL and if it is, it will assign "(null)" to it instead
    (similar to what glibc printf does).
    Reported-by: default avatarShuah Khan <shuah.kh@samsung.com>
    Reported-by: default avatarJovi Zhangwei <jovi.zhangwei@gmail.com>
    Link: http://lkml.kernel.org/r/CAGdX0WFeEuy+DtpsJzyzn0343qEEjLX97+o1VREFkUEhndC+5Q@mail.gmail.com
    Link: http://lkml.kernel.org/r/528D6972.9010702@samsung.com
    Fixes: 9cbf1176 ("tracing/events: provide string with undefined size support")
    Cc: stable@vger.kernel.org # 2.6.31+
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    4e58e547
ftrace.h 20 KB