AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/07/25 22:36 flow patch-triage
0m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only modifies user-space tools and tests in the `tools/` directory by replacing `fprintf` with `fputc` or `putchar` for single characters. It does not make any functional changes to the kernel code itself.",
  "WorthFuzzing": false
}

1/1 2026/07/25 22:36 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit a58fce0405ce1c54810d6c55d5ead118907e0de0\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Sat Jul 25 22:36:02 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c\nindex 8bfcff9e2f6394..76abd3f4fbcbc5 100644\n--- a/tools/bpf/bpftool/common.c\n+++ b/tools/bpf/bpftool/common.c\n@@ -53,7 +53,7 @@ void p_err(const char *fmt, ...)\n \t} else {\n \t\tfprintf(stderr, \"Error: \");\n \t\tvfprintf(stderr, fmt, ap);\n-\t\tfprintf(stderr, \"\\n\");\n+\t\tfputc(stderr, '\\n');\n \t}\n \tva_end(ap);\n }\n@@ -67,7 +67,7 @@ void p_info(const char *fmt, ...)\n \n \tva_start(ap, fmt);\n \tvfprintf(stderr, fmt, ap);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tva_end(ap);\n }\n \ndiff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c\nindex c91e1a6e1a1eca..aecfc778625f71 100644\n--- a/tools/bpf/bpftool/main.c\n+++ b/tools/bpf/bpftool/main.c\n@@ -273,7 +273,7 @@ void fprint_hex(FILE *f, void *arg, unsigned int n, const char *sep)\n \t\tif (!i)\n \t\t\t/* nothing */;\n \t\telse if (!(i % 16))\n-\t\t\tfprintf(f, \"\\n\");\n+\t\t\tfputc(f, '\\n');\n \t\telse if (!(i % 8))\n \t\t\tfprintf(f, \"  \");\n \t\telse\ndiff --git a/tools/bpf/bpftool/netlink_dumper.h b/tools/bpf/bpftool/netlink_dumper.h\nindex 96318106fb4973..bf0919b4f52ab8 100644\n--- a/tools/bpf/bpftool/netlink_dumper.h\n+++ b/tools/bpf/bpftool/netlink_dumper.h\n@@ -25,7 +25,7 @@\n \tif (json_output)\t\t\t\t\\\n \t\tjsonw_start_object(json_wtr);\t\t\\\n \telse\t\t\t\t\t\t\\\n-\t\tfprintf(stdout, \"{\");\t\t\t\\\n+\t\tputchar('{');\t\t\t\t\\\n }\n \n #define NET_END_OBJECT_NESTED\t\t\t\t\\\n@@ -33,7 +33,7 @@\n \tif (json_output)\t\t\t\t\\\n \t\tjsonw_end_object(json_wtr);\t\t\\\n \telse\t\t\t\t\t\t\\\n-\t\tfprintf(stdout, \"}\");\t\t\t\\\n+\t\tputchar('}');\t\t\t\t\\\n }\n \n #define NET_END_OBJECT\t\t\t\t\t\\\n@@ -47,7 +47,7 @@\n \tif (json_output)\t\t\t\t\\\n \t\tjsonw_end_object(json_wtr);\t\t\\\n \telse\t\t\t\t\t\t\\\n-\t\tfprintf(stdout, \"\\n\");\t\t\t\\\n+\t\tputchar('\\n');\t\t\t\t\\\n }\n \n #define NET_START_ARRAY(name, fmt_str)\t\t\t\\\ndiff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c\nindex a9f730d407a929..d27cb9d4986093 100644\n--- a/tools/bpf/bpftool/prog.c\n+++ b/tools/bpf/bpftool/prog.c\n@@ -1266,7 +1266,7 @@ static void hex_print(void *data, unsigned int size, FILE *f)\n \t\t\tfprintf(f, \"%c%s\", c, j == i + 7 ? \" \" : \"\");\n \t\t}\n \n-\t\tfprintf(f, \"\\n\");\n+\t\tfputc(f, '\\n');\n \t}\n }\n \ndiff --git a/tools/gpio/gpio-event-mon.c b/tools/gpio/gpio-event-mon.c\nindex b70813b0bf8efa..e12e14780c0e45 100644\n--- a/tools/gpio/gpio-event-mon.c\n+++ b/tools/gpio/gpio-event-mon.c\n@@ -121,7 +121,7 @@ int monitor_device(const char *device_name,\n \t\tdefault:\n \t\t\tfprintf(stdout, \"unknown event\");\n \t\t}\n-\t\tfprintf(stdout, \"\\n\");\n+\t\tputchar('\\n');\n \n \t\ti++;\n \t\tif (i == loops)\ndiff --git a/tools/gpio/gpio-hammer.c b/tools/gpio/gpio-hammer.c\nindex ba0866eb358145..b76c94fee04d09 100644\n--- a/tools/gpio/gpio-hammer.c\n+++ b/tools/gpio/gpio-hammer.c\n@@ -87,7 +87,7 @@ int hammer_device(const char *device_name, unsigned int *lines, int num_lines,\n \t\tif (j == sizeof(swirr) - 1)\n \t\t\tj = 0;\n \n-\t\tfprintf(stdout, \"[\");\n+\t\tputchar('[');\n \t\tfor (i = 0; i \u003c num_lines; i++) {\n \t\t\tfprintf(stdout, \"%u: %d\", lines[i],\n \t\t\t\tgpiotools_test_bit(values.bits, i));\n@@ -101,7 +101,7 @@ int hammer_device(const char *device_name, unsigned int *lines, int num_lines,\n \t\tif (loops \u0026\u0026 iteration == loops)\n \t\t\tbreak;\n \t}\n-\tfprintf(stdout, \"\\n\");\n+\tputchar('\\n');\n \tret = 0;\n \n exit_close_error:\ndiff --git a/tools/gpio/lsgpio.c b/tools/gpio/lsgpio.c\nindex 52a0be45410c97..abb2c6fbc3d7ca 100644\n--- a/tools/gpio/lsgpio.c\n+++ b/tools/gpio/lsgpio.c\n@@ -152,9 +152,9 @@ int list_device(const char *device_name)\n \t\tif (linfo.flags) {\n \t\t\tfprintf(stdout, \" [\");\n \t\t\tprint_attributes(\u0026linfo);\n-\t\t\tfprintf(stdout, \"]\");\n+\t\t\tputchar(']');\n \t\t}\n-\t\tfprintf(stdout, \"\\n\");\n+\t\tputchar('\\n');\n \n \t}\n \ndiff --git a/tools/include/nolibc/err.h b/tools/include/nolibc/err.h\nindex e22ae87a728920..89c9a3d3bc7733 100644\n--- a/tools/include/nolibc/err.h\n+++ b/tools/include/nolibc/err.h\n@@ -27,7 +27,7 @@ void vwarnx(const char *fmt, va_list args)\n {\n \tfprintf(stderr, \"%s: \", program_invocation_short_name);\n \tvfprintf(stderr, fmt, args);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n }\n \n static __attribute__((unused))\ndiff --git a/tools/mm/page_owner_sort.c b/tools/mm/page_owner_sort.c\nindex e6954909401c8e..e3ab1db44b154e 100644\n--- a/tools/mm/page_owner_sort.c\n+++ b/tools/mm/page_owner_sort.c\n@@ -867,7 +867,7 @@ int main(int argc, char **argv)\n \t\t\t}\n \t\t\tif (cull \u0026 CULL_STACKTRACE)\n \t\t\t\tfprintf(fout, \":\\n%s\", list[i].stacktrace);\n-\t\t\tfprintf(fout, \"\\n\");\n+\t\t\tfputc(fout, '\\n');\n \t\t}\n \t}\n \ndiff --git a/tools/net/ynl/ynltool/main.c b/tools/net/ynl/ynltool/main.c\nindex 5d0f428eed0a7f..245d7f58c8fb65 100644\n--- a/tools/net/ynl/ynltool/main.c\n+++ b/tools/net/ynl/ynltool/main.c\n@@ -156,7 +156,7 @@ void p_err(const char *fmt, ...)\n \t} else {\n \t\tfprintf(stderr, \"Error: \");\n \t\tvfprintf(stderr, fmt, ap);\n-\t\tfprintf(stderr, \"\\n\");\n+\t\tfputc(stderr, '\\n');\n \t}\n \tva_end(ap);\n }\n@@ -170,7 +170,7 @@ void p_info(const char *fmt, ...)\n \n \tva_start(ap, fmt);\n \tvfprintf(stderr, fmt, ap);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tva_end(ap);\n }\n \ndiff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c\nindex 118c3de2f293ee..b6d27d326b8ad9 100644\n--- a/tools/objtool/builtin-check.c\n+++ b/tools/objtool/builtin-check.c\n@@ -297,7 +297,7 @@ int make_backup(void)\n \t\t\tfprintf(stderr, \" %s\", arg);\n \t}\n \n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \treturn 0;\n }\n \ndiff --git a/tools/objtool/disas.c b/tools/objtool/disas.c\nindex e6a54a83605c90..339d1d5690c420 100644\n--- a/tools/objtool/disas.c\n+++ b/tools/objtool/disas.c\n@@ -537,7 +537,7 @@ void disas_print_insn(FILE *stream, struct disas_context *dctx,\n \t\treturn;\n \n \tif (strcmp(format, \"\\n\") == 0) {\n-\t\tfprintf(stream, \"\\n\");\n+\t\tfputc(stream, '\\n');\n \t\treturn;\n \t}\n \ndiff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c\nindex c9584dbedf77af..fc9b6b18eded9e 100644\n--- a/tools/perf/builtin-c2c.c\n+++ b/tools/perf/builtin-c2c.c\n@@ -2511,7 +2511,7 @@ static void print_cacheline(struct c2c_hists *c2c_hists,\n \t\thists__fprintf_headers(\u0026c2c_hists-\u003ehists, out);\n \t\tonce = true;\n \t} else {\n-\t\tfprintf(out, \"\\n\");\n+\t\tfputc(out, '\\n');\n \t}\n \n \tfprintf(out, \"  ----------------------------------------------------------------------\\n\");\n@@ -2590,15 +2590,15 @@ static void perf_c2c__hists_fprintf(FILE *out, struct perf_session *session)\n \tsetup_pager();\n \n \tprint_c2c__display_stats(out);\n-\tfprintf(out, \"\\n\");\n+\tfputc(out, '\\n');\n \tprint_shared_cacheline_info(out);\n-\tfprintf(out, \"\\n\");\n+\tfputc(out, '\\n');\n \tprint_c2c_info(out, session);\n \n \tif (c2c.stats_only)\n \t\treturn;\n \n-\tfprintf(out, \"\\n\");\n+\tfputc(out, '\\n');\n \tfprintf(out, \"=================================================\\n\");\n \tfprintf(out, \"           Shared Data Cache Line Table          \\n\");\n \tfprintf(out, \"=================================================\\n\");\n@@ -2606,7 +2606,7 @@ static void perf_c2c__hists_fprintf(FILE *out, struct perf_session *session)\n \n \thists__fprintf(\u0026c2c.hists.hists, true, 0, 0, 0, stdout, true);\n \n-\tfprintf(out, \"\\n\");\n+\tfputc(out, '\\n');\n \tfprintf(out, \"=================================================\\n\");\n \tfprintf(out, \"      Shared Cache Line Distribution Pareto      \\n\");\n \tfprintf(out, \"=================================================\\n\");\ndiff --git a/tools/perf/builtin-daemon.c b/tools/perf/builtin-daemon.c\nindex c4632577d12963..7cb20b3a03e4cd 100644\n--- a/tools/perf/builtin-daemon.c\n+++ b/tools/perf/builtin-daemon.c\n@@ -691,7 +691,7 @@ static int cmd_session_list(struct daemon *daemon, union cmd *cmd, FILE *out)\n \t\t\t/* session up time */\n \t\t\tcsv_sep, (uint64_t)((curr - daemon-\u003estart) / 60));\n \n-\t\tfprintf(out, \"\\n\");\n+\t\tfputc(out, '\\n');\n \t} else {\n \t\tfprintf(out, \"[%d:daemon] base: %s\\n\", getpid(), daemon-\u003ebase);\n \t\tif (cmd-\u003elist.verbose) {\n@@ -730,7 +730,7 @@ static int cmd_session_list(struct daemon *daemon, union cmd *cmd, FILE *out)\n \t\t\t\t/* session up time */\n \t\t\t\tcsv_sep, (uint64_t)((curr - session-\u003estart) / 60));\n \n-\t\t\tfprintf(out, \"\\n\");\n+\t\t\tfputc(out, '\\n');\n \t\t} else {\n \t\t\tfprintf(out, \"[%d:%s] perf record %s\\n\",\n \t\t\t\tsession-\u003epid, session-\u003ename, session-\u003erun);\ndiff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c\nindex 5841d43be97184..05f18d49fc7b17 100644\n--- a/tools/perf/builtin-lock.c\n+++ b/tools/perf/builtin-lock.c\n@@ -1319,9 +1319,9 @@ static void print_result(void)\n \n \t\tlist_for_each_entry(key, \u0026lock_keys, list) {\n \t\t\tkey-\u003eprint(key, st);\n-\t\t\tfprintf(lock_output, \" \");\n+\t\t\tfputc(lock_output, ' ');\n \t\t}\n-\t\tfprintf(lock_output, \"\\n\");\n+\t\tfputc(lock_output, '\\n');\n \n \t\tif (++printed \u003e= print_nr_entries)\n \t\t\tbreak;\n@@ -1598,7 +1598,7 @@ static void print_header_csv(const char *sep)\n \t\tfprintf(lock_output, \"%s%s %s\", \"type\", sep, \"caller\");\n \t\tif (verbose \u003e 0)\n \t\t\tfprintf(lock_output, \"%s %s\", sep, \"stacktrace\");\n-\t\tfprintf(lock_output, \"\\n\");\n+\t\tfputc(lock_output, '\\n');\n \t\tbreak;\n \tcase LOCK_AGGR_ADDR:\n \t\tfprintf(lock_output, \"%s%s %s%s %s\\n\", \"address\", sep, \"symbol\", sep, \"type\");\n@@ -1629,7 +1629,7 @@ static void print_lock_stat_stdio(struct lock_contention *con, struct lock_stat\n \n \tlist_for_each_entry(key, \u0026lock_keys, list) {\n \t\tkey-\u003eprint(key, st);\n-\t\tfprintf(lock_output, \" \");\n+\t\tfputc(lock_output, ' ');\n \t}\n \n \tswitch (aggr_mode) {\n@@ -1687,7 +1687,7 @@ static void print_lock_stat_csv(struct lock_contention *con, struct lock_stat *s\n \tcase LOCK_AGGR_CALLER:\n \t\tfprintf(lock_output, \"%s%s %s\", get_type_flags_name(st-\u003eflags), sep, st-\u003ename);\n \t\tif (verbose \u003c= 0)\n-\t\t\tfprintf(lock_output, \"\\n\");\n+\t\t\tfputc(lock_output, '\\n');\n \t\tbreak;\n \tcase LOCK_AGGR_TASK:\n \t\tpid = st-\u003eaddr;\n@@ -1721,7 +1721,7 @@ static void print_lock_stat_csv(struct lock_contention *con, struct lock_stat *s\n \t\t\tget_symbol_name_offset(kmap, sym, ip, buf, sizeof(buf));\n \t\t\tfprintf(lock_output, \"%s %#lx %s\", i ? \":\" : sep, (unsigned long) ip, buf);\n \t\t}\n-\t\tfprintf(lock_output, \"\\n\");\n+\t\tfputc(lock_output, '\\n');\n \t}\n }\n \n@@ -1781,7 +1781,7 @@ static void print_footer_csv(int total, int bad, struct lock_contention_fails *f\n \t\tfor (i = 0; i \u003c BROKEN_MAX; i++)\n \t\t\tfprintf(lock_output, \"%s bad_%s=%d\", sep, name[i], bad_hist[i]);\n \t}\n-\tfprintf(lock_output, \"\\n\");\n+\tfputc(lock_output, '\\n');\n }\n \n static void print_footer(int total, int bad, struct lock_contention_fails *fails)\ndiff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c\nindex 9ac29bdc3cd547..e60c07305d198b 100644\n--- a/tools/perf/builtin-script.c\n+++ b/tools/perf/builtin-script.c\n@@ -2561,7 +2561,7 @@ static void process_event(struct perf_script *script,\n \n \tperf_sample__fprintf_ipc(sample, evsel, fp);\n \n-\tfprintf(fp, \"\\n\");\n+\tfputc(fp, '\\n');\n \n \tif (PRINT_FIELD(SRCCODE)) {\n \t\tif (map__fprintf_srccode(al-\u003emap, al-\u003eaddr, stdout,\n@@ -2815,7 +2815,7 @@ static int process_deferred_sample_event(const struct perf_tool *tool,\n \t\t\t\t    cursor, symbol_conf.bt_stop_list, fp);\n \t}\n \n-\tfprintf(fp, \"\\n\");\n+\tfputc(fp, '\\n');\n \n \tif (verbose \u003e 0)\n \t\tfflush(fp);\n@@ -3271,11 +3271,11 @@ static int list_available_languages_cb(struct scripting_ops *ops, const char *sp\n \n static void list_available_languages(void)\n {\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tfprintf(stderr, \"Scripting language extensions (used in \"\n \t\t\"perf script -s [spec:]script.[spec]):\\n\\n\");\n \tscript_spec__for_each(\u0026list_available_languages_cb);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n }\n \n /* Find script file relative to current directory or exec path */\ndiff --git a/tools/perf/ui/gtk/util.c b/tools/perf/ui/gtk/util.c\nindex c47f5c387838c5..037ebc47f7dccc 100644\n--- a/tools/perf/ui/gtk/util.c\n+++ b/tools/perf/ui/gtk/util.c\n@@ -37,7 +37,7 @@ static int perf_gtk__error(const char *format, va_list args)\n \t    vasprintf(\u0026msg, format, args) \u003c 0) {\n \t\tfprintf(stderr, \"Error:\\n\");\n \t\tvfprintf(stderr, format, args);\n-\t\tfprintf(stderr, \"\\n\");\n+\t\tfputc(stderr, '\\n');\n \t\treturn -1;\n \t}\n \n@@ -62,7 +62,7 @@ static int perf_gtk__warning_info_bar(const char *format, va_list args)\n \t    vasprintf(\u0026msg, format, args) \u003c 0) {\n \t\tfprintf(stderr, \"Warning:\\n\");\n \t\tvfprintf(stderr, format, args);\n-\t\tfprintf(stderr, \"\\n\");\n+\t\tfputc(stderr, '\\n');\n \t\treturn -1;\n \t}\n \n@@ -83,7 +83,7 @@ static int perf_gtk__warning_statusbar(const char *format, va_list args)\n \t    vasprintf(\u0026msg, format, args) \u003c 0) {\n \t\tfprintf(stderr, \"Warning:\\n\");\n \t\tvfprintf(stderr, format, args);\n-\t\tfprintf(stderr, \"\\n\");\n+\t\tfputc(stderr, '\\n');\n \t\treturn -1;\n \t}\n \ndiff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c\nindex 8c4c8925df2c22..044d2aa3b31218 100644\n--- a/tools/perf/ui/stdio/hist.c\n+++ b/tools/perf/ui/stdio/hist.c\n@@ -691,7 +691,7 @@ static int hists__fprintf_hierarchy_headers(struct hists *hists,\n \t\t}\n \n next_line:\n-\t\tfprintf(fp, \"\\n\");\n+\t\tfputc(fp, '\\n');\n \t}\n \n \tfprintf(fp, \"# \");\n@@ -783,7 +783,7 @@ hists__fprintf_standard_headers(struct hists *hists,\n \t\tif (line)\n \t\t\tfprintf(fp, \"# \");\n \t\tfprintf_line(hists, hpp, line, fp);\n-\t\tfprintf(fp, \"\\n\");\n+\t\tfputc(fp, '\\n');\n \t}\n \n \tif (sep)\n@@ -806,10 +806,10 @@ hists__fprintf_standard_headers(struct hists *hists,\n \n \t\twidth = fmt-\u003ewidth(fmt, hpp, hists);\n \t\tfor (i = 0; i \u003c width; i++)\n-\t\t\tfprintf(fp, \".\");\n+\t\t\tfputc(fp, '.');\n \t}\n \n-\tfprintf(fp, \"\\n\");\n+\tfputc(fp, '\\n');\n \tfprintf(fp, \"#\\n\");\n \treturn hpp_list-\u003enr_header_lines + 2;\n }\ndiff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c\nindex 5d0664ff73b791..8e099ccaae39a6 100644\n--- a/tools/perf/util/cs-etm.c\n+++ b/tools/perf/util/cs-etm.c\n@@ -895,7 +895,7 @@ static void cs_etm__dump_event(struct cs_etm_queue *etmq,\n \tconst char *color = PERF_COLOR_BLUE;\n \tsize_t buffer_used = 0;\n \n-\tfprintf(stdout, \"\\n\");\n+\tputchar('\\n');\n \tcolor_fprintf(stdout, color,\n \t\t     \". ... CoreSight %s Trace data: size %#zx bytes\\n\",\n \t\t     cs_etm_decoder__get_name(etmq-\u003edecoder), buffer-\u003esize);\ndiff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c\nindex 6b5ffe81f14121..5429984ab49c90 100644\n--- a/tools/perf/util/debug.c\n+++ b/tools/perf/util/debug.c\n@@ -350,7 +350,7 @@ void __dump_stack(FILE *file, void **stackdump, size_t stackdump_size)\n \t\t\tfprintf(file, \"    #%zd %p \", i, stackdump[i]);\n \n \t\tmap__fprintf_srcline(al.map, al.addr, \"\", file);\n-\t\tfprintf(file, \"\\n\");\n+\t\tfputc(file, '\\n');\n \t\taddr_location__exit(\u0026al);\n \t}\n \tthread__put(thread);\ndiff --git a/tools/perf/util/header.c b/tools/perf/util/header.c\nindex 091d8f7f6bd2c9..965b17c81224b6 100644\n--- a/tools/perf/util/header.c\n+++ b/tools/perf/util/header.c\n@@ -2454,7 +2454,7 @@ static void __print_pmu_caps(FILE *fp, int nr_caps, char **caps, char *pmu_name)\n \t\tdelimiter = \", \";\n \t}\n \n-\tfprintf(fp, \"\\n\");\n+\tfputc(fp, '\\n');\n }\n \n static void print_cpu_pmu_caps(struct feat_fd *ff, FILE *fp)\n@@ -2513,7 +2513,7 @@ static void print_pmu_mappings(struct feat_fd *ff, FILE *fp)\n \t\tpmu_num--;\n \t}\n \n-\tfprintf(fp, \"\\n\");\n+\tfputc(fp, '\\n');\n \n \tif (!pmu_num)\n \t\treturn;\n@@ -4349,7 +4349,7 @@ int perf_header__fprintf_info(struct perf_session *session, FILE *fp, bool full)\n \t\t\tfprintf(fp, \"%s \", feat_ops[bit].name);\n \t}\n \n-\tfprintf(fp, \"\\n\");\n+\tfputc(fp, '\\n');\n \treturn 0;\n }\n \ndiff --git a/tools/perf/util/intel-pt-decoder/intel-pt-log.c b/tools/perf/util/intel-pt-decoder/intel-pt-log.c\nindex ef55d6232cf0c2..0a35493b854acd 100644\n--- a/tools/perf/util/intel-pt-decoder/intel-pt-log.c\n+++ b/tools/perf/util/intel-pt-decoder/intel-pt-log.c\n@@ -70,14 +70,14 @@ static void intel_pt_print_data(const unsigned char *buf, int len, uint64_t pos,\n \tint i;\n \n \tfor (i = 0; i \u003c indent; i++)\n-\t\tfprintf(f, \" \");\n+\t\tfputc(f, ' ');\n \n \tfprintf(f, \"  %08\" PRIx64 \": \", pos);\n \tfor (i = 0; i \u003c len; i++)\n \t\tfprintf(f, \" %02x\", buf[i]);\n \tfor (; i \u003c 16; i++)\n \t\tfprintf(f, \"   \");\n-\tfprintf(f, \" \");\n+\tfputc(f, ' ');\n }\n \n static void intel_pt_print_no_data(uint64_t pos, int indent)\n@@ -85,12 +85,12 @@ static void intel_pt_print_no_data(uint64_t pos, int indent)\n \tint i;\n \n \tfor (i = 0; i \u003c indent; i++)\n-\t\tfprintf(f, \" \");\n+\t\tfputc(f, ' ');\n \n \tfprintf(f, \"  %08\" PRIx64 \": \", pos);\n \tfor (i = 0; i \u003c 16; i++)\n \t\tfprintf(f, \"   \");\n-\tfprintf(f, \" \");\n+\tfputc(f, ' ');\n }\n \n static ssize_t log_buf__write(void *cookie, const char *buf, size_t size)\ndiff --git a/tools/perf/util/libbfd.c b/tools/perf/util/libbfd.c\nindex c1c12308cc12ff..263894663f1a87 100644\n--- a/tools/perf/util/libbfd.c\n+++ b/tools/perf/util/libbfd.c\n@@ -603,7 +603,7 @@ int symbol__disassemble_bpf_libbfd(struct symbol *sym __maybe_unused,\n \t\t} else\n \t\t\tsrcline = NULL;\n \n-\t\tfprintf(s, \"\\n\");\n+\t\tfputc(s, '\\n');\n \t\tprev_buf_size = buf_size;\n \t\tfflush(s);\n \ndiff --git a/tools/perf/util/session.c b/tools/perf/util/session.c\nindex f391a822480db0..63a8d3ccaa4f9c 100644\n--- a/tools/perf/util/session.c\n+++ b/tools/perf/util/session.c\n@@ -1257,7 +1257,7 @@ int perf_event__process_finished_round(const struct perf_tool *tool __maybe_unus\n \t\t\t\t       struct ordered_events *oe)\n {\n \tif (dump_trace)\n-\t\tfprintf(stdout, \"\\n\");\n+\t\tputchar('\\n');\n \treturn ordered_events__flush(oe, OE_FLUSH__ROUND);\n }\n \n@@ -4000,7 +4000,7 @@ int perf_event__process_id_index(const struct perf_tool *tool __maybe_unused,\n \t\t\t\tfprintf(stdout, \"  machine_pid: %\"PRI_ld64, e2-\u003emachine_pid);\n \t\t\t\tfprintf(stdout, \"  vcpu: %\"PRI_lu64\"\\n\", e2-\u003evcpu);\n \t\t\t} else {\n-\t\t\t\tfprintf(stdout, \"\\n\");\n+\t\t\t\tputchar('\\n');\n \t\t\t}\n \t\t}\n \ndiff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c\nindex 0a5750bb59fa3b..3be7a7f4fda335 100644\n--- a/tools/perf/util/stat-display.c\n+++ b/tools/perf/util/stat-display.c\n@@ -529,7 +529,7 @@ static void print_metric_json(struct perf_stat_config *config __maybe_unused,\n \t\t}\n \t}\n \tif (!config-\u003emetric_only)\n-\t\tfprintf(out, \"}\");\n+\t\tfputc(out, '}');\n }\n \n static void new_line_json(struct perf_stat_config *config, void *ctx)\n@@ -1316,7 +1316,7 @@ static void print_header_std(struct perf_stat_config *config,\n \tFILE *output = config-\u003eoutput;\n \tint i;\n \n-\tfprintf(output, \"\\n\");\n+\tfputc(output, '\\n');\n \tfprintf(output, \" Performance counter stats for \");\n \tif (_target-\u003ebpf_str)\n \t\tfprintf(output, \"\\'BPF program(s) %s\", _target-\u003ebpf_str);\n@@ -1333,7 +1333,7 @@ static void print_header_std(struct perf_stat_config *config,\n \telse\n \t\tfprintf(output, \"thread id \\'%s\", _target-\u003etid);\n \n-\tfprintf(output, \"\\'\");\n+\tfputc(output, '\\'');\n \tif (config-\u003erun_count \u003e 1)\n \t\tfprintf(output, \" (%d runs)\", config-\u003erun_count);\n \tfprintf(output, \":\\n\\n\");\n@@ -1406,9 +1406,9 @@ static void print_table(struct perf_stat_config *config, FILE *output, double av\n \t\tfprintf(output, \" %17.9f (%+.9f) \", run, run - avg);\n \n \t\tfor (h = 0; h \u003c n; h++)\n-\t\t\tfprintf(output, \"#\");\n+\t\t\tfputc(output, '#');\n \n-\t\tfprintf(output, \"\\n\");\n+\t\tfputc(output, '\\n');\n \t}\n \n \tfprintf(output, \"\\n%*s# Final result:\\n\", indent, \"\");\n@@ -1428,7 +1428,7 @@ static void print_footer(struct perf_stat_config *config)\n \t\treturn;\n \n \tif (!config-\u003enull_run)\n-\t\tfprintf(output, \"\\n\");\n+\t\tfputc(output, '\\n');\n \n \tif (config-\u003erun_count == 1) {\n \t\tfprintf(output, \" %17.9f seconds time elapsed\", avg);\ndiff --git a/tools/perf/util/values.c b/tools/perf/util/values.c\nindex 6eaddfcf833e52..2c5340a928dd1d 100644\n--- a/tools/perf/util/values.c\n+++ b/tools/perf/util/values.c\n@@ -217,7 +217,7 @@ static void perf_read_values__display_pretty(FILE *fp,\n \tfprintf(fp, \"# %*s  %*s\", pidwidth, \"PID\", tidwidth, \"TID\");\n \tfor (j = 0; j \u003c values-\u003enum_counters; j++)\n \t\tfprintf(fp, \"  %*s\", counterwidth[j], evsel__name(values-\u003ecounters[j]));\n-\tfprintf(fp, \"\\n\");\n+\tfputc(fp, '\\n');\n \n \tfor (i = 0; i \u003c values-\u003ethreads; i++) {\n \t\tfprintf(fp, \"  %*d  %*d\", pidwidth, values-\u003epid[i],\n@@ -225,7 +225,7 @@ static void perf_read_values__display_pretty(FILE *fp,\n \t\tfor (j = 0; j \u003c values-\u003enum_counters; j++)\n \t\t\tfprintf(fp, \"  %*\" PRIu64,\n \t\t\t\tcounterwidth[j], values-\u003evalue[i][j]);\n-\t\tfprintf(fp, \"\\n\");\n+\t\tfputc(fp, '\\n');\n \t}\n \tfree(counterwidth);\n }\ndiff --git a/tools/power/acpi/tools/acpidump/apdump.c b/tools/power/acpi/tools/acpidump/apdump.c\nindex 72ad7915b04fd2..600d5b6e04a880 100644\n--- a/tools/power/acpi/tools/acpidump/apdump.c\n+++ b/tools/power/acpi/tools/acpidump/apdump.c\n@@ -171,7 +171,7 @@ ap_dump_table_buffer(struct acpi_table_header *table,\n \tacpi_ut_dump_buffer_to_file(gbl_output_file,\n \t\t\t\t    ACPI_CAST_PTR(u8, table), table_length,\n \t\t\t\t    DB_BYTE_DISPLAY, 0);\n-\tfprintf(gbl_output_file, \"\\n\");\n+\tfputc(gbl_output_file, '\\n');\n \treturn (0);\n }\n \ndiff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c\nindex e4884eb0283791..5d492780aad9bb 100644\n--- a/tools/power/x86/intel-speed-select/isst-display.c\n+++ b/tools/power/x86/intel-speed-select/isst-display.c\n@@ -122,7 +122,7 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)\n \n \tif (level == 0) {\n \t\tif (header)\n-\t\t\tfprintf(outf, \"{\");\n+\t\t\tfputc(outf, '{');\n \t\telse\n \t\t\tfprintf(outf, \"\\n}\\n\");\n \n@@ -138,7 +138,7 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)\n \n \t\tif (value) {\n \t\t\tif (last_level != level)\n-\t\t\t\tfprintf(outf, \"\\n\");\n+\t\t\t\tfputc(outf, '\\n');\n \n \t\t\tfprintf(outf, \"%s\\\"%s\\\": \", delimiters, header);\n \t\t\tfprintf(outf, \"\\\"%s\\\"\", value);\n@@ -156,7 +156,7 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)\n \t\t\t\t\tfprintf(outf, \"\\n%s}\", delimiters);\n \t\t\t}\n \t\t\tif (abs(last_level - level) \u003c 3)\n-\t\t\t\tfprintf(outf, \"\\n\");\n+\t\t\t\tfputc(outf, '\\n');\n \t\t\tif (header)\n \t\t\t\tfprintf(outf, \"%s\\\"%s\\\": {\", delimiters,\n \t\t\t\t\theader);\ndiff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c\nindex 920694c3c1ec94..45d39a0fcf72a0 100644\n--- a/tools/power/x86/turbostat/turbostat.c\n+++ b/tools/power/x86/turbostat/turbostat.c\n@@ -9099,7 +9099,7 @@ void dump_cpuid_hypervisor(void)\n \tdump_word_chars(ebx);\n \tdump_word_chars(ecx);\n \tdump_word_chars(edx);\n-\tfprintf(outf, \"\\n\");\n+\tfputc(outf, '\\n');\n }\n \n void process_cpuid()\n@@ -9749,7 +9749,7 @@ void topology_probe(bool startup)\n \t\tfprintf(outf, \" siblings\");\n \t\tfor (ht_id = 0; ht_id \u003c= MAX_HT_ID; ++ht_id)\n \t\t\tfprintf(outf, \" %d\", cpus[i].ht_sibling_cpu_id[ht_id]);\n-\t\tfprintf(outf, \"\\n\");\n+\t\tfputc(outf, '\\n');\n \t}\n \n }\ndiff --git a/tools/testing/selftests/bpf/benchs/bench_htab_mem.c b/tools/testing/selftests/bpf/benchs/bench_htab_mem.c\nindex 1ee217d974340e..64b97a41af45ea 100644\n--- a/tools/testing/selftests/bpf/benchs/bench_htab_mem.c\n+++ b/tools/testing/selftests/bpf/benchs/bench_htab_mem.c\n@@ -148,7 +148,7 @@ static const struct htab_mem_use_case *htab_mem_find_use_case_or_exit(const char\n \tfprintf(stderr, \"available use case:\");\n \tfor (i = 0; i \u003c ARRAY_SIZE(use_cases); i++)\n \t\tfprintf(stderr, \" %s\", use_cases[i].name);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \texit(1);\n }\n \ndiff --git a/tools/testing/selftests/bpf/jit_disasm_helpers.c b/tools/testing/selftests/bpf/jit_disasm_helpers.c\nindex 3558fe10e28cf9..58ea2a2ec13e2d 100644\n--- a/tools/testing/selftests/bpf/jit_disasm_helpers.c\n+++ b/tools/testing/selftests/bpf/jit_disasm_helpers.c\n@@ -228,7 +228,7 @@ int get_jited_program_text(int fd, char *text, size_t text_sz)\n \tfor (pc = 0, i = 0; i \u003c jited_funcs; ++i) {\n \t\tfprintf(text_out, \"func #%d:\\n\", i);\n \t\tdisasm_one_func(text_out, image + pc, func_lens[i]);\n-\t\tfprintf(text_out, \"\\n\");\n+\t\tfputc(text_out, '\\n');\n \t\tpc += func_lens[i];\n \t}\n \ndiff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c\nindex 7ba82974ee784d..b520be1bf7aaa7 100644\n--- a/tools/testing/selftests/bpf/test_progs.c\n+++ b/tools/testing/selftests/bpf/test_progs.c\n@@ -383,7 +383,7 @@ static void print_test_result(const struct prog_test_def *test, const struct tes\n \telse\n \t\tfprintf(env.stdout_saved, \"OK (SKIP: %d/%d)\", skipped_cnt, subtests_cnt);\n \n-\tfprintf(env.stdout_saved, \"\\n\");\n+\tfputc(env.stdout_saved, '\\n');\n }\n \n static void print_test_log(char *log_buf, size_t log_cnt)\n@@ -391,7 +391,7 @@ static void print_test_log(char *log_buf, size_t log_cnt)\n \tlog_buf[log_cnt] = '\\0';\n \tfprintf(env.stdout_saved, \"%s\", log_buf);\n \tif (log_buf[log_cnt - 1] != '\\n')\n-\t\tfprintf(env.stdout_saved, \"\\n\");\n+\t\tfputc(env.stdout_saved, '\\n');\n }\n \n static void print_subtest_name(int test_num, int subtest_num,\n@@ -409,7 +409,7 @@ static void print_subtest_name(int test_num, int subtest_num,\n \tif (result)\n \t\tfprintf(env.stdout_saved, \":%s\", result);\n \n-\tfprintf(env.stdout_saved, \"\\n\");\n+\tfputc(env.stdout_saved, '\\n');\n }\n \n static void jsonw_write_log_message(json_writer_t *w, char *log_buf, size_t log_cnt)\n@@ -1333,14 +1333,14 @@ void hexdump(const char *prefix, const void *buf, size_t len)\n \tfor (int i = 0; i \u003c len; i++) {\n \t\tif (!(i % 16)) {\n \t\t\tif (i)\n-\t\t\t\tfprintf(stdout, \"\\n\");\n+\t\t\t\tputchar('\\n');\n \t\t\tfprintf(stdout, \"%s\", prefix);\n \t\t}\n \t\tif (i \u0026\u0026 !(i % 8) \u0026\u0026 (i % 16))\n-\t\t\tfprintf(stdout, \"\\t\");\n+\t\t\tputchar('\\t');\n \t\tfprintf(stdout, \"%02X \", ((uint8_t *)(buf))[i]);\n \t}\n-\tfprintf(stdout, \"\\n\");\n+\tputchar('\\n');\n }\n \n static void sigint_handler(int signum)\ndiff --git a/tools/testing/selftests/bpf/veristat.c b/tools/testing/selftests/bpf/veristat.c\nindex a7db6f04f7e145..d1c7f06b8b1cf9 100644\n--- a/tools/testing/selftests/bpf/veristat.c\n+++ b/tools/testing/selftests/bpf/veristat.c\n@@ -1605,7 +1605,7 @@ static void dump(__u32 prog_id, enum dump_mode mode, const char *file_name, cons\n \tprintf(\"DUMP (%s) %s/%s:\\n\", mode == DUMP_JITED ? \"JITED\" : \"XLATED\", file_name, prog_name);\n \twhile (fgets(buf, sizeof(buf), fp))\n \t\tfputs(buf, stdout);\n-\tfprintf(stdout, \"\\n\");\n+\tputchar('\\n');\n \n \tif (ferror(fp))\n \t\tfprintf(stderr, \"Failed to dump BPF prog with error: %d\\n\", errno);\ndiff --git a/tools/testing/selftests/drivers/net/hw/ncdevmem.c b/tools/testing/selftests/drivers/net/hw/ncdevmem.c\nindex d96e8a3b5a6526..7bdcc4114dba1c 100644\n--- a/tools/testing/selftests/drivers/net/hw/ncdevmem.c\n+++ b/tools/testing/selftests/drivers/net/hw/ncdevmem.c\n@@ -135,7 +135,7 @@ static void pr_err(const char *fmt, ...)\n \n \tif (errno != 0)\n \t\tfprintf(stderr, \": %s\", strerror(errno));\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n }\n \n static struct memory_buffer *udmabuf_alloc(size_t size)\ndiff --git a/tools/testing/selftests/kvm/s390/keyop.c b/tools/testing/selftests/kvm/s390/keyop.c\nindex c7805e87d12c5d..120834f8ba0da5 100644\n--- a/tools/testing/selftests/kvm/s390/keyop.c\n+++ b/tools/testing/selftests/kvm/s390/keyop.c\n@@ -117,7 +117,7 @@ static void dump_sk(const unsigned char skeys[], const char *descr)\n \t\tfprintf(stderr, \"# %3d: \", i);\n \t\tfor (j = 0; j \u003c 32; j++)\n \t\t\tfprintf(stderr, \"%02x \", skeys[i + j]);\n-\t\tfprintf(stderr, \"\\n\");\n+\t\tfputc(stderr, '\\n');\n \t}\n }\n \ndiff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c\nindex 78180da1efcc53..40467e86bfd47b 100644\n--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c\n+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c\n@@ -208,7 +208,7 @@ static int capture_events(int fd, int event_group)\n \t\t}\n \t\tif (server_side)\n \t\t\tfprintf(stderr, \",server_side:1\");\n-\t\tfprintf(stderr, \"\\n\");\n+\t\tfputc(stderr, '\\n');\n \t} while (1);\n \n \treturn 0;\ndiff --git a/tools/testing/selftests/net/psock_tpacket.c b/tools/testing/selftests/net/psock_tpacket.c\nindex 7caf3135448da7..724da9222ad9a0 100644\n--- a/tools/testing/selftests/net/psock_tpacket.c\n+++ b/tools/testing/selftests/net/psock_tpacket.c\n@@ -116,7 +116,7 @@ static int pfsocket(int ver)\n static void status_bar_update(void)\n {\n \tif (total_packets % 10 == 0) {\n-\t\tfprintf(stderr, \".\");\n+\t\tfputc(stderr, '.');\n \t\tfflush(stderr);\n \t}\n }\n@@ -825,7 +825,7 @@ static int test_tpacket(int version, int type)\n \tunmap_ring(sock, \u0026ring);\n \tclose(sock);\n \n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \treturn 0;\n }\n \ndiff --git a/tools/testing/selftests/net/txtimestamp.c b/tools/testing/selftests/net/txtimestamp.c\nindex 170be192f5c7ce..86c8d4945d73c1 100644\n--- a/tools/testing/selftests/net/txtimestamp.c\n+++ b/tools/testing/selftests/net/txtimestamp.c\n@@ -200,10 +200,10 @@ static void __print_timestamp(const char *name, struct timespec *cur,\n \t\tts_delta = timespec_to_ns64(cur) - timespec_to_ns64(\u0026ts_usr);\n \t\tfprintf(stderr, \"  (USR +\");\n \t\t__print_ts_delta_formatted(ts_delta);\n-\t\tfprintf(stderr, \")\");\n+\t\tfputc(stderr, ')');\n \t}\n \n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n }\n \n static void record_timestamp_usr(void)\n@@ -254,7 +254,7 @@ static void print_timing_event(char *name, struct timing_event *te)\n \t__print_ts_delta_formatted(te-\u003emin);\n \tfprintf(stderr, \", max=\");\n \t__print_ts_delta_formatted(te-\u003emax);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n }\n \n /* TODO: convert to check_and_print payload once API is stable */\n@@ -271,7 +271,7 @@ static void print_payload(char *data, int len)\n \tfprintf(stderr, \"payload: \");\n \tfor (i = 0; i \u003c len; i++)\n \t\tfprintf(stderr, \"%02hhx \", data[i]);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n }\n \n static void print_pktinfo(int family, int ifindex, void *saddr, void *daddr)\n@@ -933,7 +933,7 @@ int main(int argc, char **argv)\n \tfprintf(stderr, \"protocol:     %s\\n\", sock_names[cfg_proto]);\n \tfprintf(stderr, \"payload:      %u\\n\", cfg_payload_len);\n \tfprintf(stderr, \"server port:  %u\\n\", dest_port);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \n \tif (do_ipv4) {\n \t\tif (cfg_do_listen)\ndiff --git a/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c b/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c\nindex 7c23d3dd7d6d91..412defe9827143 100644\n--- a/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c\n+++ b/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c\n@@ -363,7 +363,7 @@ int decompress_file(int argc, char **argv, void *devhandle)\n \t\t\tgoto err3;\n \t\tfprintf(stderr, \"%02x \", tmp[i]);\n \t\tif (i == 5)\n-\t\t\tfprintf(stderr, \"\\n\");\n+\t\t\tfputc(stderr, '\\n');\n \t}\n \tfprintf(stderr, \"gzHeader MTIME, XFL, OS ignored\\n\");\n \ndiff --git a/tools/testing/selftests/vfio/lib/include/libvfio/assert.h b/tools/testing/selftests/vfio/lib/include/libvfio/assert.h\nindex 77b68c7129a648..82015b19df6c39 100644\n--- a/tools/testing/selftests/vfio/lib/include/libvfio/assert.h\n+++ b/tools/testing/selftests/vfio/lib/include/libvfio/assert.h\n@@ -10,7 +10,7 @@\n \n #define VFIO_LOG_AND_EXIT(...) do {\t\t\\\n \tfprintf(stderr, \"  \" __VA_ARGS__);\t\\\n-\tfprintf(stderr, \"\\n\");\t\t\t\\\n+\tfputc(stderr, '\\n');\t\t\t\\\n \texit(KSFT_FAIL);\t\t\t\\\n } while (0)\n \ndiff --git a/tools/testing/selftests/vfio/lib/libvfio.c b/tools/testing/selftests/vfio/lib/libvfio.c\nindex 3a3d1ed635c1df..80a312f149a66e 100644\n--- a/tools/testing/selftests/vfio/lib/libvfio.c\n+++ b/tools/testing/selftests/vfio/lib/libvfio.c\n@@ -60,16 +60,16 @@ char **vfio_selftests_get_bdfs(int *argc, char *argv[], int *nr_bdfs)\n \t}\n \n \tfprintf(stderr, \"Unable to determine which device(s) to use, skipping test.\\n\");\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tfprintf(stderr, \"To pass the device address via environment variable:\\n\");\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tfprintf(stderr, \"    export VFIO_SELFTESTS_BDF=\\\"segment:bus:device.function\\\"\\n\");\n \tfprintf(stderr, \"    %s [options]\\n\", argv[0]);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tfprintf(stderr, \"To pass the device address(es) via argv:\\n\");\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tfprintf(stderr, \"    %s [options] segment:bus:device.function ...\\n\", argv[0]);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \texit(KSFT_SKIP);\n }\n \ndiff --git a/tools/testing/vsock/vsock_diag_test.c b/tools/testing/vsock/vsock_diag_test.c\nindex 081e045f46960e..cc903cdb45d92e 100644\n--- a/tools/testing/vsock/vsock_diag_test.c\n+++ b/tools/testing/vsock/vsock_diag_test.c\n@@ -86,7 +86,7 @@ static void print_vsock_addr(FILE *fp, unsigned int cid, unsigned int port)\n \t\tfprintf(fp, \"%u:\", cid);\n \n \tif (port == VMADDR_PORT_ANY)\n-\t\tfprintf(fp, \"*\");\n+\t\tfputc(fp, '*');\n \telse\n \t\tfprintf(fp, \"%u\", port);\n }\n@@ -94,7 +94,7 @@ static void print_vsock_addr(FILE *fp, unsigned int cid, unsigned int port)\n static void print_vsock_stat(FILE *fp, struct vsock_stat *st)\n {\n \tprint_vsock_addr(fp, st-\u003emsg.vdiag_src_cid, st-\u003emsg.vdiag_src_port);\n-\tfprintf(fp, \" \");\n+\tfputc(fp, ' ');\n \tprint_vsock_addr(fp, st-\u003emsg.vdiag_dst_cid, st-\u003emsg.vdiag_dst_port);\n \tfprintf(fp, \" %s %s %s %u\\n\",\n \t\tsock_type_str(st-\u003emsg.vdiag_type),\ndiff --git a/tools/thermal/tmon/sysfs.c b/tools/thermal/tmon/sysfs.c\nindex cb1108bc924989..ebdb95819a766d 100644\n--- a/tools/thermal/tmon/sysfs.c\n+++ b/tools/thermal/tmon/sysfs.c\n@@ -522,7 +522,7 @@ int update_thermal_data()\n \t}\n \n \tif (tmon_log) {\n-\t\tfprintf(tmon_log, \"\\n\");\n+\t\tfputc(tmon_log, '\\n');\n \t\tfflush(tmon_log);\n \t}\n \ndiff --git a/tools/thermal/tmon/tmon.c b/tools/thermal/tmon/tmon.c\nindex 7eb3216a27f45f..9a972f73a2c005 100644\n--- a/tools/thermal/tmon/tmon.c\n+++ b/tools/thermal/tmon/tmon.c\n@@ -199,7 +199,7 @@ static void prepare_logging(void)\n \t\tfprintf(tmon_log, \"%s%d \", ptdata.cdi[i].type,\n \t\t\tptdata.cdi[i].instance);\n \n-\tfprintf(tmon_log, \"\\n\");\n+\tfputc(tmon_log, '\\n');\n }\n \n static struct option opts[] = {\ndiff --git a/tools/tracing/latency/latency-collector.c b/tools/tracing/latency/latency-collector.c\nindex ef97916e3873a1..3dc6fb9df92683 100644\n--- a/tools/tracing/latency/latency-collector.c\n+++ b/tools/tracing/latency/latency-collector.c\n@@ -1999,7 +1999,7 @@ static void scan_arguments(int argc, char *argv[])\n \"been enabled. Random sleep is intended for the following tracers:\\n\");\n \t\t\tfor (i = 0; random_tracers[i]; i++)\n \t\t\t\tfprintf(stderr, \"%s\\n\", random_tracers[i]);\n-\t\t\tfprintf(stderr, \"\\n\");\n+\t\t\tfputc(stderr, '\\n');\n \t\t}\n \t}\n \ndiff --git a/tools/tracing/rtla/src/common.c b/tools/tracing/rtla/src/common.c\nindex 8c7f5e75b2ec8d..e81e676d51d2ad 100644\n--- a/tools/tracing/rtla/src/common.c\n+++ b/tools/tracing/rtla/src/common.c\n@@ -449,7 +449,7 @@ void common_usage(const char *tool, const char *mode,\n \t\tfprintf(stderr, \"%s [-h] \", mode);\n \n \tprint_msg_array(start_msgs);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \tprint_msg_array(common_options);\n \tprint_msg_array(opt_msgs);\n \ndiff --git a/tools/tracing/rtla/src/utils.c b/tools/tracing/rtla/src/utils.c\nindex cb187e7d48d1c2..3532da2f2296d8 100644\n--- a/tools/tracing/rtla/src/utils.c\n+++ b/tools/tracing/rtla/src/utils.c\n@@ -67,7 +67,7 @@ void fatal(const char *fmt, ...)\n \tva_start(ap, fmt);\n \tvfprintf(stderr, fmt, ap);\n \tva_end(ap);\n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n \n \texit(ERROR);\n }\ndiff --git a/tools/usb/ffs-test.c b/tools/usb/ffs-test.c\nindex 22b938fbdfb772..e993736ba0d647 100644\n--- a/tools/usb/ffs-test.c\n+++ b/tools/usb/ffs-test.c\n@@ -562,7 +562,7 @@ empty_out_buf(struct thread *ignore, const void *buf, size_t nbytes)\n \t\t\t\tfprintf(stderr, \"%4zd:\", len);\n \t\t\tfprintf(stderr, \" %02x\", *p);\n \t\t\tif (31 == (len % 32))\n-\t\t\t\tfprintf(stderr, \"\\n\");\n+\t\t\t\tfputc(stderr, '\\n');\n \t\t}\n \t\tfflush(stderr);\n \t\terrno = EILSEQ;\ndiff --git a/tools/verification/rv/src/in_kernel.c b/tools/verification/rv/src/in_kernel.c\nindex e6dea4040f8f4c..26132171f6008e 100644\n--- a/tools/verification/rv/src/in_kernel.c\n+++ b/tools/verification/rv/src/in_kernel.c\n@@ -667,7 +667,7 @@ static void ikm_usage_print_reactors(void)\n \t\tend = strstr(start, \"\\n\");\n \t}\n \n-\tfprintf(stderr, \"\\n\");\n+\tfputc(stderr, '\\n');\n }\n /*\n  * ikm_usage - print usage\n"
}

2/1 2026/07/25 22:36 agent patch-evaluator
0m Model:
best-expensive

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only modifies user-space tools and tests in the `tools/` directory by replacing `fprintf` with `fputc` or `putchar` for single characters. It does not make any functional changes to the kernel code itself.",
  "WorthFuzzing": false
}

