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

Commit 06d07139 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Steven Rostedt
Browse files

uprobes: Change unregister/apply to WARN() if uprobe/consumer is gone

Add WARN_ON's into uprobe_unregister() and uprobe_apply() to ensure
that nobody tries to play with the dead uprobe/consumer. This helps
to catch the bugs like the one fixed by the previous patch.

In the longer term we should fix this poorly designed interface.
uprobe_register() should return "struct uprobe *" which should be
passed to apply/unregister. Plus other semantic changes, see the
changelog in commit 41ccba02.

Link: http://lkml.kernel.org/p/20140627170140.GA18322@redhat.com



Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 48212542
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -846,7 +846,7 @@ static void __uprobe_unregister(struct uprobe *uprobe, struct uprobe_consumer *u
{
	int err;

	if (!consumer_del(uprobe, uc))	/* WARN? */
	if (WARN_ON(!consumer_del(uprobe, uc)))
		return;

	err = register_for_each_vma(uprobe, NULL);
@@ -927,7 +927,7 @@ int uprobe_apply(struct inode *inode, loff_t offset,
	int ret = -ENOENT;

	uprobe = find_uprobe(inode, offset);
	if (!uprobe)
	if (WARN_ON(!uprobe))
		return ret;

	down_write(&uprobe->register_rwsem);
@@ -952,7 +952,7 @@ void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consume
	struct uprobe *uprobe;

	uprobe = find_uprobe(inode, offset);
	if (!uprobe)
	if (WARN_ON(!uprobe))
		return;

	down_write(&uprobe->register_rwsem);