up_read(&uprobe->register_rwsem);
 }
 
-static bool handle_trampoline(struct pt_regs *regs)
+static void handle_trampoline(struct pt_regs *regs)
 {
        struct uprobe_task *utask;
        struct return_instance *ri;
 
        utask = current->utask;
        if (!utask)
-               return false;
+               goto sigill;
 
        ri = utask->return_instances;
        if (!ri)
-               return false;
+               goto sigill;
 
        /*
         * TODO: we should throw out return_instance's invalidated by
        }
 
        utask->return_instances = ri;
+       return;
+
+ sigill:
+       uprobe_warn(current, "handle uretprobe, sending SIGILL.");
+       force_sig_info(SIGILL, SEND_SIG_FORCED, current);
 
-       return true;
 }
 
 bool __weak arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs)
        int uninitialized_var(is_swbp);
 
        bp_vaddr = uprobe_get_swbp_addr(regs);
-       if (bp_vaddr == get_trampoline_vaddr()) {
-               if (handle_trampoline(regs))
-                       return;
-
-               pr_warn("uprobe: unable to handle uretprobe pid/tgid=%d/%d\n",
-                                               current->pid, current->tgid);
-       }
+       if (bp_vaddr == get_trampoline_vaddr())
+               return handle_trampoline(regs);
 
        uprobe = find_active_uprobe(bp_vaddr, &is_swbp);
        if (!uprobe) {