Instruction:
You are an expert Linux kernel maintainer.
Your job is to review a provided patch series and determine
if it makes functional changes to the kernel that should be fuzzed.

IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on your internal knowledge of the kernel. You must actively
use your code access tools to examine the actual source code and confirm any assumptions.

Return WorthFuzzing=false if the patch only contains:
- Modifications to Documentation/, Kconfig files, or code comments.
- Purely decorative changes, such as logging (e.g., pr_err, printk) or tracepoints.
- Changes to numeric constants or macros that do not functionally alter execution flow.
- Code paths that are impossible to reach in virtualized environments like GCE or QEMU,
  even when utilizing software-emulated hardware (e.g., usb gadget, mac80211_hwsim).
- Code in vendor-specific PCIe switch, SmartNIC, or GPU drivers (e.g., mlxsw, pds_core, qed,
  ionic, amdgpu) that require physical PCIe hardware cards not emulated in standard QEMU.
- Driver .remove, .shutdown, or pci_unregister_driver teardown callbacks (e.g., igb_remove)
  that are executed only during PCI hot-unplug or sysfs driver unbind operations.

If it modifies reachable core kernel logic, drivers, or architectures, use your code search
tools to verify the code can be executed, then return WorthFuzzing=true.

When returning WorthFuzzing=true, you MUST ALSO:
1. Extract any specific kernel functions that should be heavily fuzzed into FocusSymbols.
   Avoid listing generic hot-path functions to prevent skewed test distributions.
   Prefer non-static, non-inlined API entrypoint functions over internal static helper functions
   (which are inlined by the compiler and do not have distinct symbol addresses).
