From 8ab458a9b0eec02f39bc5c29c8433fe32fa48d94 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 7 Jan 2020 10:33:34 +0100 Subject: [PATCH] 4.4-stable patches added patches: ftrace-avoid-potential-division-by-zero-in-function-profiler.patch --- ...ivision-by-zero-in-function-profiler.patch | 49 +++++++++++++++++++ queue-4.4/series | 1 + 2 files changed, 50 insertions(+) create mode 100644 queue-4.4/ftrace-avoid-potential-division-by-zero-in-function-profiler.patch diff --git a/queue-4.4/ftrace-avoid-potential-division-by-zero-in-function-profiler.patch b/queue-4.4/ftrace-avoid-potential-division-by-zero-in-function-profiler.patch new file mode 100644 index 00000000000..ab2f7054b64 --- /dev/null +++ b/queue-4.4/ftrace-avoid-potential-division-by-zero-in-function-profiler.patch @@ -0,0 +1,49 @@ +From e31f7939c1c27faa5d0e3f14519eaf7c89e8a69d Mon Sep 17 00:00:00 2001 +From: Wen Yang +Date: Fri, 3 Jan 2020 11:02:48 +0800 +Subject: ftrace: Avoid potential division by zero in function profiler + +From: Wen Yang + +commit e31f7939c1c27faa5d0e3f14519eaf7c89e8a69d upstream. + +The ftrace_profile->counter is unsigned long and +do_div truncates it to 32 bits, which means it can test +non-zero and be truncated to zero for division. +Fix this issue by using div64_ul() instead. + +Link: http://lkml.kernel.org/r/20200103030248.14516-1-wenyang@linux.alibaba.com + +Cc: stable@vger.kernel.org +Fixes: e330b3bcd8319 ("tracing: Show sample std dev in function profiling") +Fixes: 34886c8bc590f ("tracing: add average time in function to function profiler") +Signed-off-by: Wen Yang +Signed-off-by: Steven Rostedt (VMware) +Signed-off-by: Greg Kroah-Hartman + +--- + kernel/trace/ftrace.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/kernel/trace/ftrace.c ++++ b/kernel/trace/ftrace.c +@@ -637,8 +637,7 @@ static int function_stat_show(struct seq + } + + #ifdef CONFIG_FUNCTION_GRAPH_TRACER +- avg = rec->time; +- do_div(avg, rec->counter); ++ avg = div64_ul(rec->time, rec->counter); + if (tracing_thresh && (avg < tracing_thresh)) + goto out; + #endif +@@ -664,7 +663,8 @@ static int function_stat_show(struct seq + * Divide only 1000 for ns^2 -> us^2 conversion. + * trace_print_graph_duration will divide 1000 again. + */ +- do_div(stddev, rec->counter * (rec->counter - 1) * 1000); ++ stddev = div64_ul(stddev, ++ rec->counter * (rec->counter - 1) * 1000); + } + + trace_seq_init(&s); diff --git a/queue-4.4/series b/queue-4.4/series index b87e34b750a..19b2bbb92d6 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -19,3 +19,4 @@ dmaengine-fix-access-to-uninitialized-dma_slave_caps.patch compat_ioctl-block-handle-persistent-reservations.patch gpiolib-fix-up-emulated-open-drain-outputs.patch alsa-cs4236-fix-error-return-comparison-of-an-unsigned-integer.patch +ftrace-avoid-potential-division-by-zero-in-function-profiler.patch -- 2.47.3