kprobes: set kprobes_all_disarmed earlier to enable re-optimization.
In original code, the probed instruction doesn't get optimized after echo 0 > /sys/kernel/debug/kprobes/enabled echo 1 > /sys/kernel/debug/kprobes/enabled This is because original code checks kprobes_all_disarmed in optimize_kprobe(), but this flag is turned off after calling that function. Therefore, optimize_kprobe() will see kprobes_all_disarmed == true and doesn't do the optimization. This patch simply turns off kprobes_all_disarmed earlier to enable optimization. Signed-off-by: Wang Nan <wangnan0@huawei.com> Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Ingo Molnar <mingo@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5125991c9a
commit
977ad481b6
|
@ -2320,6 +2320,12 @@ static void arm_all_kprobes(void)
|
|||
if (!kprobes_all_disarmed)
|
||||
goto already_enabled;
|
||||
|
||||
/*
|
||||
* optimize_kprobe() called by arm_kprobe() checks
|
||||
* kprobes_all_disarmed, so set kprobes_all_disarmed before
|
||||
* arm_kprobe.
|
||||
*/
|
||||
kprobes_all_disarmed = false;
|
||||
/* Arming kprobes doesn't optimize kprobe itself */
|
||||
for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
|
||||
head = &kprobe_table[i];
|
||||
|
@ -2328,7 +2334,6 @@ static void arm_all_kprobes(void)
|
|||
arm_kprobe(p);
|
||||
}
|
||||
|
||||
kprobes_all_disarmed = false;
|
||||
printk(KERN_INFO "Kprobes globally enabled\n");
|
||||
|
||||
already_enabled:
|
||||
|
|
Loading…
Reference in New Issue