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

Commit 8a8de66c authored by Oleg Nesterov's avatar Oleg Nesterov
Browse files

uprobes: Introduce arch_uprobe->ixol



Currently xol_get_insn_slot() assumes that we should simply copy
arch_uprobe->insn[] which is (ignoring arch_uprobe_analyze_insn)
just the copy of the original insn.

This is not true for arm which needs to create another insn to
execute it out-of-line.

So this patch simply adds the new member, ->ixol into the union.
This doesn't make any difference for x86 and powerpc, but arm
can divorce insn/ixol and initialize the correct xol insn in
arch_uprobe_analyze_insn().

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
parent 736e89d9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ typedef ppc_opcode_t uprobe_opcode_t;
struct arch_uprobe {
	union {
		u8	insn[MAX_UINSN_BYTES];
		u8	ixol[MAX_UINSN_BYTES];
		u32	ainsn;
	};
};
+4 −1
Original line number Diff line number Diff line
@@ -35,7 +35,10 @@ typedef u8 uprobe_opcode_t;

struct arch_uprobe {
	u16				fixups;
	union {
		u8			insn[MAX_UINSN_BYTES];
		u8			ixol[MAX_UINSN_BYTES];
	};
#ifdef CONFIG_X86_64
	unsigned long			rip_rela_target_address;
#endif
+2 −1
Original line number Diff line number Diff line
@@ -1264,7 +1264,8 @@ static unsigned long xol_get_insn_slot(struct uprobe *uprobe)
		return 0;

	/* Initialize the slot */
	copy_to_page(area->page, xol_vaddr, uprobe->arch.insn, MAX_UINSN_BYTES);
	copy_to_page(area->page, xol_vaddr,
			uprobe->arch.ixol, sizeof(uprobe->arch.ixol));
	/*
	 * We probably need flush_icache_user_range() but it needs vma.
	 * This should work on supported architectures too.