diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-07-04 11:13:46 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-07-09 09:13:27 -0400 |
commit | e56fbc9dc79ce0fdc49ffadd062214ddd02f65b6 (patch) | |
tree | b108e9b4fcb4cc1be29778253097089884b00f23 /tools/perf/builtin-lock.c | |
parent | d8f9da240495b50766239410f9b0c715ca506a67 (diff) |
perf tools: Use list_del_init() more thorougly
To allow for destructors to check if they're operating on a object still
in a list, and to avoid going from use after free list entries into
still valid, or even also other already removed from list entries.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-deh17ub44atyox3j90e6rksu@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-lock.c')
-rw-r--r-- | tools/perf/builtin-lock.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c index c0be44e65e9d..574e30ec6d7c 100644 --- a/tools/perf/builtin-lock.c +++ b/tools/perf/builtin-lock.c | |||
@@ -454,7 +454,7 @@ broken: | |||
454 | /* broken lock sequence, discard it */ | 454 | /* broken lock sequence, discard it */ |
455 | ls->discard = 1; | 455 | ls->discard = 1; |
456 | bad_hist[BROKEN_ACQUIRE]++; | 456 | bad_hist[BROKEN_ACQUIRE]++; |
457 | list_del(&seq->list); | 457 | list_del_init(&seq->list); |
458 | free(seq); | 458 | free(seq); |
459 | goto end; | 459 | goto end; |
460 | default: | 460 | default: |
@@ -515,7 +515,7 @@ static int report_lock_acquired_event(struct perf_evsel *evsel, | |||
515 | /* broken lock sequence, discard it */ | 515 | /* broken lock sequence, discard it */ |
516 | ls->discard = 1; | 516 | ls->discard = 1; |
517 | bad_hist[BROKEN_ACQUIRED]++; | 517 | bad_hist[BROKEN_ACQUIRED]++; |
518 | list_del(&seq->list); | 518 | list_del_init(&seq->list); |
519 | free(seq); | 519 | free(seq); |
520 | goto end; | 520 | goto end; |
521 | default: | 521 | default: |
@@ -570,7 +570,7 @@ static int report_lock_contended_event(struct perf_evsel *evsel, | |||
570 | /* broken lock sequence, discard it */ | 570 | /* broken lock sequence, discard it */ |
571 | ls->discard = 1; | 571 | ls->discard = 1; |
572 | bad_hist[BROKEN_CONTENDED]++; | 572 | bad_hist[BROKEN_CONTENDED]++; |
573 | list_del(&seq->list); | 573 | list_del_init(&seq->list); |
574 | free(seq); | 574 | free(seq); |
575 | goto end; | 575 | goto end; |
576 | default: | 576 | default: |
@@ -639,7 +639,7 @@ static int report_lock_release_event(struct perf_evsel *evsel, | |||
639 | 639 | ||
640 | ls->nr_release++; | 640 | ls->nr_release++; |
641 | free_seq: | 641 | free_seq: |
642 | list_del(&seq->list); | 642 | list_del_init(&seq->list); |
643 | free(seq); | 643 | free(seq); |
644 | end: | 644 | end: |
645 | return 0; | 645 | return 0; |