2. Identify any specific CONFIG_ options required to properly test this new/modified feature.
   Go and look into the Kconfig files and check for ifdefs around the code, do not make assumptions.
   Also check "depends on" lines in Kconfig to include any non-standard parent subsystem configs
   needed for Kbuild to compile the code statically into vmlinux. List them in the EnableConfigs
   output array, and DO NOT add a 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.


Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.

Prompt:
For your convenience, here is the diff of the changes:
commit a58fce0405ce1c54810d6c55d5ead118907e0de0
Author: syz-cluster <triage@syzkaller.com>
Date:   Sat Jul 25 22:36:02 2026 +0000

    syz-cluster: applied patch under review

diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c
index 8bfcff9e2f6394..76abd3f4fbcbc5 100644
--- a/tools/bpf/bpftool/common.c
+++ b/tools/bpf/bpftool/common.c
@@ -53,7 +53,7 @@ void p_err(const char *fmt, ...)
 	} else {
 		fprintf(stderr, "Error: ");
 		vfprintf(stderr, fmt, ap);
-		fprintf(stderr, "\n");
+		fputc(stderr, '\n');
 	}
 	va_end(ap);
 }
@@ -67,7 +67,7 @@ void p_info(const char *fmt, ...)
 
 	va_start(ap, fmt);
 	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	va_end(ap);
 }
 
diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c
index c91e1a6e1a1eca..aecfc778625f71 100644
--- a/tools/bpf/bpftool/main.c
+++ b/tools/bpf/bpftool/main.c
@@ -273,7 +273,7 @@ void fprint_hex(FILE *f, void *arg, unsigned int n, const char *sep)
 		if (!i)
 			/* nothing */;
 		else if (!(i % 16))
-			fprintf(f, "\n");
+			fputc(f, '\n');
 		else if (!(i % 8))
 			fprintf(f, "  ");
 		else
diff --git a/tools/bpf/bpftool/netlink_dumper.h b/tools/bpf/bpftool/netlink_dumper.h
index 96318106fb4973..bf0919b4f52ab8 100644
--- a/tools/bpf/bpftool/netlink_dumper.h
+++ b/tools/bpf/bpftool/netlink_dumper.h
@@ -25,7 +25,7 @@
 	if (json_output)				\
 		jsonw_start_object(json_wtr);		\
 	else						\
-		fprintf(stdout, "{");			\
+		putchar('{');				\
 }
 
 #define NET_END_OBJECT_NESTED				\
@@ -33,7 +33,7 @@
 	if (json_output)				\
 		jsonw_end_object(json_wtr);		\
 	else						\
-		fprintf(stdout, "}");			\
+		putchar('}');				\
 }
 
 #define NET_END_OBJECT					\
@@ -47,7 +47,7 @@
 	if (json_output)				\
 		jsonw_end_object(json_wtr);		\
 	else						\
-		fprintf(stdout, "\n");			\
+		putchar('\n');				\
 }
 
 #define NET_START_ARRAY(name, fmt_str)			\
diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c
index a9f730d407a929..d27cb9d4986093 100644
--- a/tools/bpf/bpftool/prog.c
+++ b/tools/bpf/bpftool/prog.c
@@ -1266,7 +1266,7 @@ static void hex_print(void *data, unsigned int size, FILE *f)
 			fprintf(f, "%c%s", c, j == i + 7 ? " " : "");
 		}
 
-		fprintf(f, "\n");
+		fputc(f, '\n');
 	}
 }
 
diff --git a/tools/gpio/gpio-event-mon.c b/tools/gpio/gpio-event-mon.c
index b70813b0bf8efa..e12e14780c0e45 100644
--- a/tools/gpio/gpio-event-mon.c
+++ b/tools/gpio/gpio-event-mon.c
@@ -121,7 +121,7 @@ int monitor_device(const char *device_name,
 		default:
 			fprintf(stdout, "unknown event");
 		}
-		fprintf(stdout, "\n");
+		putchar('\n');
 
 		i++;
 		if (i == loops)
diff --git a/tools/gpio/gpio-hammer.c b/tools/gpio/gpio-hammer.c
index ba0866eb358145..b76c94fee04d09 100644
--- a/tools/gpio/gpio-hammer.c
+++ b/tools/gpio/gpio-hammer.c
@@ -87,7 +87,7 @@ int hammer_device(const char *device_name, unsigned int *lines, int num_lines,
 		if (j == sizeof(swirr) - 1)
 			j = 0;
 
-		fprintf(stdout, "[");
+		putchar('[');
 		for (i = 0; i < num_lines; i++) {
 			fprintf(stdout, "%u: %d", lines[i],
 				gpiotools_test_bit(values.bits, i));
@@ -101,7 +101,7 @@ int hammer_device(const char *device_name, unsigned int *lines, int num_lines,
 		if (loops && iteration == loops)
 			break;
 	}
-	fprintf(stdout, "\n");
+	putchar('\n');
 	ret = 0;
 
 exit_close_error:
diff --git a/tools/gpio/lsgpio.c b/tools/gpio/lsgpio.c
index 52a0be45410c97..abb2c6fbc3d7ca 100644
--- a/tools/gpio/lsgpio.c
+++ b/tools/gpio/lsgpio.c
@@ -152,9 +152,9 @@ int list_device(const char *device_name)
 		if (linfo.flags) {
 			fprintf(stdout, " [");
 			print_attributes(&linfo);
-			fprintf(stdout, "]");
+			putchar(']');
 		}
-		fprintf(stdout, "\n");
+		putchar('\n');
 
 	}
 
diff --git a/tools/include/nolibc/err.h b/tools/include/nolibc/err.h
index e22ae87a728920..89c9a3d3bc7733 100644
--- a/tools/include/nolibc/err.h
+++ b/tools/include/nolibc/err.h
@@ -27,7 +27,7 @@ void vwarnx(const char *fmt, va_list args)
 {
 	fprintf(stderr, "%s: ", program_invocation_short_name);
 	vfprintf(stderr, fmt, args);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 }
 
 static __attribute__((unused))
diff --git a/tools/mm/page_owner_sort.c b/tools/mm/page_owner_sort.c
index e6954909401c8e..e3ab1db44b154e 100644
--- a/tools/mm/page_owner_sort.c
+++ b/tools/mm/page_owner_sort.c
@@ -867,7 +867,7 @@ int main(int argc, char **argv)
 			}
 			if (cull & CULL_STACKTRACE)
 				fprintf(fout, ":\n%s", list[i].stacktrace);
-			fprintf(fout, "\n");
+			fputc(fout, '\n');
 		}
 	}
 
diff --git a/tools/net/ynl/ynltool/main.c b/tools/net/ynl/ynltool/main.c
index 5d0f428eed0a7f..245d7f58c8fb65 100644
--- a/tools/net/ynl/ynltool/main.c
+++ b/tools/net/ynl/ynltool/main.c
@@ -156,7 +156,7 @@ void p_err(const char *fmt, ...)
 	} else {
 		fprintf(stderr, "Error: ");
 		vfprintf(stderr, fmt, ap);
-		fprintf(stderr, "\n");
+		fputc(stderr, '\n');
 	}
 	va_end(ap);
 }
@@ -170,7 +170,7 @@ void p_info(const char *fmt, ...)
 
 	va_start(ap, fmt);
 	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	va_end(ap);
 }
 
diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c
index 118c3de2f293ee..b6d27d326b8ad9 100644
--- a/tools/objtool/builtin-check.c
+++ b/tools/objtool/builtin-check.c
@@ -297,7 +297,7 @@ int make_backup(void)
 			fprintf(stderr, " %s", arg);
 	}
 
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	return 0;
 }
 
