• Arnaldo Carvalho de Melo's avatar
    perf header: Fix handling of PERF_EVENT_UPDATE__SCALE · 8434a2ec
    Arnaldo Carvalho de Melo authored
    In commit daeecbc0 ("perf tools: Add event_update event scale type"), the
    handling of PERF_EVENT_UPDATE__SCALE cast struct event_update_event->data to a
    pointer to event_update_event_scale, uses some field from this casted struct
    and then ends up falling through to the handling of another event type,
    PERF_EVENT_UPDATE__CPUS were it casts that ev->data to yet another type, oops,
    fix it by inserting the missing break.
    
    Noticed when building perf using gcc 7 on Fedora Rawhide:
    
      util/header.c: In function 'perf_event__process_event_update':
      util/header.c:3207:16: error: this statement may fall through [-Werror=implicit-fallthrough=]
         evsel->scale = ev_scale->scale;
         ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
      util/header.c:3208:2: note: here
        case PERF_EVENT_UPDATE__CPUS:
        ^~~~
    
    This wasn't noticed because probably PERF_EVENT_UPDATE__CPUS comes after
    PERF_EVENT_UPDATE__SCALE, so we would just create a bogus evsel->own_cpus when
    processing a PERF_EVENT_UPDATE__SCALE to then leak it and create a new cpu map
    with the correct data.
    
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Fixes: daeecbc0 ("perf tools: Add event_update event scale type")
    Link: http://lkml.kernel.org/n/tip-lukcf9hdj092ax2914ss95at@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    8434a2ec
header.c 71.8 KB