Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f47107c authored by Oleg Nesterov's avatar Oleg Nesterov
Browse files

uprobes: Change write_opcode() to use copy_*page()



Change write_opcode() to use copy_highpage() + copy_to_page()
and simplify the code.

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Acked-by: default avatarAnton Arapov <anton@redhat.com>
Acked-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
parent 5669ccee
Loading
Loading
Loading
Loading
+2 −10
Original line number Diff line number Diff line
@@ -255,7 +255,6 @@ static int write_opcode(struct mm_struct *mm, unsigned long vaddr,
			uprobe_opcode_t opcode)
{
	struct page *old_page, *new_page;
	void *vaddr_old, *vaddr_new;
	struct vm_area_struct *vma;
	int ret;

@@ -276,15 +275,8 @@ static int write_opcode(struct mm_struct *mm, unsigned long vaddr,

	__SetPageUptodate(new_page);

	/* copy the page now that we've got it stable */
	vaddr_old = kmap_atomic(old_page);
	vaddr_new = kmap_atomic(new_page);

	memcpy(vaddr_new, vaddr_old, PAGE_SIZE);
	memcpy(vaddr_new + (vaddr & ~PAGE_MASK), &opcode, UPROBE_SWBP_INSN_SIZE);

	kunmap_atomic(vaddr_new);
	kunmap_atomic(vaddr_old);
	copy_highpage(new_page, old_page);
	copy_to_page(new_page, vaddr, &opcode, UPROBE_SWBP_INSN_SIZE);

	ret = anon_vma_prepare(vma);
	if (ret)