This is a note to let you know that I've just added the patch titled x86/kprobes: Fix JNG/JNLE emulation to the 5.10-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: x86-kprobes-fix-jng-jnle-emulation.patch and it can be found in the queue-5.10 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From stable-owner@xxxxxxxxxxxxxxx Wed Jul 5 08:48:02 2023 From: Li Huafei <lihuafei1@xxxxxxxxxx> Date: Wed, 5 Jul 2023 14:46:53 +0800 Subject: x86/kprobes: Fix JNG/JNLE emulation To: <stable@xxxxxxxxxxxxxxx> Cc: <gregkh@xxxxxxxxxxxxxxxxxxx>, <mhiramat@xxxxxxxxxx>, <tglx@xxxxxxxxxxxxx>, <mingo@xxxxxxxxxx>, <bp@xxxxxxxxx>, <x86@xxxxxxxxxx>, <hpa@xxxxxxxxx>, <sashal@xxxxxxxxxx>, <peterz@xxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>, <xukuohai@xxxxxxxxxx>, <natechancellor@xxxxxxxxx>, <ndesaulniers@xxxxxxxxxx>, <rostedt@xxxxxxxxxxx>, <weiyongjun1@xxxxxxxxxx>, <gustavoars@xxxxxxxxxx>, <namit@xxxxxxxxxx>, <laijs@xxxxxxxxxxxxxxxxx>, <clang-built-linux@xxxxxxxxxxxxxxxx>, <lihuafei1@xxxxxxxxxx> Message-ID: <20230705064653.226811-10-lihuafei1@xxxxxxxxxx> From: Nadav Amit <namit@xxxxxxxxxx> [ Upstream commit 8924779df820c53875abaeb10c648e9cb75b46d4 ] When kprobes emulates JNG/JNLE instructions on x86 it uses the wrong condition. For JNG (opcode: 0F 8E), according to Intel SDM, the jump is performed if (ZF == 1 or SF != OF). However the kernel emulation currently uses 'and' instead of 'or'. As a result, setting a kprobe on JNG/JNLE might cause the kernel to behave incorrectly whenever the kprobe is hit. Fix by changing the 'and' to 'or'. Fixes: 6256e668b7af ("x86/kprobes: Use int3 instead of debug trap for single-step") Signed-off-by: Nadav Amit <namit@xxxxxxxxxx> Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx Link: https://lore.kernel.org/r/20220813225943.143767-1-namit@xxxxxxxxxx Signed-off-by: Li Huafei <lihuafei1@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/x86/kernel/kprobes/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/arch/x86/kernel/kprobes/core.c +++ b/arch/x86/kernel/kprobes/core.c @@ -505,7 +505,7 @@ static void kprobe_emulate_jcc(struct kp match = ((regs->flags & X86_EFLAGS_SF) >> X86_EFLAGS_SF_BIT) ^ ((regs->flags & X86_EFLAGS_OF) >> X86_EFLAGS_OF_BIT); if (p->ainsn.jcc.type >= 0xe) - match = match && (regs->flags & X86_EFLAGS_ZF); + match = match || (regs->flags & X86_EFLAGS_ZF); } __kprobe_emulate_jmp(p, regs, (match && !invert) || (!match && invert)); } Patches currently in stable-queue which might be from stable-owner@xxxxxxxxxxxxxxx are queue-5.10/x86-kprobes-update-kcb-status-flag-after-singlestepping.patch queue-5.10/x86-kprobes-fix-to-identify-indirect-jmp-and-others-using-range-case.patch queue-5.10/x86-kprobes-fix-jng-jnle-emulation.patch queue-5.10/x86-kprobes-retrieve-correct-opcode-for-group-instruction.patch queue-5.10/x86-kprobes-use-int3-instead-of-debug-trap-for-single-step.patch queue-5.10/x86-kprobes-do-not-decode-opcode-in-resume_execution.patch queue-5.10/x86-kprobes-identify-far-indirect-jmp-correctly.patch queue-5.10/kprobes-x86-fix-fall-through-warnings-for-clang.patch queue-5.10/x86-kprobes-move-inline-to-the-beginning-of-the-kprobe_is_ss-declaration.patch