diff --git a/tools/objtool/disas.c b/tools/objtool/disas.c
index e6a54a83605c90..339d1d5690c420 100644
--- a/tools/objtool/disas.c
+++ b/tools/objtool/disas.c
@@ -537,7 +537,7 @@ void disas_print_insn(FILE *stream, struct disas_context *dctx,
 		return;
 
 	if (strcmp(format, "\n") == 0) {
-		fprintf(stream, "\n");
+		fputc(stream, '\n');
 		return;
 	}
 
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index c9584dbedf77af..fc9b6b18eded9e 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -2511,7 +2511,7 @@ static void print_cacheline(struct c2c_hists *c2c_hists,
 		hists__fprintf_headers(&c2c_hists->hists, out);
 		once = true;
 	} else {
-		fprintf(out, "\n");
+		fputc(out, '\n');
 	}
 
 	fprintf(out, "  ----------------------------------------------------------------------\n");
@@ -2590,15 +2590,15 @@ static void perf_c2c__hists_fprintf(FILE *out, struct perf_session *session)
 	setup_pager();
 
 	print_c2c__display_stats(out);
-	fprintf(out, "\n");
+	fputc(out, '\n');
 	print_shared_cacheline_info(out);
-	fprintf(out, "\n");
+	fputc(out, '\n');
 	print_c2c_info(out, session);
 
 	if (c2c.stats_only)
 		return;
 
-	fprintf(out, "\n");
+	fputc(out, '\n');
 	fprintf(out, "=================================================\n");
 	fprintf(out, "           Shared Data Cache Line Table          \n");
 	fprintf(out, "=================================================\n");
@@ -2606,7 +2606,7 @@ static void perf_c2c__hists_fprintf(FILE *out, struct perf_session *session)
 
 	hists__fprintf(&c2c.hists.hists, true, 0, 0, 0, stdout, true);
 
-	fprintf(out, "\n");
+	fputc(out, '\n');
 	fprintf(out, "=================================================\n");
 	fprintf(out, "      Shared Cache Line Distribution Pareto      \n");
 	fprintf(out, "=================================================\n");
diff --git a/tools/perf/builtin-daemon.c b/tools/perf/builtin-daemon.c
index c4632577d12963..7cb20b3a03e4cd 100644
--- a/tools/perf/builtin-daemon.c
+++ b/tools/perf/builtin-daemon.c
@@ -691,7 +691,7 @@ static int cmd_session_list(struct daemon *daemon, union cmd *cmd, FILE *out)
 			/* session up time */
 			csv_sep, (uint64_t)((curr - daemon->start) / 60));
 
-		fprintf(out, "\n");
+		fputc(out, '\n');
 	} else {
 		fprintf(out, "[%d:daemon] base: %s\n", getpid(), daemon->base);
 		if (cmd->list.verbose) {
@@ -730,7 +730,7 @@ static int cmd_session_list(struct daemon *daemon, union cmd *cmd, FILE *out)
 				/* session up time */
 				csv_sep, (uint64_t)((curr - session->start) / 60));
 
-			fprintf(out, "\n");
+			fputc(out, '\n');
 		} else {
 			fprintf(out, "[%d:%s] perf record %s\n",
 				session->pid, session->name, session->run);
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index 5841d43be97184..05f18d49fc7b17 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -1319,9 +1319,9 @@ static void print_result(void)
 
 		list_for_each_entry(key, &lock_keys, list) {
 			key->print(key, st);
-			fprintf(lock_output, " ");
+			fputc(lock_output, ' ');
 		}
-		fprintf(lock_output, "\n");
+		fputc(lock_output, '\n');
 
 		if (++printed >= print_nr_entries)
 			break;
@@ -1598,7 +1598,7 @@ static void print_header_csv(const char *sep)
 		fprintf(lock_output, "%s%s %s", "type", sep, "caller");
 		if (verbose > 0)
 			fprintf(lock_output, "%s %s", sep, "stacktrace");
-		fprintf(lock_output, "\n");
+		fputc(lock_output, '\n');
 		break;
 	case LOCK_AGGR_ADDR:
 		fprintf(lock_output, "%s%s %s%s %s\n", "address", sep, "symbol", sep, "type");
@@ -1629,7 +1629,7 @@ static void print_lock_stat_stdio(struct lock_contention *con, struct lock_stat
 
 	list_for_each_entry(key, &lock_keys, list) {
 		key->print(key, st);
-		fprintf(lock_output, " ");
+		fputc(lock_output, ' ');
 	}
 
 	switch (aggr_mode) {
@@ -1687,7 +1687,7 @@ static void print_lock_stat_csv(struct lock_contention *con, struct lock_stat *s
 	case LOCK_AGGR_CALLER:
 		fprintf(lock_output, "%s%s %s", get_type_flags_name(st->flags), sep, st->name);
 		if (verbose <= 0)
-			fprintf(lock_output, "\n");
+			fputc(lock_output, '\n');
 		break;
 	case LOCK_AGGR_TASK:
 		pid = st->addr;
@@ -1721,7 +1721,7 @@ static void print_lock_stat_csv(struct lock_contention *con, struct lock_stat *s
 			get_symbol_name_offset(kmap, sym, ip, buf, sizeof(buf));
 			fprintf(lock_output, "%s %#lx %s", i ? ":" : sep, (unsigned long) ip, buf);
 		}
-		fprintf(lock_output, "\n");
+		fputc(lock_output, '\n');
 	}
 }
 
@@ -1781,7 +1781,7 @@ static void print_footer_csv(int total, int bad, struct lock_contention_fails *f
 		for (i = 0; i < BROKEN_MAX; i++)
 			fprintf(lock_output, "%s bad_%s=%d", sep, name[i], bad_hist[i]);
 	}
-	fprintf(lock_output, "\n");
+	fputc(lock_output, '\n');
 }
 
 static void print_footer(int total, int bad, struct lock_contention_fails *fails)
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 9ac29bdc3cd547..e60c07305d198b 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -2561,7 +2561,7 @@ static void process_event(struct perf_script *script,
 
 	perf_sample__fprintf_ipc(sample, evsel, fp);
 
-	fprintf(fp, "\n");
+	fputc(fp, '\n');
 
 	if (PRINT_FIELD(SRCCODE)) {
 		if (map__fprintf_srccode(al->map, al->addr, stdout,
@@ -2815,7 +2815,7 @@ static int process_deferred_sample_event(const struct perf_tool *tool,
 				    cursor, symbol_conf.bt_stop_list, fp);
 	}
 
-	fprintf(fp, "\n");
+	fputc(fp, '\n');
 
 	if (verbose > 0)
 		fflush(fp);
@@ -3271,11 +3271,11 @@ static int list_available_languages_cb(struct scripting_ops *ops, const char *sp
 
 static void list_available_languages(void)
 {
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	fprintf(stderr, "Scripting language extensions (used in "
 		"perf script -s [spec:]script.[spec]):\n\n");
 	script_spec__for_each(&list_available_languages_cb);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 }
 
 /* Find script file relative to current directory or exec path */
diff --git a/tools/perf/ui/gtk/util.c b/tools/perf/ui/gtk/util.c
index c47f5c387838c5..037ebc47f7dccc 100644
--- a/tools/perf/ui/gtk/util.c
+++ b/tools/perf/ui/gtk/util.c
@@ -37,7 +37,7 @@ static int perf_gtk__error(const char *format, va_list args)
 	    vasprintf(&msg, format, args) < 0) {
 		fprintf(stderr, "Error:\n");
 		vfprintf(stderr, format, args);
-		fprintf(stderr, "\n");
+		fputc(stderr, '\n');
 		return -1;
 	}
 
@@ -62,7 +62,7 @@ static int perf_gtk__warning_info_bar(const char *format, va_list args)
 	    vasprintf(&msg, format, args) < 0) {
 		fprintf(stderr, "Warning:\n");
 		vfprintf(stderr, format, args);
-		fprintf(stderr, "\n");
+		fputc(stderr, '\n');
 		return -1;
 	}
 
@@ -83,7 +83,7 @@ static int perf_gtk__warning_statusbar(const char *format, va_list args)
 	    vasprintf(&msg, format, args) < 0) {
 		fprintf(stderr, "Warning:\n");
 		vfprintf(stderr, format, args);
-		fprintf(stderr, "\n");
+		fputc(stderr, '\n');
 		return -1;
 	}
 
diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
index 8c4c8925df2c22..044d2aa3b31218 100644
--- a/tools/perf/ui/stdio/hist.c
+++ b/tools/perf/ui/stdio/hist.c
@@ -691,7 +691,7 @@ static int hists__fprintf_hierarchy_headers(struct hists *hists,
 		}
 
 next_line:
-		fprintf(fp, "\n");
+		fputc(fp, '\n');
 	}
 
 	fprintf(fp, "# ");
@@ -783,7 +783,7 @@ hists__fprintf_standard_headers(struct hists *hists,
 		if (line)
 			fprintf(fp, "# ");
 		fprintf_line(hists, hpp, line, fp);
-		fprintf(fp, "\n");
+		fputc(fp, '\n');
 	}
 
 	if (sep)
@@ -806,10 +806,10 @@ hists__fprintf_standard_headers(struct hists *hists,
 
 		width = fmt->width(fmt, hpp, hists);
 		for (i = 0; i < width; i++)
-			fprintf(fp, ".");
+			fputc(fp, '.');
 	}
 
-	fprintf(fp, "\n");
+	fputc(fp, '\n');
 	fprintf(fp, "#\n");
 	return hpp_list->nr_header_lines + 2;
 }
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 5d0664ff73b791..8e099ccaae39a6 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -895,7 +895,7 @@ static void cs_etm__dump_event(struct cs_etm_queue *etmq,
 	const char *color = PERF_COLOR_BLUE;
 	size_t buffer_used = 0;
 
-	fprintf(stdout, "\n");
+	putchar('\n');
 	color_fprintf(stdout, color,
 		     ". ... CoreSight %s Trace data: size %#zx bytes\n",
 		     cs_etm_decoder__get_name(etmq->decoder), buffer->size);
diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c
index 6b5ffe81f14121..5429984ab49c90 100644
--- a/tools/perf/util/debug.c
+++ b/tools/perf/util/debug.c
@@ -350,7 +350,7 @@ void __dump_stack(FILE *file, void **stackdump, size_t stackdump_size)
 			fprintf(file, "    #%zd %p ", i, stackdump[i]);
 
 		map__fprintf_srcline(al.map, al.addr, "", file);
-		fprintf(file, "\n");
+		fputc(file, '\n');
 		addr_location__exit(&al);
 	}
 	thread__put(thread);
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 091d8f7f6bd2c9..965b17c81224b6 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -2454,7 +2454,7 @@ static void __print_pmu_caps(FILE *fp, int nr_caps, char **caps, char *pmu_name)
 		delimiter = ", ";
 	}
 
-	fprintf(fp, "\n");
+	fputc(fp, '\n');
 }
 
 static void print_cpu_pmu_caps(struct feat_fd *ff, FILE *fp)
@@ -2513,7 +2513,7 @@ static void print_pmu_mappings(struct feat_fd *ff, FILE *fp)
 		pmu_num--;
 	}
 
-	fprintf(fp, "\n");
+	fputc(fp, '\n');
 
 	if (!pmu_num)
 		return;
@@ -4349,7 +4349,7 @@ int perf_header__fprintf_info(struct perf_session *session, FILE *fp, bool full)
 			fprintf(fp, "%s ", feat_ops[bit].name);
 	}
 
-	fprintf(fp, "\n");
+	fputc(fp, '\n');
 	return 0;
 }
 
diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-log.c b/tools/perf/util/intel-pt-decoder/intel-pt-log.c
index ef55d6232cf0c2..0a35493b854acd 100644
--- a/tools/perf/util/intel-pt-decoder/intel-pt-log.c
+++ b/tools/perf/util/intel-pt-decoder/intel-pt-log.c
@@ -70,14 +70,14 @@ static void intel_pt_print_data(const unsigned char *buf, int len, uint64_t pos,
 	int i;
 
 	for (i = 0; i < indent; i++)
-		fprintf(f, " ");
+		fputc(f, ' ');
 
 	fprintf(f, "  %08" PRIx64 ": ", pos);
 	for (i = 0; i < len; i++)
 		fprintf(f, " %02x", buf[i]);
 	for (; i < 16; i++)
 		fprintf(f, "   ");
-	fprintf(f, " ");
+	fputc(f, ' ');
 }
 
 static void intel_pt_print_no_data(uint64_t pos, int indent)
@@ -85,12 +85,12 @@ static void intel_pt_print_no_data(uint64_t pos, int indent)
 	int i;
 
 	for (i = 0; i < indent; i++)
-		fprintf(f, " ");
+		fputc(f, ' ');
 
 	fprintf(f, "  %08" PRIx64 ": ", pos);
 	for (i = 0; i < 16; i++)
 		fprintf(f, "   ");
-	fprintf(f, " ");
+	fputc(f, ' ');
 }
 
 static ssize_t log_buf__write(void *cookie, const char *buf, size_t size)
