void __kprobes arch_remove_kprobe(struct kprobe *p) { if (p->ainsn.insn) { free_insn_slot(p->ainsn.insn, 0); p->ainsn.insn = NULL; } }
void __kprobes arch_remove_kprobe(struct kprobe *p) { if (p->ainsn.insn) { mutex_lock(&kprobe_mutex); free_insn_slot(p->ainsn.insn, 0); mutex_unlock(&kprobe_mutex); p->ainsn.insn = NULL; } }
int arch_prepare_kprobe(struct kprobe *p) { int ret; if (alternatives_text_reserved(p->addr, p->addr)) return -EINVAL; if (!can_probe((unsigned long)p->addr)) return -EILSEQ; /* insn: must be on special executable page on x86. */ p->ainsn.insn = get_insn_slot(); if (!p->ainsn.insn) return -ENOMEM; ret = arch_copy_kprobe(p); if (ret) { free_insn_slot(p->ainsn.insn, 0); p->ainsn.insn = NULL; } return ret; }
void __kprobes arch_remove_kprobe(struct kprobe *p) { down(&kprobe_mutex); free_insn_slot(p->ainsn.insn); up(&kprobe_mutex); }