Commit 544adb41 authored by Jesper Juhl's avatar Jesper Juhl Committed by Linus Torvalds

markers: don't risk NULL deref in marker

get_marker() may return NULL, so test for it.

[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: default avatarJesper Juhl <jesper.juhl@gmail.com>
Acked-by: default avatarMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 70886554
...@@ -698,14 +698,12 @@ int marker_probe_unregister(const char *name, ...@@ -698,14 +698,12 @@ int marker_probe_unregister(const char *name,
{ {
struct marker_entry *entry; struct marker_entry *entry;
struct marker_probe_closure *old; struct marker_probe_closure *old;
int ret = 0; int ret = -ENOENT;
mutex_lock(&markers_mutex); mutex_lock(&markers_mutex);
entry = get_marker(name); entry = get_marker(name);
if (!entry) { if (!entry)
ret = -ENOENT;
goto end; goto end;
}
if (entry->rcu_pending) if (entry->rcu_pending)
rcu_barrier(); rcu_barrier();
old = marker_entry_remove_probe(entry, probe, probe_private); old = marker_entry_remove_probe(entry, probe, probe_private);
...@@ -713,12 +711,15 @@ int marker_probe_unregister(const char *name, ...@@ -713,12 +711,15 @@ int marker_probe_unregister(const char *name,
marker_update_probes(); /* may update entry */ marker_update_probes(); /* may update entry */
mutex_lock(&markers_mutex); mutex_lock(&markers_mutex);
entry = get_marker(name); entry = get_marker(name);
if (!entry)
goto end;
entry->oldptr = old; entry->oldptr = old;
entry->rcu_pending = 1; entry->rcu_pending = 1;
/* write rcu_pending before calling the RCU callback */ /* write rcu_pending before calling the RCU callback */
smp_wmb(); smp_wmb();
call_rcu(&entry->rcu, free_old_closure); call_rcu(&entry->rcu, free_old_closure);
remove_marker(name); /* Ignore busy error message */ remove_marker(name); /* Ignore busy error message */
ret = 0;
end: end:
mutex_unlock(&markers_mutex); mutex_unlock(&markers_mutex);
return ret; return ret;
......
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