Skip to content

Commit 977ad48

Browse files
WangNan0torvalds
authored andcommitted
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 <[email protected]> Signed-off-by: Masami Hiramatsu <[email protected]> Cc: Ingo Molnar <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 5125991 commit 977ad48

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

kernel/kprobes.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2320,6 +2320,12 @@ static void arm_all_kprobes(void)
23202320
if (!kprobes_all_disarmed)
23212321
goto already_enabled;
23222322

2323+
/*
2324+
* optimize_kprobe() called by arm_kprobe() checks
2325+
* kprobes_all_disarmed, so set kprobes_all_disarmed before
2326+
* arm_kprobe.
2327+
*/
2328+
kprobes_all_disarmed = false;
23232329
/* Arming kprobes doesn't optimize kprobe itself */
23242330
for (i = 0; i < KPROBE_TABLE_SIZE; i++) {
23252331
head = &kprobe_table[i];
@@ -2328,7 +2334,6 @@ static void arm_all_kprobes(void)
23282334
arm_kprobe(p);
23292335
}
23302336

2331-
kprobes_all_disarmed = false;
23322337
printk(KERN_INFO "Kprobes globally enabled\n");
23332338

23342339
already_enabled:

0 commit comments

Comments
 (0)