From: Sasha Levin Date: Fri, 5 Jul 2019 14:15:10 +0000 (-0400) Subject: Remove ftrace patch that was accidentally added twice X-Git-Tag: v5.1.17~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a15e01d564ad875d4ba66e5f99216c8d6f2fe1bb;p=thirdparty%2Fkernel%2Fstable-queue.git Remove ftrace patch that was accidentally added twice Signed-off-by: Sasha Levin --- diff --git a/queue-4.14/ftrace-x86-remove-possible-deadlock-between-register.patch b/queue-4.14/ftrace-x86-remove-possible-deadlock-between-register.patch deleted file mode 100644 index 5f73b509eef..00000000000 --- a/queue-4.14/ftrace-x86-remove-possible-deadlock-between-register.patch +++ /dev/null @@ -1,189 +0,0 @@ -From 0c5a9db41f4de11debca422d73b07523de010235 Mon Sep 17 00:00:00 2001 -From: Petr Mladek -Date: Thu, 27 Jun 2019 10:13:34 +0200 -Subject: ftrace/x86: Remove possible deadlock between register_kprobe() and - ftrace_run_update_code() - -[ Upstream commit d5b844a2cf507fc7642c9ae80a9d585db3065c28 ] - -The commit 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module text -permissions race") causes a possible deadlock between register_kprobe() -and ftrace_run_update_code() when ftrace is using stop_machine(). - -The existing dependency chain (in reverse order) is: - --> #1 (text_mutex){+.+.}: - validate_chain.isra.21+0xb32/0xd70 - __lock_acquire+0x4b8/0x928 - lock_acquire+0x102/0x230 - __mutex_lock+0x88/0x908 - mutex_lock_nested+0x32/0x40 - register_kprobe+0x254/0x658 - init_kprobes+0x11a/0x168 - do_one_initcall+0x70/0x318 - kernel_init_freeable+0x456/0x508 - kernel_init+0x22/0x150 - ret_from_fork+0x30/0x34 - kernel_thread_starter+0x0/0xc - --> #0 (cpu_hotplug_lock.rw_sem){++++}: - check_prev_add+0x90c/0xde0 - validate_chain.isra.21+0xb32/0xd70 - __lock_acquire+0x4b8/0x928 - lock_acquire+0x102/0x230 - cpus_read_lock+0x62/0xd0 - stop_machine+0x2e/0x60 - arch_ftrace_update_code+0x2e/0x40 - ftrace_run_update_code+0x40/0xa0 - ftrace_startup+0xb2/0x168 - register_ftrace_function+0x64/0x88 - klp_patch_object+0x1a2/0x290 - klp_enable_patch+0x554/0x980 - do_one_initcall+0x70/0x318 - do_init_module+0x6e/0x250 - load_module+0x1782/0x1990 - __s390x_sys_finit_module+0xaa/0xf0 - system_call+0xd8/0x2d0 - - Possible unsafe locking scenario: - - CPU0 CPU1 - ---- ---- - lock(text_mutex); - lock(cpu_hotplug_lock.rw_sem); - lock(text_mutex); - lock(cpu_hotplug_lock.rw_sem); - -It is similar problem that has been solved by the commit 2d1e38f56622b9b -("kprobes: Cure hotplug lock ordering issues"). Many locks are involved. -To be on the safe side, text_mutex must become a low level lock taken -after cpu_hotplug_lock.rw_sem. - -This can't be achieved easily with the current ftrace design. -For example, arm calls set_all_modules_text_rw() already in -ftrace_arch_code_modify_prepare(), see arch/arm/kernel/ftrace.c. -This functions is called: - - + outside stop_machine() from ftrace_run_update_code() - + without stop_machine() from ftrace_module_enable() - -Fortunately, the problematic fix is needed only on x86_64. It is -the only architecture that calls set_all_modules_text_rw() -in ftrace path and supports livepatching at the same time. - -Therefore it is enough to move text_mutex handling from the generic -kernel/trace/ftrace.c into arch/x86/kernel/ftrace.c: - - ftrace_arch_code_modify_prepare() - ftrace_arch_code_modify_post_process() - -This patch basically reverts the ftrace part of the problematic -commit 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module -text permissions race"). And provides x86_64 specific-fix. - -Some refactoring of the ftrace code will be needed when livepatching -is implemented for arm or nds32. These architectures call -set_all_modules_text_rw() and use stop_machine() at the same time. - -Link: http://lkml.kernel.org/r/20190627081334.12793-1-pmladek@suse.com - -Fixes: 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module text permissions race") -Acked-by: Thomas Gleixner -Reported-by: Miroslav Benes -Reviewed-by: Miroslav Benes -Reviewed-by: Josh Poimboeuf -Signed-off-by: Petr Mladek -[ - As reviewed by Miroslav Benes , removed return value of - ftrace_run_update_code() as it is a void function. -] -Signed-off-by: Steven Rostedt (VMware) -Signed-off-by: Sasha Levin ---- - arch/x86/kernel/ftrace.c | 3 +++ - kernel/trace/ftrace.c | 10 +--------- - 2 files changed, 4 insertions(+), 9 deletions(-) - -diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c -index c020ba4b7eb6..ccc2b9d2956a 100644 ---- a/arch/x86/kernel/ftrace.c -+++ b/arch/x86/kernel/ftrace.c -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #include - -@@ -36,6 +37,7 @@ - - int ftrace_arch_code_modify_prepare(void) - { -+ mutex_lock(&text_mutex); - set_kernel_text_rw(); - set_all_modules_text_rw(); - return 0; -@@ -45,6 +47,7 @@ int ftrace_arch_code_modify_post_process(void) - { - set_all_modules_text_ro(); - set_kernel_text_ro(); -+ mutex_unlock(&text_mutex); - return 0; - } - -diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c -index ff3c8ca907c4..c4a0ad18c859 100644 ---- a/kernel/trace/ftrace.c -+++ b/kernel/trace/ftrace.c -@@ -34,7 +34,6 @@ - #include - #include - #include --#include - - #include - -@@ -2693,12 +2692,10 @@ static void ftrace_run_update_code(int command) - { - int ret; - -- mutex_lock(&text_mutex); -- - ret = ftrace_arch_code_modify_prepare(); - FTRACE_WARN_ON(ret); - if (ret) -- goto out_unlock; -+ return; - - /* - * By default we use stop_machine() to modify the code. -@@ -2710,9 +2707,6 @@ static void ftrace_run_update_code(int command) - - ret = ftrace_arch_code_modify_post_process(); - FTRACE_WARN_ON(ret); -- --out_unlock: -- mutex_unlock(&text_mutex); - } - - static void ftrace_run_modify_code(struct ftrace_ops *ops, int command, -@@ -5800,7 +5794,6 @@ void ftrace_module_enable(struct module *mod) - struct ftrace_page *pg; - - mutex_lock(&ftrace_lock); -- mutex_lock(&text_mutex); - - if (ftrace_disabled) - goto out_unlock; -@@ -5861,7 +5854,6 @@ void ftrace_module_enable(struct module *mod) - ftrace_arch_code_modify_post_process(); - - out_unlock: -- mutex_unlock(&text_mutex); - mutex_unlock(&ftrace_lock); - - process_cached_mods(mod->name); --- -2.20.1 - diff --git a/queue-4.14/series b/queue-4.14/series index aff960e8282..4182d5f82a5 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -46,4 +46,3 @@ vhost_net-fix-possible-infinite-loop.patch vhost-vsock-add-weight-support.patch vhost-scsi-add-weight-support.patch tty-rocket-fix-incorrect-forward-declaration-of-rp_i.patch -ftrace-x86-remove-possible-deadlock-between-register.patch diff --git a/queue-4.19/ftrace-x86-remove-possible-deadlock-between-register.patch b/queue-4.19/ftrace-x86-remove-possible-deadlock-between-register.patch deleted file mode 100644 index 069b956ed2b..00000000000 --- a/queue-4.19/ftrace-x86-remove-possible-deadlock-between-register.patch +++ /dev/null @@ -1,189 +0,0 @@ -From 67064982a48219091d421b3a3782a3eb5035a268 Mon Sep 17 00:00:00 2001 -From: Petr Mladek -Date: Thu, 27 Jun 2019 10:13:34 +0200 -Subject: ftrace/x86: Remove possible deadlock between register_kprobe() and - ftrace_run_update_code() - -[ Upstream commit d5b844a2cf507fc7642c9ae80a9d585db3065c28 ] - -The commit 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module text -permissions race") causes a possible deadlock between register_kprobe() -and ftrace_run_update_code() when ftrace is using stop_machine(). - -The existing dependency chain (in reverse order) is: - --> #1 (text_mutex){+.+.}: - validate_chain.isra.21+0xb32/0xd70 - __lock_acquire+0x4b8/0x928 - lock_acquire+0x102/0x230 - __mutex_lock+0x88/0x908 - mutex_lock_nested+0x32/0x40 - register_kprobe+0x254/0x658 - init_kprobes+0x11a/0x168 - do_one_initcall+0x70/0x318 - kernel_init_freeable+0x456/0x508 - kernel_init+0x22/0x150 - ret_from_fork+0x30/0x34 - kernel_thread_starter+0x0/0xc - --> #0 (cpu_hotplug_lock.rw_sem){++++}: - check_prev_add+0x90c/0xde0 - validate_chain.isra.21+0xb32/0xd70 - __lock_acquire+0x4b8/0x928 - lock_acquire+0x102/0x230 - cpus_read_lock+0x62/0xd0 - stop_machine+0x2e/0x60 - arch_ftrace_update_code+0x2e/0x40 - ftrace_run_update_code+0x40/0xa0 - ftrace_startup+0xb2/0x168 - register_ftrace_function+0x64/0x88 - klp_patch_object+0x1a2/0x290 - klp_enable_patch+0x554/0x980 - do_one_initcall+0x70/0x318 - do_init_module+0x6e/0x250 - load_module+0x1782/0x1990 - __s390x_sys_finit_module+0xaa/0xf0 - system_call+0xd8/0x2d0 - - Possible unsafe locking scenario: - - CPU0 CPU1 - ---- ---- - lock(text_mutex); - lock(cpu_hotplug_lock.rw_sem); - lock(text_mutex); - lock(cpu_hotplug_lock.rw_sem); - -It is similar problem that has been solved by the commit 2d1e38f56622b9b -("kprobes: Cure hotplug lock ordering issues"). Many locks are involved. -To be on the safe side, text_mutex must become a low level lock taken -after cpu_hotplug_lock.rw_sem. - -This can't be achieved easily with the current ftrace design. -For example, arm calls set_all_modules_text_rw() already in -ftrace_arch_code_modify_prepare(), see arch/arm/kernel/ftrace.c. -This functions is called: - - + outside stop_machine() from ftrace_run_update_code() - + without stop_machine() from ftrace_module_enable() - -Fortunately, the problematic fix is needed only on x86_64. It is -the only architecture that calls set_all_modules_text_rw() -in ftrace path and supports livepatching at the same time. - -Therefore it is enough to move text_mutex handling from the generic -kernel/trace/ftrace.c into arch/x86/kernel/ftrace.c: - - ftrace_arch_code_modify_prepare() - ftrace_arch_code_modify_post_process() - -This patch basically reverts the ftrace part of the problematic -commit 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module -text permissions race"). And provides x86_64 specific-fix. - -Some refactoring of the ftrace code will be needed when livepatching -is implemented for arm or nds32. These architectures call -set_all_modules_text_rw() and use stop_machine() at the same time. - -Link: http://lkml.kernel.org/r/20190627081334.12793-1-pmladek@suse.com - -Fixes: 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module text permissions race") -Acked-by: Thomas Gleixner -Reported-by: Miroslav Benes -Reviewed-by: Miroslav Benes -Reviewed-by: Josh Poimboeuf -Signed-off-by: Petr Mladek -[ - As reviewed by Miroslav Benes , removed return value of - ftrace_run_update_code() as it is a void function. -] -Signed-off-by: Steven Rostedt (VMware) -Signed-off-by: Sasha Levin ---- - arch/x86/kernel/ftrace.c | 3 +++ - kernel/trace/ftrace.c | 10 +--------- - 2 files changed, 4 insertions(+), 9 deletions(-) - -diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c -index 9f033dfd2766..50d309662d78 100644 ---- a/arch/x86/kernel/ftrace.c -+++ b/arch/x86/kernel/ftrace.c -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #include - -@@ -35,6 +36,7 @@ - - int ftrace_arch_code_modify_prepare(void) - { -+ mutex_lock(&text_mutex); - set_kernel_text_rw(); - set_all_modules_text_rw(); - return 0; -@@ -44,6 +46,7 @@ int ftrace_arch_code_modify_post_process(void) - { - set_all_modules_text_ro(); - set_kernel_text_ro(); -+ mutex_unlock(&text_mutex); - return 0; - } - -diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c -index 0a0bb839ac5e..118ecce14386 100644 ---- a/kernel/trace/ftrace.c -+++ b/kernel/trace/ftrace.c -@@ -35,7 +35,6 @@ - #include - #include - #include --#include - - #include - -@@ -2628,12 +2627,10 @@ static void ftrace_run_update_code(int command) - { - int ret; - -- mutex_lock(&text_mutex); -- - ret = ftrace_arch_code_modify_prepare(); - FTRACE_WARN_ON(ret); - if (ret) -- goto out_unlock; -+ return; - - /* - * By default we use stop_machine() to modify the code. -@@ -2645,9 +2642,6 @@ static void ftrace_run_update_code(int command) - - ret = ftrace_arch_code_modify_post_process(); - FTRACE_WARN_ON(ret); -- --out_unlock: -- mutex_unlock(&text_mutex); - } - - static void ftrace_run_modify_code(struct ftrace_ops *ops, int command, -@@ -5771,7 +5765,6 @@ void ftrace_module_enable(struct module *mod) - struct ftrace_page *pg; - - mutex_lock(&ftrace_lock); -- mutex_lock(&text_mutex); - - if (ftrace_disabled) - goto out_unlock; -@@ -5833,7 +5826,6 @@ void ftrace_module_enable(struct module *mod) - ftrace_arch_code_modify_post_process(); - - out_unlock: -- mutex_unlock(&text_mutex); - mutex_unlock(&ftrace_lock); - - process_cached_mods(mod->name); --- -2.20.1 - diff --git a/queue-4.19/series b/queue-4.19/series index 377d4c97ee4..87309e9dd32 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -61,7 +61,6 @@ ftrace-x86-remove-possible-deadlock-between-register_kprobe-and-ftrace_run_updat mm-vmscan.c-prevent-useless-kswapd-loops.patch btrfs-ensure-replaced-device-doesn-t-have-pending-chunk-allocation.patch tty-rocket-fix-incorrect-forward-declaration-of-rp_i.patch -ftrace-x86-remove-possible-deadlock-between-register.patch mlxsw-spectrum-handle-vlan-device-unlinking.patch net-smc-move-unhash-before-release-of-clcsock.patch media-s5p-mfc-fix-incorrect-bus-assignment-in-virtua.patch diff --git a/queue-5.1/ftrace-x86-remove-possible-deadlock-between-register.patch b/queue-5.1/ftrace-x86-remove-possible-deadlock-between-register.patch deleted file mode 100644 index 004ccb93b9f..00000000000 --- a/queue-5.1/ftrace-x86-remove-possible-deadlock-between-register.patch +++ /dev/null @@ -1,189 +0,0 @@ -From ec581b3fd5576fce9d4af96f937079ed695341ac Mon Sep 17 00:00:00 2001 -From: Petr Mladek -Date: Thu, 27 Jun 2019 10:13:34 +0200 -Subject: ftrace/x86: Remove possible deadlock between register_kprobe() and - ftrace_run_update_code() - -[ Upstream commit d5b844a2cf507fc7642c9ae80a9d585db3065c28 ] - -The commit 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module text -permissions race") causes a possible deadlock between register_kprobe() -and ftrace_run_update_code() when ftrace is using stop_machine(). - -The existing dependency chain (in reverse order) is: - --> #1 (text_mutex){+.+.}: - validate_chain.isra.21+0xb32/0xd70 - __lock_acquire+0x4b8/0x928 - lock_acquire+0x102/0x230 - __mutex_lock+0x88/0x908 - mutex_lock_nested+0x32/0x40 - register_kprobe+0x254/0x658 - init_kprobes+0x11a/0x168 - do_one_initcall+0x70/0x318 - kernel_init_freeable+0x456/0x508 - kernel_init+0x22/0x150 - ret_from_fork+0x30/0x34 - kernel_thread_starter+0x0/0xc - --> #0 (cpu_hotplug_lock.rw_sem){++++}: - check_prev_add+0x90c/0xde0 - validate_chain.isra.21+0xb32/0xd70 - __lock_acquire+0x4b8/0x928 - lock_acquire+0x102/0x230 - cpus_read_lock+0x62/0xd0 - stop_machine+0x2e/0x60 - arch_ftrace_update_code+0x2e/0x40 - ftrace_run_update_code+0x40/0xa0 - ftrace_startup+0xb2/0x168 - register_ftrace_function+0x64/0x88 - klp_patch_object+0x1a2/0x290 - klp_enable_patch+0x554/0x980 - do_one_initcall+0x70/0x318 - do_init_module+0x6e/0x250 - load_module+0x1782/0x1990 - __s390x_sys_finit_module+0xaa/0xf0 - system_call+0xd8/0x2d0 - - Possible unsafe locking scenario: - - CPU0 CPU1 - ---- ---- - lock(text_mutex); - lock(cpu_hotplug_lock.rw_sem); - lock(text_mutex); - lock(cpu_hotplug_lock.rw_sem); - -It is similar problem that has been solved by the commit 2d1e38f56622b9b -("kprobes: Cure hotplug lock ordering issues"). Many locks are involved. -To be on the safe side, text_mutex must become a low level lock taken -after cpu_hotplug_lock.rw_sem. - -This can't be achieved easily with the current ftrace design. -For example, arm calls set_all_modules_text_rw() already in -ftrace_arch_code_modify_prepare(), see arch/arm/kernel/ftrace.c. -This functions is called: - - + outside stop_machine() from ftrace_run_update_code() - + without stop_machine() from ftrace_module_enable() - -Fortunately, the problematic fix is needed only on x86_64. It is -the only architecture that calls set_all_modules_text_rw() -in ftrace path and supports livepatching at the same time. - -Therefore it is enough to move text_mutex handling from the generic -kernel/trace/ftrace.c into arch/x86/kernel/ftrace.c: - - ftrace_arch_code_modify_prepare() - ftrace_arch_code_modify_post_process() - -This patch basically reverts the ftrace part of the problematic -commit 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module -text permissions race"). And provides x86_64 specific-fix. - -Some refactoring of the ftrace code will be needed when livepatching -is implemented for arm or nds32. These architectures call -set_all_modules_text_rw() and use stop_machine() at the same time. - -Link: http://lkml.kernel.org/r/20190627081334.12793-1-pmladek@suse.com - -Fixes: 9f255b632bf12c4dd7 ("module: Fix livepatch/ftrace module text permissions race") -Acked-by: Thomas Gleixner -Reported-by: Miroslav Benes -Reviewed-by: Miroslav Benes -Reviewed-by: Josh Poimboeuf -Signed-off-by: Petr Mladek -[ - As reviewed by Miroslav Benes , removed return value of - ftrace_run_update_code() as it is a void function. -] -Signed-off-by: Steven Rostedt (VMware) -Signed-off-by: Sasha Levin ---- - arch/x86/kernel/ftrace.c | 3 +++ - kernel/trace/ftrace.c | 10 +--------- - 2 files changed, 4 insertions(+), 9 deletions(-) - -diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c -index 6e0c0ed8e4bf..ba3656405fcc 100644 ---- a/arch/x86/kernel/ftrace.c -+++ b/arch/x86/kernel/ftrace.c -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #include - -@@ -35,6 +36,7 @@ - - int ftrace_arch_code_modify_prepare(void) - { -+ mutex_lock(&text_mutex); - set_kernel_text_rw(); - set_all_modules_text_rw(); - return 0; -@@ -44,6 +46,7 @@ int ftrace_arch_code_modify_post_process(void) - { - set_all_modules_text_ro(); - set_kernel_text_ro(); -+ mutex_unlock(&text_mutex); - return 0; - } - -diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c -index 2469d54b3e43..6b6fa18f0a02 100644 ---- a/kernel/trace/ftrace.c -+++ b/kernel/trace/ftrace.c -@@ -34,7 +34,6 @@ - #include - #include - #include --#include - - #include - -@@ -2615,12 +2614,10 @@ static void ftrace_run_update_code(int command) - { - int ret; - -- mutex_lock(&text_mutex); -- - ret = ftrace_arch_code_modify_prepare(); - FTRACE_WARN_ON(ret); - if (ret) -- goto out_unlock; -+ return; - - /* - * By default we use stop_machine() to modify the code. -@@ -2632,9 +2629,6 @@ static void ftrace_run_update_code(int command) - - ret = ftrace_arch_code_modify_post_process(); - FTRACE_WARN_ON(ret); -- --out_unlock: -- mutex_unlock(&text_mutex); - } - - static void ftrace_run_modify_code(struct ftrace_ops *ops, int command, -@@ -5788,7 +5782,6 @@ void ftrace_module_enable(struct module *mod) - struct ftrace_page *pg; - - mutex_lock(&ftrace_lock); -- mutex_lock(&text_mutex); - - if (ftrace_disabled) - goto out_unlock; -@@ -5850,7 +5843,6 @@ void ftrace_module_enable(struct module *mod) - ftrace_arch_code_modify_post_process(); - - out_unlock: -- mutex_unlock(&text_mutex); - mutex_unlock(&ftrace_lock); - - process_cached_mods(mod->name); --- -2.20.1 - diff --git a/queue-5.1/series b/queue-5.1/series index 2f625132275..dd11ded6377 100644 --- a/queue-5.1/series +++ b/queue-5.1/series @@ -81,5 +81,4 @@ ftrace-x86-remove-possible-deadlock-between-register_kprobe-and-ftrace_run_updat mm-vmscan.c-prevent-useless-kswapd-loops.patch btrfs-ensure-replaced-device-doesn-t-have-pending-chunk-allocation.patch tty-rocket-fix-incorrect-forward-declaration-of-rp_i.patch -ftrace-x86-remove-possible-deadlock-between-register.patch s390-mm-fix-pxd_bad-with-folded-page-tables.patch