diff --git a/tools/perf/util/libbfd.c b/tools/perf/util/libbfd.c
index c1c12308cc12ff..263894663f1a87 100644
--- a/tools/perf/util/libbfd.c
+++ b/tools/perf/util/libbfd.c
@@ -603,7 +603,7 @@ int symbol__disassemble_bpf_libbfd(struct symbol *sym __maybe_unused,
 		} else
 			srcline = NULL;
 
-		fprintf(s, "\n");
+		fputc(s, '\n');
 		prev_buf_size = buf_size;
 		fflush(s);
 
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index f391a822480db0..63a8d3ccaa4f9c 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1257,7 +1257,7 @@ int perf_event__process_finished_round(const struct perf_tool *tool __maybe_unus
 				       struct ordered_events *oe)
 {
 	if (dump_trace)
-		fprintf(stdout, "\n");
+		putchar('\n');
 	return ordered_events__flush(oe, OE_FLUSH__ROUND);
 }
 
@@ -4000,7 +4000,7 @@ int perf_event__process_id_index(const struct perf_tool *tool __maybe_unused,
 				fprintf(stdout, "  machine_pid: %"PRI_ld64, e2->machine_pid);
 				fprintf(stdout, "  vcpu: %"PRI_lu64"\n", e2->vcpu);
 			} else {
-				fprintf(stdout, "\n");
+				putchar('\n');
 			}
 		}
 
diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
index 0a5750bb59fa3b..3be7a7f4fda335 100644
--- a/tools/perf/util/stat-display.c
+++ b/tools/perf/util/stat-display.c
@@ -529,7 +529,7 @@ static void print_metric_json(struct perf_stat_config *config __maybe_unused,
 		}
 	}
 	if (!config->metric_only)
-		fprintf(out, "}");
+		fputc(out, '}');
 }
 
 static void new_line_json(struct perf_stat_config *config, void *ctx)
@@ -1316,7 +1316,7 @@ static void print_header_std(struct perf_stat_config *config,
 	FILE *output = config->output;
 	int i;
 
-	fprintf(output, "\n");
+	fputc(output, '\n');
 	fprintf(output, " Performance counter stats for ");
 	if (_target->bpf_str)
 		fprintf(output, "\'BPF program(s) %s", _target->bpf_str);
@@ -1333,7 +1333,7 @@ static void print_header_std(struct perf_stat_config *config,
 	else
 		fprintf(output, "thread id \'%s", _target->tid);
 
-	fprintf(output, "\'");
+	fputc(output, '\'');
 	if (config->run_count > 1)
 		fprintf(output, " (%d runs)", config->run_count);
 	fprintf(output, ":\n\n");
@@ -1406,9 +1406,9 @@ static void print_table(struct perf_stat_config *config, FILE *output, double av
 		fprintf(output, " %17.9f (%+.9f) ", run, run - avg);
 
 		for (h = 0; h < n; h++)
-			fprintf(output, "#");
+			fputc(output, '#');
 
-		fprintf(output, "\n");
+		fputc(output, '\n');
 	}
 
 	fprintf(output, "\n%*s# Final result:\n", indent, "");
@@ -1428,7 +1428,7 @@ static void print_footer(struct perf_stat_config *config)
 		return;
 
 	if (!config->null_run)
-		fprintf(output, "\n");
+		fputc(output, '\n');
 
 	if (config->run_count == 1) {
 		fprintf(output, " %17.9f seconds time elapsed", avg);
diff --git a/tools/perf/util/values.c b/tools/perf/util/values.c
index 6eaddfcf833e52..2c5340a928dd1d 100644
--- a/tools/perf/util/values.c
+++ b/tools/perf/util/values.c
@@ -217,7 +217,7 @@ static void perf_read_values__display_pretty(FILE *fp,
 	fprintf(fp, "# %*s  %*s", pidwidth, "PID", tidwidth, "TID");
 	for (j = 0; j < values->num_counters; j++)
 		fprintf(fp, "  %*s", counterwidth[j], evsel__name(values->counters[j]));
-	fprintf(fp, "\n");
+	fputc(fp, '\n');
 
 	for (i = 0; i < values->threads; i++) {
 		fprintf(fp, "  %*d  %*d", pidwidth, values->pid[i],
@@ -225,7 +225,7 @@ static void perf_read_values__display_pretty(FILE *fp,
 		for (j = 0; j < values->num_counters; j++)
 			fprintf(fp, "  %*" PRIu64,
 				counterwidth[j], values->value[i][j]);
-		fprintf(fp, "\n");
+		fputc(fp, '\n');
 	}
 	free(counterwidth);
 }
diff --git a/tools/power/acpi/tools/acpidump/apdump.c b/tools/power/acpi/tools/acpidump/apdump.c
index 72ad7915b04fd2..600d5b6e04a880 100644
--- a/tools/power/acpi/tools/acpidump/apdump.c
+++ b/tools/power/acpi/tools/acpidump/apdump.c
@@ -171,7 +171,7 @@ ap_dump_table_buffer(struct acpi_table_header *table,
 	acpi_ut_dump_buffer_to_file(gbl_output_file,
 				    ACPI_CAST_PTR(u8, table), table_length,
 				    DB_BYTE_DISPLAY, 0);
-	fprintf(gbl_output_file, "\n");
+	fputc(gbl_output_file, '\n');
 	return (0);
 }
 
diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c
index e4884eb0283791..5d492780aad9bb 100644
--- a/tools/power/x86/intel-speed-select/isst-display.c
+++ b/tools/power/x86/intel-speed-select/isst-display.c
@@ -122,7 +122,7 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)
 
 	if (level == 0) {
 		if (header)
-			fprintf(outf, "{");
+			fputc(outf, '{');
 		else
 			fprintf(outf, "\n}\n");
 
@@ -138,7 +138,7 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)
 
 		if (value) {
 			if (last_level != level)
-				fprintf(outf, "\n");
+				fputc(outf, '\n');
 
 			fprintf(outf, "%s\"%s\": ", delimiters, header);
 			fprintf(outf, "\"%s\"", value);
@@ -156,7 +156,7 @@ static void format_and_print(FILE *outf, int level, char *header, char *value)
 					fprintf(outf, "\n%s}", delimiters);
 			}
 			if (abs(last_level - level) < 3)
-				fprintf(outf, "\n");
+				fputc(outf, '\n');
 			if (header)
 				fprintf(outf, "%s\"%s\": {", delimiters,
 					header);
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 920694c3c1ec94..45d39a0fcf72a0 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -9099,7 +9099,7 @@ void dump_cpuid_hypervisor(void)
 	dump_word_chars(ebx);
 	dump_word_chars(ecx);
 	dump_word_chars(edx);
-	fprintf(outf, "\n");
+	fputc(outf, '\n');
 }
 
 void process_cpuid()
@@ -9749,7 +9749,7 @@ void topology_probe(bool startup)
 		fprintf(outf, " siblings");
 		for (ht_id = 0; ht_id <= MAX_HT_ID; ++ht_id)
 			fprintf(outf, " %d", cpus[i].ht_sibling_cpu_id[ht_id]);
-		fprintf(outf, "\n");
+		fputc(outf, '\n');
 	}
 
 }
diff --git a/tools/testing/selftests/bpf/benchs/bench_htab_mem.c b/tools/testing/selftests/bpf/benchs/bench_htab_mem.c
index 1ee217d974340e..64b97a41af45ea 100644
--- a/tools/testing/selftests/bpf/benchs/bench_htab_mem.c
+++ b/tools/testing/selftests/bpf/benchs/bench_htab_mem.c
@@ -148,7 +148,7 @@ static const struct htab_mem_use_case *htab_mem_find_use_case_or_exit(const char
 	fprintf(stderr, "available use case:");
 	for (i = 0; i < ARRAY_SIZE(use_cases); i++)
 		fprintf(stderr, " %s", use_cases[i].name);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	exit(1);
 }
 
diff --git a/tools/testing/selftests/bpf/jit_disasm_helpers.c b/tools/testing/selftests/bpf/jit_disasm_helpers.c
index 3558fe10e28cf9..58ea2a2ec13e2d 100644
--- a/tools/testing/selftests/bpf/jit_disasm_helpers.c
+++ b/tools/testing/selftests/bpf/jit_disasm_helpers.c
@@ -228,7 +228,7 @@ int get_jited_program_text(int fd, char *text, size_t text_sz)
 	for (pc = 0, i = 0; i < jited_funcs; ++i) {
 		fprintf(text_out, "func #%d:\n", i);
 		disasm_one_func(text_out, image + pc, func_lens[i]);
-		fprintf(text_out, "\n");
+		fputc(text_out, '\n');
 		pc += func_lens[i];
 	}
 
diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c
index 7ba82974ee784d..b520be1bf7aaa7 100644
--- a/tools/testing/selftests/bpf/test_progs.c
+++ b/tools/testing/selftests/bpf/test_progs.c
@@ -383,7 +383,7 @@ static void print_test_result(const struct prog_test_def *test, const struct tes
 	else
 		fprintf(env.stdout_saved, "OK (SKIP: %d/%d)", skipped_cnt, subtests_cnt);
 
-	fprintf(env.stdout_saved, "\n");
+	fputc(env.stdout_saved, '\n');
 }
 
 static void print_test_log(char *log_buf, size_t log_cnt)
@@ -391,7 +391,7 @@ static void print_test_log(char *log_buf, size_t log_cnt)
 	log_buf[log_cnt] = '\0';
 	fprintf(env.stdout_saved, "%s", log_buf);
 	if (log_buf[log_cnt - 1] != '\n')
-		fprintf(env.stdout_saved, "\n");
+		fputc(env.stdout_saved, '\n');
 }
 
 static void print_subtest_name(int test_num, int subtest_num,
@@ -409,7 +409,7 @@ static void print_subtest_name(int test_num, int subtest_num,
 	if (result)
 		fprintf(env.stdout_saved, ":%s", result);
 
-	fprintf(env.stdout_saved, "\n");
+	fputc(env.stdout_saved, '\n');
 }
 
 static void jsonw_write_log_message(json_writer_t *w, char *log_buf, size_t log_cnt)
@@ -1333,14 +1333,14 @@ void hexdump(const char *prefix, const void *buf, size_t len)
 	for (int i = 0; i < len; i++) {
 		if (!(i % 16)) {
 			if (i)
-				fprintf(stdout, "\n");
+				putchar('\n');
 			fprintf(stdout, "%s", prefix);
 		}
 		if (i && !(i % 8) && (i % 16))
-			fprintf(stdout, "\t");
+			putchar('\t');
 		fprintf(stdout, "%02X ", ((uint8_t *)(buf))[i]);
 	}
-	fprintf(stdout, "\n");
+	putchar('\n');
 }
 
 static void sigint_handler(int signum)
diff --git a/tools/testing/selftests/bpf/veristat.c b/tools/testing/selftests/bpf/veristat.c
index a7db6f04f7e145..d1c7f06b8b1cf9 100644
--- a/tools/testing/selftests/bpf/veristat.c
+++ b/tools/testing/selftests/bpf/veristat.c
@@ -1605,7 +1605,7 @@ static void dump(__u32 prog_id, enum dump_mode mode, const char *file_name, cons
 	printf("DUMP (%s) %s/%s:\n", mode == DUMP_JITED ? "JITED" : "XLATED", file_name, prog_name);
 	while (fgets(buf, sizeof(buf), fp))
 		fputs(buf, stdout);
-	fprintf(stdout, "\n");
+	putchar('\n');
 
 	if (ferror(fp))
 		fprintf(stderr, "Failed to dump BPF prog with error: %d\n", errno);
diff --git a/tools/testing/selftests/drivers/net/hw/ncdevmem.c b/tools/testing/selftests/drivers/net/hw/ncdevmem.c
index d96e8a3b5a6526..7bdcc4114dba1c 100644
--- a/tools/testing/selftests/drivers/net/hw/ncdevmem.c
+++ b/tools/testing/selftests/drivers/net/hw/ncdevmem.c
@@ -135,7 +135,7 @@ static void pr_err(const char *fmt, ...)
 
 	if (errno != 0)
 		fprintf(stderr, ": %s", strerror(errno));
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 }
 
 static struct memory_buffer *udmabuf_alloc(size_t size)
diff --git a/tools/testing/selftests/kvm/s390/keyop.c b/tools/testing/selftests/kvm/s390/keyop.c
index c7805e87d12c5d..120834f8ba0da5 100644
--- a/tools/testing/selftests/kvm/s390/keyop.c
+++ b/tools/testing/selftests/kvm/s390/keyop.c
@@ -117,7 +117,7 @@ static void dump_sk(const unsigned char skeys[], const char *descr)
 		fprintf(stderr, "# %3d: ", i);
 		for (j = 0; j < 32; j++)
 			fprintf(stderr, "%02x ", skeys[i + j]);
