Commit 9b73f5b8 authored by Namhyung Kim's avatar Namhyung Kim Committed by Greg Kroah-Hartman

perf namespace: Protect reading thread's namespace

[ Upstream commit 6584140b ]

It seems that the current code lacks holding the namespace lock in
thread__namespaces().  Otherwise it can see inconsistent results.
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Hari Bathini <hbathini@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Krister Johansen <kjlx@templeofstupid.com>
Link: http://lkml.kernel.org/r/20190522053250.207156-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 4a705e5c
...@@ -132,7 +132,7 @@ void thread__put(struct thread *thread) ...@@ -132,7 +132,7 @@ void thread__put(struct thread *thread)
} }
} }
struct namespaces *thread__namespaces(const struct thread *thread) static struct namespaces *__thread__namespaces(const struct thread *thread)
{ {
if (list_empty(&thread->namespaces_list)) if (list_empty(&thread->namespaces_list))
return NULL; return NULL;
...@@ -140,10 +140,21 @@ struct namespaces *thread__namespaces(const struct thread *thread) ...@@ -140,10 +140,21 @@ struct namespaces *thread__namespaces(const struct thread *thread)
return list_first_entry(&thread->namespaces_list, struct namespaces, list); return list_first_entry(&thread->namespaces_list, struct namespaces, list);
} }
struct namespaces *thread__namespaces(const struct thread *thread)
{
struct namespaces *ns;
down_read((struct rw_semaphore *)&thread->namespaces_lock);
ns = __thread__namespaces(thread);
up_read((struct rw_semaphore *)&thread->namespaces_lock);
return ns;
}
static int __thread__set_namespaces(struct thread *thread, u64 timestamp, static int __thread__set_namespaces(struct thread *thread, u64 timestamp,
struct namespaces_event *event) struct namespaces_event *event)
{ {
struct namespaces *new, *curr = thread__namespaces(thread); struct namespaces *new, *curr = __thread__namespaces(thread);
new = namespaces__new(event); new = namespaces__new(event);
if (!new) if (!new)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment