From: Greg Kroah-Hartman Date: Tue, 7 Jan 2020 09:33:56 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.14.163~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c51a35a8d29a8ba0d75cb744dae739091bca4d5e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: ftrace-avoid-potential-division-by-zero-in-function-profiler.patch --- diff --git a/queue-4.9/ftrace-avoid-potential-division-by-zero-in-function-profiler.patch b/queue-4.9/ftrace-avoid-potential-division-by-zero-in-function-profiler.patch new file mode 100644 index 00000000000..4b8456107a4 --- /dev/null +++ b/queue-4.9/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 +@@ -609,8 +609,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 +@@ -636,7 +635,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.9/series b/queue-4.9/series index 5113cc575de..cae3ad2b5dc 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -28,3 +28,4 @@ ata-ahci_brcm-fix-ahci-resources-management.patch gpiolib-fix-up-emulated-open-drain-outputs.patch tracing-have-the-histogram-compare-functions-convert-to-u64-first.patch alsa-cs4236-fix-error-return-comparison-of-an-unsigned-integer.patch +ftrace-avoid-potential-division-by-zero-in-function-profiler.patch