Patch "MIPS: uprobes: remove incorrect set_orig_insn" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
MIPS: uprobes: remove incorrect set_orig_insn
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mips-uprobes-remove-incorrect-set_orig_insn.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
ddabfa5c2e33f1b495f3e0176de7057850915c0bMon Sep 17 00:00:00 2001
From: Marcin Nowakowski <[email protected]>
Date: Thu, 22 Sep 2016 15:38:32 +0200
Subject: MIPS: uprobes: remove incorrect set_orig_insn
From: Marcin Nowakowski <[email protected]>
commit ddabfa5c2e33f1b495f3e0176de7057850915c0b upstream.
Generic kernel code implements a weak version of set_orig_insn that moves cached 'insn' from arch_uprobe to the original code location when the trap is removed.
MIPS variant used arch_uprobe->orig_inst which was never initialised properly, so this code only inserted a nop instead of the original instruction. With that change orig_inst can also be safely removed.
Patchwork: https://patchwork.linux-mips.org/patch/14299/
--- arch/mips/include/asm/uprobes.h | 1 - arch/mips/kernel/uprobes.c | 18 ------------------ 2 files changed, 19 deletions(-)
arch/mips/include/asm/uprobes.h +0 -1
@@ -36,7 +36,6 @@ struct arch_uprobe {unsigned long resume_epc;u32 insn[2 ];u32 ixol[2 ]; -union mips_instruction orig_inst[MAX_UINSN_BYTES /4 ]; };struct arch_uprobe_task {
arch/mips/kernel/uprobes.c +0 -18
@@ -280,24 +280,6 @@ int __weak set_swbp(struct arch_uprobe *return uprobe_write_opcode (mm, vaddr,UPROBE_SWBP_INSN ); } -/** -* set_orig_insn - Restore the original instruction. -* @mm: the probed process address space. -* @auprobe: arch specific probepoint information. -* @vaddr: the virtual address to insert the opcode. -* -* For mm @mm, restore the original opcode (opcode) at @vaddr. -* Return 0 (success) or a negative errno. -* -* This overrides the weak version in kernel/events/uprobes.c. -*/ -int set_orig_insn (struct arch_uprobe *auprobe,struct mm_struct *mm, -unsigned long vaddr) -{ -return uprobe_write_opcode (mm, vaddr, - *(uprobe_opcode_t *)&auprobe->orig_inst[0 ].word); -} -void __weak arch_uprobe_copy_ixol (struct page *page,unsigned long vaddr,void *src,unsigned long len) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/mips-uprobes-fix-use-of-uninitialised-variable.patch queue-4.4/mips-fix-uretprobe-implementation.patch queue-4.4/mips-uprobes-remove-incorrect-set_orig_insn.patch