-		fprintf(stderr, "\n");
+		fputc(stderr, '\n');
 	}
 }
 
diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
index 78180da1efcc53..40467e86bfd47b 100644
--- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
+++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c
@@ -208,7 +208,7 @@ static int capture_events(int fd, int event_group)
 		}
 		if (server_side)
 			fprintf(stderr, ",server_side:1");
-		fprintf(stderr, "\n");
+		fputc(stderr, '\n');
 	} while (1);
 
 	return 0;
diff --git a/tools/testing/selftests/net/psock_tpacket.c b/tools/testing/selftests/net/psock_tpacket.c
index 7caf3135448da7..724da9222ad9a0 100644
--- a/tools/testing/selftests/net/psock_tpacket.c
+++ b/tools/testing/selftests/net/psock_tpacket.c
@@ -116,7 +116,7 @@ static int pfsocket(int ver)
 static void status_bar_update(void)
 {
 	if (total_packets % 10 == 0) {
-		fprintf(stderr, ".");
+		fputc(stderr, '.');
 		fflush(stderr);
 	}
 }
@@ -825,7 +825,7 @@ static int test_tpacket(int version, int type)
 	unmap_ring(sock, &ring);
 	close(sock);
 
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	return 0;
 }
 
diff --git a/tools/testing/selftests/net/txtimestamp.c b/tools/testing/selftests/net/txtimestamp.c
index 170be192f5c7ce..86c8d4945d73c1 100644
--- a/tools/testing/selftests/net/txtimestamp.c
+++ b/tools/testing/selftests/net/txtimestamp.c
@@ -200,10 +200,10 @@ static void __print_timestamp(const char *name, struct timespec *cur,
 		ts_delta = timespec_to_ns64(cur) - timespec_to_ns64(&ts_usr);
 		fprintf(stderr, "  (USR +");
 		__print_ts_delta_formatted(ts_delta);
-		fprintf(stderr, ")");
+		fputc(stderr, ')');
 	}
 
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 }
 
 static void record_timestamp_usr(void)
@@ -254,7 +254,7 @@ static void print_timing_event(char *name, struct timing_event *te)
 	__print_ts_delta_formatted(te->min);
 	fprintf(stderr, ", max=");
 	__print_ts_delta_formatted(te->max);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 }
 
 /* TODO: convert to check_and_print payload once API is stable */
@@ -271,7 +271,7 @@ static void print_payload(char *data, int len)
 	fprintf(stderr, "payload: ");
 	for (i = 0; i < len; i++)
 		fprintf(stderr, "%02hhx ", data[i]);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 }
 
 static void print_pktinfo(int family, int ifindex, void *saddr, void *daddr)
@@ -933,7 +933,7 @@ int main(int argc, char **argv)
 	fprintf(stderr, "protocol:     %s\n", sock_names[cfg_proto]);
 	fprintf(stderr, "payload:      %u\n", cfg_payload_len);
 	fprintf(stderr, "server port:  %u\n", dest_port);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 
 	if (do_ipv4) {
 		if (cfg_do_listen)
diff --git a/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c b/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c
index 7c23d3dd7d6d91..412defe9827143 100644
--- a/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c
+++ b/tools/testing/selftests/powerpc/nx-gzip/gunz_test.c
@@ -363,7 +363,7 @@ int decompress_file(int argc, char **argv, void *devhandle)
 			goto err3;
 		fprintf(stderr, "%02x ", tmp[i]);
 		if (i == 5)
-			fprintf(stderr, "\n");
+			fputc(stderr, '\n');
 	}
 	fprintf(stderr, "gzHeader MTIME, XFL, OS ignored\n");
 
diff --git a/tools/testing/selftests/vfio/lib/include/libvfio/assert.h b/tools/testing/selftests/vfio/lib/include/libvfio/assert.h
index 77b68c7129a648..82015b19df6c39 100644
--- a/tools/testing/selftests/vfio/lib/include/libvfio/assert.h
+++ b/tools/testing/selftests/vfio/lib/include/libvfio/assert.h
@@ -10,7 +10,7 @@
 
 #define VFIO_LOG_AND_EXIT(...) do {		\
 	fprintf(stderr, "  " __VA_ARGS__);	\
-	fprintf(stderr, "\n");			\
+	fputc(stderr, '\n');			\
 	exit(KSFT_FAIL);			\
 } while (0)
 
diff --git a/tools/testing/selftests/vfio/lib/libvfio.c b/tools/testing/selftests/vfio/lib/libvfio.c
index 3a3d1ed635c1df..80a312f149a66e 100644
--- a/tools/testing/selftests/vfio/lib/libvfio.c
+++ b/tools/testing/selftests/vfio/lib/libvfio.c
@@ -60,16 +60,16 @@ char **vfio_selftests_get_bdfs(int *argc, char *argv[], int *nr_bdfs)
 	}
 
 	fprintf(stderr, "Unable to determine which device(s) to use, skipping test.\n");
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	fprintf(stderr, "To pass the device address via environment variable:\n");
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	fprintf(stderr, "    export VFIO_SELFTESTS_BDF=\"segment:bus:device.function\"\n");
 	fprintf(stderr, "    %s [options]\n", argv[0]);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	fprintf(stderr, "To pass the device address(es) via argv:\n");
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	fprintf(stderr, "    %s [options] segment:bus:device.function ...\n", argv[0]);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	exit(KSFT_SKIP);
 }
 
diff --git a/tools/testing/vsock/vsock_diag_test.c b/tools/testing/vsock/vsock_diag_test.c
index 081e045f46960e..cc903cdb45d92e 100644
--- a/tools/testing/vsock/vsock_diag_test.c
+++ b/tools/testing/vsock/vsock_diag_test.c
@@ -86,7 +86,7 @@ static void print_vsock_addr(FILE *fp, unsigned int cid, unsigned int port)
 		fprintf(fp, "%u:", cid);
 
 	if (port == VMADDR_PORT_ANY)
-		fprintf(fp, "*");
+		fputc(fp, '*');
 	else
 		fprintf(fp, "%u", port);
 }
@@ -94,7 +94,7 @@ static void print_vsock_addr(FILE *fp, unsigned int cid, unsigned int port)
 static void print_vsock_stat(FILE *fp, struct vsock_stat *st)
 {
 	print_vsock_addr(fp, st->msg.vdiag_src_cid, st->msg.vdiag_src_port);
-	fprintf(fp, " ");
+	fputc(fp, ' ');
 	print_vsock_addr(fp, st->msg.vdiag_dst_cid, st->msg.vdiag_dst_port);
 	fprintf(fp, " %s %s %s %u\n",
 		sock_type_str(st->msg.vdiag_type),
diff --git a/tools/thermal/tmon/sysfs.c b/tools/thermal/tmon/sysfs.c
index cb1108bc924989..ebdb95819a766d 100644
--- a/tools/thermal/tmon/sysfs.c
+++ b/tools/thermal/tmon/sysfs.c
@@ -522,7 +522,7 @@ int update_thermal_data()
 	}
 
 	if (tmon_log) {
-		fprintf(tmon_log, "\n");
+		fputc(tmon_log, '\n');
 		fflush(tmon_log);
 	}
 
diff --git a/tools/thermal/tmon/tmon.c b/tools/thermal/tmon/tmon.c
index 7eb3216a27f45f..9a972f73a2c005 100644
--- a/tools/thermal/tmon/tmon.c
+++ b/tools/thermal/tmon/tmon.c
@@ -199,7 +199,7 @@ static void prepare_logging(void)
 		fprintf(tmon_log, "%s%d ", ptdata.cdi[i].type,
 			ptdata.cdi[i].instance);
 
-	fprintf(tmon_log, "\n");
+	fputc(tmon_log, '\n');
 }
 
 static struct option opts[] = {
diff --git a/tools/tracing/latency/latency-collector.c b/tools/tracing/latency/latency-collector.c
index ef97916e3873a1..3dc6fb9df92683 100644
--- a/tools/tracing/latency/latency-collector.c
+++ b/tools/tracing/latency/latency-collector.c
@@ -1999,7 +1999,7 @@ static void scan_arguments(int argc, char *argv[])
 "been enabled. Random sleep is intended for the following tracers:\n");
 			for (i = 0; random_tracers[i]; i++)
 				fprintf(stderr, "%s\n", random_tracers[i]);
-			fprintf(stderr, "\n");
+			fputc(stderr, '\n');
 		}
 	}
 
diff --git a/tools/tracing/rtla/src/common.c b/tools/tracing/rtla/src/common.c
index 8c7f5e75b2ec8d..e81e676d51d2ad 100644
--- a/tools/tracing/rtla/src/common.c
+++ b/tools/tracing/rtla/src/common.c
@@ -449,7 +449,7 @@ void common_usage(const char *tool, const char *mode,
 		fprintf(stderr, "%s [-h] ", mode);
 
 	print_msg_array(start_msgs);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 	print_msg_array(common_options);
 	print_msg_array(opt_msgs);
 
diff --git a/tools/tracing/rtla/src/utils.c b/tools/tracing/rtla/src/utils.c
index cb187e7d48d1c2..3532da2f2296d8 100644
--- a/tools/tracing/rtla/src/utils.c
+++ b/tools/tracing/rtla/src/utils.c
@@ -67,7 +67,7 @@ void fatal(const char *fmt, ...)
 	va_start(ap, fmt);
 	vfprintf(stderr, fmt, ap);
 	va_end(ap);
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 
 	exit(ERROR);
 }
diff --git a/tools/usb/ffs-test.c b/tools/usb/ffs-test.c
index 22b938fbdfb772..e993736ba0d647 100644
--- a/tools/usb/ffs-test.c
+++ b/tools/usb/ffs-test.c
@@ -562,7 +562,7 @@ empty_out_buf(struct thread *ignore, const void *buf, size_t nbytes)
 				fprintf(stderr, "%4zd:", len);
 			fprintf(stderr, " %02x", *p);
 			if (31 == (len % 32))
-				fprintf(stderr, "\n");
+				fputc(stderr, '\n');
 		}
 		fflush(stderr);
 		errno = EILSEQ;
diff --git a/tools/verification/rv/src/in_kernel.c b/tools/verification/rv/src/in_kernel.c
index e6dea4040f8f4c..26132171f6008e 100644
--- a/tools/verification/rv/src/in_kernel.c
+++ b/tools/verification/rv/src/in_kernel.c
@@ -667,7 +667,7 @@ static void ikm_usage_print_reactors(void)
 		end = strstr(start, "\n");
 	}
 
-	fprintf(stderr, "\n");
+	fputc(stderr, '\n');
 }
 /*
  * ikm_usage - print usage

3/2 2026/07/25 22:36 llm patch-evaluator
0m Model:
gemini-3.1-pro-preview

Args:
null

Results:
null

Tokens:
							input: 17681
							output: 80
							thoughts: 993
						

Thoughts:
**Fuzzing Decision: WorthFuzzing=false**

Okay, so I'm looking at this patch that's been proposed. It seems like it's a straightforward replacement of `fprintf(..., "\n")` with either `fputc(..., '\n')` or `putchar('\n')`. It's happening across a bunch of files, but they're all located within the `tools/` directory. That's a key indicator right there – `tools/` is for user-space utilities, not kernel-level code. This is definitely not a change to anything that runs directly in the kernel itself.

I need to confirm my initial assumption. I've taken a quick scan of the modified files: `bpftool`, various GPIO tools, perf utilities, `acpidump`, `turbostat`, BPF selftests, KVM selftests, and others. The file list confirms my initial hunch. These are all user-space tools and testing frameworks. I don't see anything touching core kernel functionalities or drivers.

Since this is purely a cosmetic change to the output of user-space tools—no functional changes to the kernel itself—it shouldn't be fuzzed. Therefore, `WorthFuzzing` should be set to `false`. No kernel logic is involved here.



4/2 2026/07/25 22:36 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The patch only modifies user-space tools and tests in the `tools/` directory by replacing `fprintf` with `fputc` or `putchar` for single characters. It does not make any functional changes to the kernel code itself.",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The patch only modifies user-space tools and tests in the `tools/` directory by replacing `fprintf` with `fputc` or `putchar` for single characters. It does not make any functional changes to the kernel code itself.",
  "WorthFuzzing": false
}

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)