Patch "kprobes: Skip clearing aggrprobe's post_handler in kprobe-on-ftrace case" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    kprobes: Skip clearing aggrprobe's post_handler in kprobe-on-ftrace case

to the 6.0-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:
     kprobes-skip-clearing-aggrprobe-s-post_handler-in-kp.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 0a098ad26b743fbf96c74d3ae8187ed5a53e3a65
Author: Li Huafei <lihuafei1@xxxxxxxxxx>
Date:   Fri Nov 18 10:15:34 2022 +0900

    kprobes: Skip clearing aggrprobe's post_handler in kprobe-on-ftrace case
    
    [ Upstream commit 5dd7caf0bdc5d0bae7cf9776b4d739fb09bd5ebb ]
    
    In __unregister_kprobe_top(), if the currently unregistered probe has
    post_handler but other child probes of the aggrprobe do not have
    post_handler, the post_handler of the aggrprobe is cleared. If this is
    a ftrace-based probe, there is a problem. In later calls to
    disarm_kprobe(), we will use kprobe_ftrace_ops because post_handler is
    NULL. But we're armed with kprobe_ipmodify_ops. This triggers a WARN in
    __disarm_kprobe_ftrace() and may even cause use-after-free:
    
      Failed to disarm kprobe-ftrace at kernel_clone+0x0/0x3c0 (error -2)
      WARNING: CPU: 5 PID: 137 at kernel/kprobes.c:1135 __disarm_kprobe_ftrace.isra.21+0xcf/0xe0
      Modules linked in: testKprobe_007(-)
      CPU: 5 PID: 137 Comm: rmmod Not tainted 6.1.0-rc4-dirty #18
      [...]
      Call Trace:
       <TASK>
       __disable_kprobe+0xcd/0xe0
       __unregister_kprobe_top+0x12/0x150
       ? mutex_lock+0xe/0x30
       unregister_kprobes.part.23+0x31/0xa0
       unregister_kprobe+0x32/0x40
       __x64_sys_delete_module+0x15e/0x260
       ? do_user_addr_fault+0x2cd/0x6b0
       do_syscall_64+0x3a/0x90
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
       [...]
    
    For the kprobe-on-ftrace case, we keep the post_handler setting to
    identify this aggrprobe armed with kprobe_ipmodify_ops. This way we
    can disarm it correctly.
    
    Link: https://lore.kernel.org/all/20221112070000.35299-1-lihuafei1@xxxxxxxxxx/
    
    Fixes: 0bc11ed5ab60 ("kprobes: Allow kprobes coexist with livepatch")
    Reported-by: Zhao Gongyi <zhaogongyi@xxxxxxxxxx>
    Suggested-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
    Signed-off-by: Li Huafei <lihuafei1@xxxxxxxxxx>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index 917b92ae2382..6d2a8623ec7b 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -1762,7 +1762,13 @@ static int __unregister_kprobe_top(struct kprobe *p)
 				if ((list_p != p) && (list_p->post_handler))
 					goto noclean;
 			}
-			ap->post_handler = NULL;
+			/*
+			 * For the kprobe-on-ftrace case, we keep the
+			 * post_handler setting to identify this aggrprobe
+			 * armed with kprobe_ipmodify_ops.
+			 */
+			if (!kprobe_ftrace(ap))
+				ap->post_handler = NULL;
 		}
 noclean:
 		/*



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux