Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -698,14 +698,12 @@ int marker_probe_unregister(const char *name,
{
	struct marker_entry *entry;
	struct marker_probe_closure *old;
	int ret = 0;
	int ret = -ENOENT;

	mutex_lock(&markers_mutex);
	entry = get_marker(name);
	if (!entry) {
		ret = -ENOENT;
	if (!entry)
		goto end;
	}
	if (entry->rcu_pending)
		rcu_barrier();
	old = marker_entry_remove_probe(entry, probe, probe_private);
@@ -713,12 +711,15 @@ int marker_probe_unregister(const char *name,
	marker_update_probes();		/* may update entry */
	mutex_lock(&markers_mutex);
	entry = get_marker(name);
	if (!entry)
		goto end;
	entry->oldptr = old;
	entry->rcu_pending = 1;
	/* write rcu_pending before calling the RCU callback */
	smp_wmb();
	call_rcu(&entry->rcu, free_old_closure);
	remove_marker(name);	/* Ignore busy error message */
	ret = 0;
end:
	mutex_unlock(&markers_mutex);
	return ret;