Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1593658
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 16/35] perf evlist: Convert perf_map.refcnt from atomic_t to refcount_t |
| Date | 2017-03-06 20:50 +0100 |
| Message-ID | <ti6NR-4s3-53@gated-at.bofh.it> (permalink) |
| References | <ti6E9-4o1-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
From: Elena Reshetova <elena.reshetova@intel.com>
The refcount_t type and corresponding API should be used instead of
atomic_t when the variable is used as a reference counter.
This allows to avoid accidental refcounter overflows that might lead to
use-after-free situations.
Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: David Windsor <dwindsor@gmail.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Kook <keescook@chromium.org>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Windsor <dwindsor@gmail.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Hans Liljestrand <ishkamiel@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kees Kook <keescook@chromium.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Matija Glavinic Pecotic <matija.glavinic-pecotic.ext@nokia.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: alsa-devel@alsa-project.org
Link: http://lkml.kernel.org/r/1487691303-31858-8-git-send-email-elena.reshetova@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/evlist.c | 18 +++++++++---------
tools/perf/util/evlist.h | 4 ++--
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index b601f2814a30..564b924fb48a 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -777,7 +777,7 @@ union perf_event *perf_mmap__read_forward(struct perf_mmap *md, bool check_messu
/*
* Check if event was unmapped due to a POLLHUP/POLLERR.
*/
- if (!atomic_read(&md->refcnt))
+ if (!refcount_read(&md->refcnt))
return NULL;
head = perf_mmap__read_head(md);
@@ -794,7 +794,7 @@ perf_mmap__read_backward(struct perf_mmap *md)
/*
* Check if event was unmapped due to a POLLHUP/POLLERR.
*/
- if (!atomic_read(&md->refcnt))
+ if (!refcount_read(&md->refcnt))
return NULL;
head = perf_mmap__read_head(md);
@@ -856,7 +856,7 @@ void perf_mmap__read_catchup(struct perf_mmap *md)
{
u64 head;
- if (!atomic_read(&md->refcnt))
+ if (!refcount_read(&md->refcnt))
return;
head = perf_mmap__read_head(md);
@@ -875,14 +875,14 @@ static bool perf_mmap__empty(struct perf_mmap *md)
static void perf_mmap__get(struct perf_mmap *map)
{
- atomic_inc(&map->refcnt);
+ refcount_inc(&map->refcnt);
}
static void perf_mmap__put(struct perf_mmap *md)
{
- BUG_ON(md->base && atomic_read(&md->refcnt) == 0);
+ BUG_ON(md->base && refcount_read(&md->refcnt) == 0);
- if (atomic_dec_and_test(&md->refcnt))
+ if (refcount_dec_and_test(&md->refcnt))
perf_mmap__munmap(md);
}
@@ -894,7 +894,7 @@ void perf_mmap__consume(struct perf_mmap *md, bool overwrite)
perf_mmap__write_tail(md, old);
}
- if (atomic_read(&md->refcnt) == 1 && perf_mmap__empty(md))
+ if (refcount_read(&md->refcnt) == 1 && perf_mmap__empty(md))
perf_mmap__put(md);
}
@@ -937,7 +937,7 @@ static void perf_mmap__munmap(struct perf_mmap *map)
munmap(map->base, perf_mmap__mmap_len(map));
map->base = NULL;
map->fd = -1;
- atomic_set(&map->refcnt, 0);
+ refcount_set(&map->refcnt, 0);
}
auxtrace_mmap__munmap(&map->auxtrace_mmap);
}
@@ -1001,7 +1001,7 @@ static int perf_mmap__mmap(struct perf_mmap *map,
* evlist layer can't just drop it when filtering events in
* perf_evlist__filter_pollfd().
*/
- atomic_set(&map->refcnt, 2);
+ refcount_set(&map->refcnt, 2);
map->prev = 0;
map->mask = mp->mask;
map->base = mmap(NULL, perf_mmap__mmap_len(map), mp->prot,
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
index 389b9ccdf8c7..39942995f537 100644
--- a/tools/perf/util/evlist.h
+++ b/tools/perf/util/evlist.h
@@ -1,7 +1,7 @@
#ifndef __PERF_EVLIST_H
#define __PERF_EVLIST_H 1
-#include <linux/atomic.h>
+#include <linux/refcount.h>
#include <linux/list.h>
#include <api/fd/array.h>
#include <stdio.h>
@@ -29,7 +29,7 @@ struct perf_mmap {
void *base;
int mask;
int fd;
- atomic_t refcnt;
+ refcount_t refcnt;
u64 prev;
struct auxtrace_mmap auxtrace_mmap;
char event_copy[PERF_SAMPLE_MAX_SIZE] __attribute__((aligned(8)));
--
2.9.3
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[GIT PULL 00/35] perf/core improvements and fixes Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 22/35] perf cpumap: Introduce cpu_map__snprint_mask() Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 12/35] perf comm: Convert comm_str.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 30/35] perf tools: Force uncore events to system wide monitoring Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 27/35] perf probe: Generalize probe event file open routine Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 17/35] perf thread: convert thread.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 25/35] kretprobes: Ensure probe location is at function entry Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 13/35] perf dso: Convert dso.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 21/35] perf ftrace: Add support for --pid option Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 19/35] perf evlist: Clarify a bit the use of perf_mmap->refcnt Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 23/35] perf ftrace: Add support for -a and -C option Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 10/35] perf cgroup: Convert cgroup_sel.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 07/35] tools include: Provide gcc based cmpxchg fallback for !x86 Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 20/35] perf tools: Allow sorting by symbol size Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 28/35] perf intel-PT/BTS: Add missing initialization Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 33/35] perf bench futex: Fix build on musl + clang Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 05/35] tools arch x86: Introduce atomic_cmpxchg() Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 14/35] perf map: Convert map.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 16/35] perf evlist: Convert perf_map.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 06/35] tools include: Introduce atomic_cmpxchg_{relaxed,release}() Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 24/35] perf ftrace: Use pager for displaying result Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 35/35] perf bench numa: Add more comment for -c option Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 11/35] perf cpumap: Convert cpu_map.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 02/35] perf stat: Issue a HW watchdog disable hint Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 26/35] trace/kprobes: Allow return probes with offsets and absolute addresses Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 15/35] perf map: Convert map_groups.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 01/35] perf vendor events: Add mapping for KnightsMill PMU events Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 32/35] perf bench futex: Use __maybe_unused Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 29/35] trace/kprobes: Add back warning about offset in return probes Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 31/35] tools build: Add test for sched_getcpu() Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 09/35] tools include: Adopt kernel's refcount.h Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 18/35] perf thread_map: Convert thread_map.refcnt from atomic_t to refcount_t Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
[PATCH 34/35] tools build: Use the same CC for feature detection and actual build Arnaldo Carvalho de Melo <acme@kernel.org> - 2017-03-06 20:50 +0100
Re: [GIT PULL 00/35] perf/core improvements and fixes Ingo Molnar <mingo@kernel.org> - 2017-03-07 08:20 +0100
csiph-web