Commit f66af459 authored by Frederic Weisbecker's avatar Frederic Weisbecker Committed by Ingo Molnar
Browse files

tracepoint: check if the probe has been registered



Impact: fix kernel crash that can trigger during tracing

If we try to remove a probe that has not been already registered,
the tracepoint_entry_remove_probe() function will dereference a NULL
pointer.

Check the probe before removing it to avoid crashes.

Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Acked-by: default avatarMathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Acked-by: default avatarSteven Rostedt <srostedt@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 5209f08d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -131,6 +131,9 @@ tracepoint_entry_remove_probe(struct tracepoint_entry *entry, void *probe)

	old = entry->funcs;

	if (!old)
		return NULL;

	debug_print_probes(entry);
	/* (N -> M), (N > 1, M >= 0) probes */
	for (nr_probes = 0; old[nr_probes]; nr_probes++) {
@@ -388,6 +391,11 @@ int tracepoint_probe_unregister(const char *name, void *probe)
	if (entry->rcu_pending)
		rcu_barrier_sched();
	old = tracepoint_entry_remove_probe(entry, probe);
	if (!old) {
		printk(KERN_WARNING "Warning: Trying to unregister a probe"
				    "that doesn't exist\n");
		goto end;
	}
	mutex_unlock(&tracepoints_mutex);
	tracepoint_update_probes();		/* may update entry */
	mutex_lock(&tracepoints_mutex);