summaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-lock.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2019-07-04 11:13:46 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-07-09 09:13:27 -0400
commite56fbc9dc79ce0fdc49ffadd062214ddd02f65b6 (patch)
treeb108e9b4fcb4cc1be29778253097089884b00f23 /tools/perf/builtin-lock.c
parentd8f9da240495b50766239410f9b0c715ca506a67 (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.c8
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++;
641free_seq: 641free_seq:
642 list_del(&seq->list); 642 list_del_init(&seq->list);
643 free(seq); 643 free(seq);
644end: 644end:
645 return 0; 645 return 0;