diff options
Diffstat (limited to 'include/linux/uprobes.h')
| -rw-r--r-- | include/linux/uprobes.h | 23 | 
1 files changed, 18 insertions, 5 deletions
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index 4f628a6fc5b..02b83db8e2c 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h @@ -35,13 +35,20 @@ struct inode;  # include <asm/uprobes.h>  #endif +#define UPROBE_HANDLER_REMOVE		1 +#define UPROBE_HANDLER_MASK		1 + +enum uprobe_filter_ctx { +	UPROBE_FILTER_REGISTER, +	UPROBE_FILTER_UNREGISTER, +	UPROBE_FILTER_MMAP, +}; +  struct uprobe_consumer {  	int (*handler)(struct uprobe_consumer *self, struct pt_regs *regs); -	/* -	 * filter is optional; If a filter exists, handler is run -	 * if and only if filter returns true. -	 */ -	bool (*filter)(struct uprobe_consumer *self, struct task_struct *task); +	bool (*filter)(struct uprobe_consumer *self, +				enum uprobe_filter_ctx ctx, +				struct mm_struct *mm);  	struct uprobe_consumer *next;  }; @@ -94,6 +101,7 @@ extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsign  extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);  extern bool __weak is_swbp_insn(uprobe_opcode_t *insn);  extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); +extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool);  extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);  extern int uprobe_mmap(struct vm_area_struct *vma);  extern void uprobe_munmap(struct vm_area_struct *vma, unsigned long start, unsigned long end); @@ -117,6 +125,11 @@ uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)  {  	return -ENOSYS;  } +static inline int +uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool add) +{ +	return -ENOSYS; +}  static inline void  uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc)  {  |