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

Commit 79d54b24 authored by Oleg Nesterov's avatar Oleg Nesterov
Browse files

uprobes: Do not leak UTASK_BP_HIT if find_active_uprobe() fails



If handle_swbp()->find_active_uprobe() fails we return with
utask->state = UTASK_BP_HIT.

Change handle_swbp() to reset utask->state at the start. Note
that we do this unconditionally, see the next patch(es).

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Acked-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
parent 1d787d37
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1468,6 +1468,10 @@ static void handle_swbp(struct pt_regs *regs)
	bp_vaddr = uprobe_get_swbp_addr(regs);
	uprobe = find_active_uprobe(bp_vaddr, &is_swbp);

	utask = current->utask;
	if (utask)
		utask->state = UTASK_RUNNING;

	if (!uprobe) {
		if (is_swbp > 0) {
			/* No matching uprobe; signal SIGTRAP. */
@@ -1486,7 +1490,6 @@ static void handle_swbp(struct pt_regs *regs)
		return;
	}

	utask = current->utask;
	if (!utask) {
		utask = add_utask();
		/* Cannot allocate; re-execute the instruction. */