diff options
author | Ravi Bangoria <ravi.bangoria@linux.ibm.com> | 2018-08-09 00:18:52 -0400 |
---|---|---|
committer | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2018-08-13 20:08:33 -0400 |
commit | 6d43743e9079ac0531b60cde7eadd0f042873344 (patch) | |
tree | c623add06969137109683643b39f32650a67510a | |
parent | 38e967ae1e6022557e579f673fba544cf19cf1c6 (diff) |
Uprobe: Additional argument arch_uprobe to uprobe_write_opcode()
Add addition argument 'arch_uprobe' to uprobe_write_opcode().
We need this in later set of patches.
Link: http://lkml.kernel.org/r/20180809041856.1547-3-ravi.bangoria@linux.ibm.com
Reviewed-by: Song Liu <songliubraving@fb.com>
Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-rw-r--r-- | arch/arm/probes/uprobes/core.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/uprobes.c | 2 | ||||
-rw-r--r-- | include/linux/uprobes.h | 2 | ||||
-rw-r--r-- | kernel/events/uprobes.c | 9 |
4 files changed, 8 insertions, 7 deletions
diff --git a/arch/arm/probes/uprobes/core.c b/arch/arm/probes/uprobes/core.c index d1329f1ba4e4..bf992264060e 100644 --- a/arch/arm/probes/uprobes/core.c +++ b/arch/arm/probes/uprobes/core.c | |||
@@ -32,7 +32,7 @@ bool is_swbp_insn(uprobe_opcode_t *insn) | |||
32 | int set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, | 32 | int set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, |
33 | unsigned long vaddr) | 33 | unsigned long vaddr) |
34 | { | 34 | { |
35 | return uprobe_write_opcode(mm, vaddr, | 35 | return uprobe_write_opcode(auprobe, mm, vaddr, |
36 | __opcode_to_mem_arm(auprobe->bpinsn)); | 36 | __opcode_to_mem_arm(auprobe->bpinsn)); |
37 | } | 37 | } |
38 | 38 | ||
diff --git a/arch/mips/kernel/uprobes.c b/arch/mips/kernel/uprobes.c index f7a0645ccb82..4aaff3b3175c 100644 --- a/arch/mips/kernel/uprobes.c +++ b/arch/mips/kernel/uprobes.c | |||
@@ -224,7 +224,7 @@ unsigned long arch_uretprobe_hijack_return_addr( | |||
224 | int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, | 224 | int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, |
225 | unsigned long vaddr) | 225 | unsigned long vaddr) |
226 | { | 226 | { |
227 | return uprobe_write_opcode(mm, vaddr, UPROBE_SWBP_INSN); | 227 | return uprobe_write_opcode(auprobe, mm, vaddr, UPROBE_SWBP_INSN); |
228 | } | 228 | } |
229 | 229 | ||
230 | void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, | 230 | void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, |
diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h index 0a294e950df8..bb9d2084af03 100644 --- a/include/linux/uprobes.h +++ b/include/linux/uprobes.h | |||
@@ -121,7 +121,7 @@ extern bool is_swbp_insn(uprobe_opcode_t *insn); | |||
121 | extern bool is_trap_insn(uprobe_opcode_t *insn); | 121 | extern bool is_trap_insn(uprobe_opcode_t *insn); |
122 | extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs); | 122 | extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs); |
123 | extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs); | 123 | extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs); |
124 | extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); | 124 | extern int uprobe_write_opcode(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); |
125 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 125 | extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
126 | extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool); | 126 | extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool); |
127 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); | 127 | extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); |
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index 471eac896635..c0418ba52ba8 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c | |||
@@ -299,8 +299,8 @@ static int verify_opcode(struct page *page, unsigned long vaddr, uprobe_opcode_t | |||
299 | * Called with mm->mmap_sem held for write. | 299 | * Called with mm->mmap_sem held for write. |
300 | * Return 0 (success) or a negative errno. | 300 | * Return 0 (success) or a negative errno. |
301 | */ | 301 | */ |
302 | int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, | 302 | int uprobe_write_opcode(struct arch_uprobe *auprobe, struct mm_struct *mm, |
303 | uprobe_opcode_t opcode) | 303 | unsigned long vaddr, uprobe_opcode_t opcode) |
304 | { | 304 | { |
305 | struct page *old_page, *new_page; | 305 | struct page *old_page, *new_page; |
306 | struct vm_area_struct *vma; | 306 | struct vm_area_struct *vma; |
@@ -351,7 +351,7 @@ put_old: | |||
351 | */ | 351 | */ |
352 | int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) | 352 | int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) |
353 | { | 353 | { |
354 | return uprobe_write_opcode(mm, vaddr, UPROBE_SWBP_INSN); | 354 | return uprobe_write_opcode(auprobe, mm, vaddr, UPROBE_SWBP_INSN); |
355 | } | 355 | } |
356 | 356 | ||
357 | /** | 357 | /** |
@@ -366,7 +366,8 @@ int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned | |||
366 | int __weak | 366 | int __weak |
367 | set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) | 367 | set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) |
368 | { | 368 | { |
369 | return uprobe_write_opcode(mm, vaddr, *(uprobe_opcode_t *)&auprobe->insn); | 369 | return uprobe_write_opcode(auprobe, mm, vaddr, |
370 | *(uprobe_opcode_t *)&auprobe->insn); | ||
370 | } | 371 | } |
371 | 372 | ||
372 | static struct uprobe *get_uprobe(struct uprobe *uprobe) | 373 | static struct uprobe *get_uprobe(struct uprobe *uprobe) |