aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavi Bangoria <ravi.bangoria@linux.ibm.com>2018-08-09 00:18:52 -0400
committerSteven Rostedt (VMware) <rostedt@goodmis.org>2018-08-13 20:08:33 -0400
commit6d43743e9079ac0531b60cde7eadd0f042873344 (patch)
treec623add06969137109683643b39f32650a67510a
parent38e967ae1e6022557e579f673fba544cf19cf1c6 (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.c2
-rw-r--r--arch/mips/kernel/uprobes.c2
-rw-r--r--include/linux/uprobes.h2
-rw-r--r--kernel/events/uprobes.c9
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)
32int set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, 32int 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(
224int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, 224int __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
230void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, 230void 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);
121extern bool is_trap_insn(uprobe_opcode_t *insn); 121extern bool is_trap_insn(uprobe_opcode_t *insn);
122extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs); 122extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs);
123extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs); 123extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs);
124extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t); 124extern int uprobe_write_opcode(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t);
125extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); 125extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
126extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool); 126extern int uprobe_apply(struct inode *inode, loff_t offset, struct uprobe_consumer *uc, bool);
127extern void uprobe_unregister(struct inode *inode, loff_t offset, struct uprobe_consumer *uc); 127extern 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 */
302int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, 302int 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 */
352int __weak set_swbp(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) 352int __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
366int __weak 366int __weak
367set_orig_insn(struct arch_uprobe *auprobe, struct mm_struct *mm, unsigned long vaddr) 367set_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
372static struct uprobe *get_uprobe(struct uprobe *uprobe) 373static struct uprobe *get_uprobe(struct uprobe *uprobe)