Re: [PATCH 1/2] kcsan: Fix function matching in report
From: Paul E. McKenney
Date: Fri Apr 10 2020 - 16:38:17 EST
On Fri, Apr 10, 2020 at 06:44:17PM +0200, Marco Elver wrote:
> Pass string length as returned by scnprintf() to strnstr(), since
> strnstr() searches exactly len bytes in haystack, even if it contains a
> NUL-terminator before haystack+len.
>
> Signed-off-by: Marco Elver <elver@xxxxxxxxxx>
I queued both for testing and review, thank you, Marco!
Thanx, Paul
> ---
> kernel/kcsan/report.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/kernel/kcsan/report.c b/kernel/kcsan/report.c
> index ddc18f1224a4..cf41d63dd0cd 100644
> --- a/kernel/kcsan/report.c
> +++ b/kernel/kcsan/report.c
> @@ -192,11 +192,11 @@ skip_report(enum kcsan_value_change value_change, unsigned long top_frame)
> * maintainers.
> */
> char buf[64];
> + int len = scnprintf(buf, sizeof(buf), "%ps", (void *)top_frame);
>
> - snprintf(buf, sizeof(buf), "%ps", (void *)top_frame);
> - if (!strnstr(buf, "rcu_", sizeof(buf)) &&
> - !strnstr(buf, "_rcu", sizeof(buf)) &&
> - !strnstr(buf, "_srcu", sizeof(buf)))
> + if (!strnstr(buf, "rcu_", len) &&
> + !strnstr(buf, "_rcu", len) &&
> + !strnstr(buf, "_srcu", len))
> return true;
> }
>
> @@ -262,15 +262,15 @@ static const char *get_thread_desc(int task_id)
> static int get_stack_skipnr(const unsigned long stack_entries[], int num_entries)
> {
> char buf[64];
> + int len;
> int skip = 0;
>
> for (; skip < num_entries; ++skip) {
> - snprintf(buf, sizeof(buf), "%ps", (void *)stack_entries[skip]);
> - if (!strnstr(buf, "csan_", sizeof(buf)) &&
> - !strnstr(buf, "tsan_", sizeof(buf)) &&
> - !strnstr(buf, "_once_size", sizeof(buf))) {
> + len = scnprintf(buf, sizeof(buf), "%ps", (void *)stack_entries[skip]);
> + if (!strnstr(buf, "csan_", len) &&
> + !strnstr(buf, "tsan_", len) &&
> + !strnstr(buf, "_once_size", len))
> break;
> - }
> }
> return skip;
> }
> --
> 2.26.0.110.g2183baf09c-goog
>