Vasily Gorbik
ec687184c2
s390/ftrace: fix ftrace_update_ftrace_func implementation
commit f8c2602733 upstream.
s390 enforces DYNAMIC_FTRACE if FUNCTION_TRACER is selected.
At the same time implementation of ftrace_caller is not compliant with
HAVE_DYNAMIC_FTRACE since it doesn't provide implementation of
ftrace_update_ftrace_func() and calls ftrace_trace_function() directly.
The subtle difference is that during ftrace code patching ftrace
replaces function tracer via ftrace_update_ftrace_func() and activates
it back afterwards. Unexpected direct calls to ftrace_trace_function()
during ftrace code patching leads to nullptr-dereferences when tracing
is activated for one of functions which are used during code patching.
Those function currently are:
copy_from_kernel_nofault()
copy_from_kernel_nofault_allowed()
preempt_count_sub() [with debug_defconfig]
preempt_count_add() [with debug_defconfig]
Corresponding KASAN report:
BUG: KASAN: nullptr-dereference in function_trace_call+0x316/0x3b0
Read of size 4 at addr 0000000000001e08 by task migration/0/15
CPU: 0 PID: 15 Comm: migration/0 Tainted: G B 5.13.0-41423-g08316af3644d
Hardware name: IBM 3906 M04 704 (LPAR)
Stopper: multi_cpu_stop+0x0/0x3e0 <- stop_machine_cpuslocked+0x1e4/0x218
Call Trace:
[<0000000001f77caa>] show_stack+0x16a/0x1d0
[<0000000001f8de42>] dump_stack+0x15a/0x1b0
[<0000000001f81d56>] print_address_description.constprop.0+0x66/0x2e0
[<000000000082b0ca>] kasan_report+0x152/0x1c0
[<00000000004cfd8e>] function_trace_call+0x316/0x3b0
[<0000000001fb7082>] ftrace_caller+0x7a/0x7e
[<00000000006bb3e6>] copy_from_kernel_nofault_allowed+0x6/0x10
[<00000000006bb42e>] copy_from_kernel_nofault+0x3e/0xd0
[<000000000014605c>] ftrace_make_call+0xb4/0x1f8
[<000000000047a1b4>] ftrace_replace_code+0x134/0x1d8
[<000000000047a6e0>] ftrace_modify_all_code+0x120/0x1d0
[<000000000047a7ec>] __ftrace_modify_code+0x5c/0x78
[<000000000042395c>] multi_cpu_stop+0x224/0x3e0
[<0000000000423212>] cpu_stopper_thread+0x33a/0x5a0
[<0000000000243ff2>] smpboot_thread_fn+0x302/0x708
[<00000000002329ea>] kthread+0x342/0x408
[<00000000001066b2>] __ret_from_fork+0x92/0xf0
[<0000000001fb57fa>] ret_from_fork+0xa/0x30
The buggy address belongs to the page:
page:(____ptrval____) refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1
flags: 0x1ffff00000001000(reserved|node=0|zone=0|lastcpupid=0x1ffff)
raw: 1ffff00000001000 0000040000000048 0000040000000048 0000000000000000
raw: 0000000000000000 0000000000000000 ffffffff00000001 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
0000000000001d00: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
0000000000001d80: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
>0000000000001e00: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
^
0000000000001e80: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
0000000000001f00: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
==================================================================
To fix that introduce ftrace_func callback to be called from
ftrace_caller and update it in ftrace_update_ftrace_func().
Fixes: 4cc9bed034 ("[S390] cleanup ftrace backend functions")
Cc: stable@vger.kernel.org
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-05-16 11:34:13 +09:00
..
2016-08-29 11:05:01 +02:00
2015-11-09 09:10:47 +01:00
2014-03-04 10:41:04 +01:00
2018-05-25 16:12:56 +02:00
2018-04-29 11:31:58 +02:00
2015-10-14 14:32:06 +02:00
2009-12-12 13:08:14 +01:00
2017-11-30 08:39:14 +00:00
2016-06-16 10:48:32 +02:00
2018-04-29 11:31:58 +02:00
2015-10-14 14:32:15 +02:00
2010-05-19 08:36:48 +01:00
2012-07-20 11:15:04 +02:00
2016-06-13 15:58:23 +02:00
2015-02-05 13:35:30 -08:00
2014-05-20 08:58:53 +02:00
2014-05-20 08:58:45 +02:00
2016-03-13 23:55:13 -04:00
2014-05-20 08:58:53 +02:00
2016-06-13 15:58:19 +02:00
2016-03-07 16:54:32 +01:00
2015-10-14 14:32:02 +02:00
2015-10-14 14:32:15 +02:00
2015-11-27 09:24:17 +01:00
2016-08-29 11:05:09 +02:00
2012-07-20 11:15:04 +02:00
2023-05-12 16:42:57 +09:00
2015-06-25 09:39:24 +02:00
2015-07-22 09:58:02 +02:00
2015-03-25 11:49:33 +01:00
2015-12-18 14:59:34 +01:00
2014-01-15 14:48:01 -08:00
2017-07-05 14:40:26 +02:00
2012-07-20 11:15:04 +02:00
2014-12-08 09:42:29 +01:00
2012-07-20 11:15:04 +02:00
2016-03-02 17:01:56 +02:00
2016-08-02 16:11:27 -04:00
2014-10-09 09:14:15 +02:00
2008-08-01 20:42:05 +02:00
2016-08-04 08:50:07 -04:00
2013-01-08 10:57:09 +01:00
2013-11-15 14:08:42 +01:00
2012-07-20 11:15:04 +02:00
2023-05-15 12:36:37 +09:00
2008-08-01 20:42:05 +02:00
2012-03-28 18:30:02 +01:00
2012-07-20 11:15:04 +02:00
2016-08-25 22:47:03 +02:00
2023-05-15 13:59:12 +09:00
2008-08-01 20:42:05 +02:00
2016-06-13 15:58:17 +02:00
2023-05-16 11:34:13 +09:00
2018-05-19 10:27:00 +02:00
2016-06-20 09:55:24 +02:00
2013-11-13 20:21:46 +01:00
2016-07-06 08:46:43 +02:00
2013-08-22 12:20:04 +02:00
2015-03-25 11:49:33 +01:00
2015-10-14 14:32:13 +02:00
2015-08-28 08:04:48 +02:00
2016-06-13 15:58:26 +02:00
2008-08-01 20:42:05 +02:00
2016-06-13 15:58:24 +02:00
2016-01-19 12:14:01 +01:00
2012-11-30 17:47:21 +01:00
2011-12-13 09:26:45 +00:00
2016-06-13 15:58:16 +02:00
2016-08-07 23:47:20 -04:00
2011-12-27 11:27:12 +01:00
2015-04-23 16:52:01 +02:00
2012-05-24 10:10:05 +02:00
2016-06-28 09:33:00 +02:00
2023-05-16 08:29:34 +09:00
2015-10-14 14:32:06 +02:00
2015-07-22 09:57:59 +02:00
2016-04-01 15:00:11 +02:00
2010-06-09 11:12:36 +02:00
2008-08-01 20:42:05 +02:00
2018-04-29 11:31:59 +02:00
2015-03-25 11:49:33 +01:00
2017-09-27 14:39:24 +02:00
2017-09-27 14:39:24 +02:00
2015-08-03 18:40:25 +02:00
2012-09-28 14:31:03 +09:30
2013-09-28 12:46:21 +02:00
2015-10-27 09:33:55 +01:00
2018-04-29 11:32:00 +02:00
2018-05-25 16:12:58 +02:00
2015-09-23 09:18:56 +02:00
2015-11-27 09:24:12 +01:00
2023-05-15 17:01:01 +09:00
2016-03-07 16:54:32 +01:00
2013-10-24 17:17:16 +02:00
2015-11-27 09:24:15 +01:00
2017-12-09 22:01:47 +01:00
2016-01-26 12:45:49 +01:00
2016-09-22 13:42:33 +02:00
2023-05-16 09:04:13 +09:00
2016-06-28 09:32:25 +02:00
2016-06-20 09:54:04 +02:00
2017-10-08 10:26:12 +02:00
2018-04-29 11:31:59 +02:00
2016-01-19 12:14:03 +01:00
2023-05-12 17:16:36 +09:00
2015-11-27 09:24:14 +01:00
2017-12-09 22:01:47 +01:00
2016-06-08 15:16:59 +02:00
2012-10-09 09:47:31 +01:00
2016-06-10 12:07:30 +02:00
2012-09-26 15:44:57 +02:00
2016-04-01 17:20:55 +02:00
2016-06-13 15:58:23 +02:00
2008-08-01 20:42:05 +02:00
2013-08-22 12:20:04 +02:00
2016-07-13 10:58:07 +02:00
2012-07-20 11:15:04 +02:00
2013-02-03 18:16:14 -05:00
2016-06-28 09:32:35 +02:00
2015-11-27 09:24:14 +01:00
2015-03-25 11:49:33 +01:00
2014-09-25 10:52:05 +02:00
2016-06-14 11:55:15 +02:00
2016-06-13 15:58:21 +02:00
2015-02-12 18:54:14 -08:00
2017-12-16 16:25:46 +01:00
2023-05-16 08:20:29 +09:00
2016-01-11 12:27:00 +01:00
2012-10-09 09:47:31 +01:00
2018-04-29 11:31:59 +02:00
2023-05-15 16:57:48 +09:00
2016-07-26 16:19:19 -07:00
2017-09-27 14:39:24 +02:00
2016-06-13 15:58:27 +02:00
2015-03-25 11:49:33 +01:00
2023-05-15 14:55:24 +09:00
2008-08-01 20:42:05 +02:00
2016-10-17 11:25:25 +02:00
2016-10-07 18:46:30 -07:00
2012-07-20 11:15:04 +02:00
2016-01-11 13:01:24 +01:00
2012-11-30 17:47:28 +01:00
2013-08-14 17:14:53 +02:00
2014-10-09 09:14:03 +02:00
2016-08-29 11:05:04 +02:00
2016-02-23 08:56:17 +01:00