Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

uprobes: Make copy_from_page global

Making copy_from_page global and adding uprobe prefix.
Adding the uprobe prefix to copy_to_page as well for symmetry.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Link: https://lore.kernel.org/r/20250720112133.244369-4-jolsa@kernel.org

authored by

Jiri Olsa and committed by
Peter Zijlstra
82afdd05 0f07b791

+6 -5
+1
include/linux/uprobes.h
··· 226 226 extern void uprobe_handle_trampoline(struct pt_regs *regs); 227 227 extern void *arch_uretprobe_trampoline(unsigned long *psize); 228 228 extern unsigned long uprobe_get_trampoline_vaddr(void); 229 + extern void uprobe_copy_from_page(struct page *page, unsigned long vaddr, void *dst, int len); 229 230 #else /* !CONFIG_UPROBES */ 230 231 struct uprobes_state { 231 232 };
+5 -5
kernel/events/uprobes.c
··· 177 177 return is_swbp_insn(insn); 178 178 } 179 179 180 - static void copy_from_page(struct page *page, unsigned long vaddr, void *dst, int len) 180 + void uprobe_copy_from_page(struct page *page, unsigned long vaddr, void *dst, int len) 181 181 { 182 182 void *kaddr = kmap_atomic(page); 183 183 memcpy(dst, kaddr + (vaddr & ~PAGE_MASK), len); ··· 205 205 * is a trap variant; uprobes always wins over any other (gdb) 206 206 * breakpoint. 207 207 */ 208 - copy_from_page(page, vaddr, &old_opcode, UPROBE_SWBP_INSN_SIZE); 208 + uprobe_copy_from_page(page, vaddr, &old_opcode, UPROBE_SWBP_INSN_SIZE); 209 209 is_swbp = is_swbp_insn(&old_opcode); 210 210 211 211 if (is_swbp_insn(new_opcode)) { ··· 1051 1051 if (IS_ERR(page)) 1052 1052 return PTR_ERR(page); 1053 1053 1054 - copy_from_page(page, offset, insn, nbytes); 1054 + uprobe_copy_from_page(page, offset, insn, nbytes); 1055 1055 put_page(page); 1056 1056 1057 1057 return 0; ··· 1397 1397 return ERR_PTR(-EINVAL); 1398 1398 1399 1399 /* 1400 - * This ensures that copy_from_page(), copy_to_page() and 1400 + * This ensures that uprobe_copy_from_page(), copy_to_page() and 1401 1401 * __update_ref_ctr() can't cross page boundary. 1402 1402 */ 1403 1403 if (!IS_ALIGNED(offset, UPROBE_SWBP_INSN_SIZE)) ··· 2393 2393 if (result < 0) 2394 2394 return result; 2395 2395 2396 - copy_from_page(page, vaddr, &opcode, UPROBE_SWBP_INSN_SIZE); 2396 + uprobe_copy_from_page(page, vaddr, &opcode, UPROBE_SWBP_INSN_SIZE); 2397 2397 put_page(page); 2398 2398 out: 2399 2399 /* This needs to return true for any variant of the trap insn */