• Peter Zijlstra's avatar
    perf/core: Fix use-after-free bug · a76a82a3
    Peter Zijlstra authored
    Dmitry reported a KASAN use-after-free on event->group_leader.
    
    It turns out there's a hole in perf_remove_from_context() due to
    event_function_call() not calling its function when the task
    associated with the event is already dead.
    
    In this case the event will have been detached from the task, but the
    grouping will have been retained, such that group operations might
    still work properly while there are live child events etc.
    
    This does however mean that we can miss a perf_group_detach() call
    when the group decomposes, this in turn can then lead to
    use-after-free.
    
    Fix it by explicitly doing the group detach if its still required.
    Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
    Tested-by: default avatarDmitry Vyukov <dvyukov@google.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org # v4.5+
    Cc: syzkaller <syzkaller@googlegroups.com>
    Fixes: 63b6da39 ("perf: Fix perf_event_exit_task() race")
    Link: http://lkml.kernel.org/r/20170126153955.GD6515@twins.programming.kicks-ass.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    a76a82a3
core.c 256 KB