WARNING: line length of 88 exceeds 80 columns #58: FILE: include/linux/bpf_verifier.h:920: + /* Per-callsite copy of parent's converged at_stack_in for cross-frame fills. */ WARNING: line length of 83 exceeds 80 columns #162: FILE: kernel/bpf/liveness.c:842: + s16 off[MAX_ARG_OFFSETS]; /* byte offsets; off_cnt says how many */ WARNING: line length of 86 exceeds 80 columns #194: FILE: kernel/bpf/liveness.c:874: +static void clear_overlapping_stack_slots(struct arg_track *at_stack, s16 off, u32 sz) WARNING: line length of 81 exceeds 80 columns #212: FILE: kernel/bpf/liveness.c:892: +static void verbose_arg_track(struct bpf_verifier_env *env, struct arg_track *at) ERROR: trailing statements should be on next line #217: FILE: kernel/bpf/liveness.c:897: + case ARG_NONE: verbose(env, "_"); break; ERROR: trailing statements should be on next line #218: FILE: kernel/bpf/liveness.c:898: + case ARG_UNVISITED: verbose(env, "?"); break; ERROR: trailing statements should be on next line #219: FILE: kernel/bpf/liveness.c:899: + case ARG_IMPRECISE: verbose(env, "IMP%x", at->mask); break; WARNING: line length of 81 exceeds 80 columns #268: FILE: kernel/bpf/liveness.c:948: +static struct arg_track arg_merge_offsets(struct arg_track a, struct arg_track b) CHECK: Please use a blank line after function/struct/union/enum declarations #303: FILE: kernel/bpf/liveness.c:983: +} +/* WARNING: line length of 82 exceeds 80 columns #309: FILE: kernel/bpf/liveness.c:989: +static struct arg_track arg_join_imprecise(struct arg_track a, struct arg_track b) WARNING: line length of 84 exceeds 80 columns #368: FILE: kernel/bpf/liveness.c:1048: +static bool arg_track_join(struct bpf_verifier_env *env, int idx, int target, int r, WARNING: line length of 86 exceeds 80 columns #406: FILE: kernel/bpf/liveness.c:1086: + if (dst->frame >= 0 && (src->frame == ARG_NONE || src->frame == dst->frame)) { WARNING: line length of 83 exceeds 80 columns #532: FILE: kernel/bpf/liveness.c:1212: + clear_overlapping_stack_slots(at_stack_out, insn->off, sz); WARNING: line length of 87 exceeds 80 columns #576: FILE: kernel/bpf/liveness.c:1256: +static void arg_track_log(struct bpf_verifier_env *env, struct bpf_insn *insn, int idx, WARNING: line length of 81 exceeds 80 columns #577: FILE: kernel/bpf/liveness.c:1257: + struct arg_track *at_in, struct arg_track *at_stack_in, WARNING: line length of 83 exceeds 80 columns #578: FILE: kernel/bpf/liveness.c:1258: + struct arg_track *at_out, struct arg_track *at_stack_out) WARNING: line length of 97 exceeds 80 columns #606: FILE: kernel/bpf/liveness.c:1286: + verbose(env, "\tfp%+d: ", -(i + 1) * 8); verbose_arg_track(env, &at_stack_in[i]); WARNING: line length of 84 exceeds 80 columns #620: FILE: kernel/bpf/liveness.c:1300: + struct arg_track *at_out, struct arg_track *at_stack_out, WARNING: line length of 92 exceeds 80 columns #640: FILE: kernel/bpf/liveness.c:1320: + /* Any other 64-bit alu on the pointer makes it imprecise */ WARNING: line length of 85 exceeds 80 columns #662: FILE: kernel/bpf/liveness.c:1342: + * at_stack_out[slot] is not cleared by the helper and subprog calls. WARNING: line length of 104 exceeds 80 columns #663: FILE: kernel/bpf/liveness.c:1343: + * The fill_from_stack() may return the stale spill — which is an FP-derived arg_track WARNING: line length of 98 exceeds 80 columns #664: FILE: kernel/bpf/liveness.c:1344: + * (the value that was originally spilled there). The loaded register then carries WARNING: line length of 104 exceeds 80 columns #665: FILE: kernel/bpf/liveness.c:1345: + * a phantom FP-derived identity that doesn't correspond to what's actually in the slot. WARNING: line length of 98 exceeds 80 columns #666: FILE: kernel/bpf/liveness.c:1346: + * This phantom FP pointer propagates forward, and wherever it's subsequently used WARNING: line length of 92 exceeds 80 columns #667: FILE: kernel/bpf/liveness.c:1347: + * (as a helper argument, another store, etc.), it sets stack liveness bits. WARNING: line length of 86 exceeds 80 columns #668: FILE: kernel/bpf/liveness.c:1348: + * Those bits correspond to stack accesses that don't actually happen. WARNING: line length of 103 exceeds 80 columns #669: FILE: kernel/bpf/liveness.c:1349: + * So the effect is over-reporting stack liveness — marking slots as live that aren't WARNING: line length of 100 exceeds 80 columns #670: FILE: kernel/bpf/liveness.c:1350: + * actually accessed. The verifier preserves more state than necessary across calls, WARNING: line length of 98 exceeds 80 columns #673: FILE: kernel/bpf/liveness.c:1353: + * helpers can scratch stack slots, but they won't make a valid pointer out of it. WARNING: line length of 89 exceeds 80 columns #674: FILE: kernel/bpf/liveness.c:1354: + * subprogs are allowed to write into parent slots, but they cannot write WARNING: line length of 86 exceeds 80 columns #675: FILE: kernel/bpf/liveness.c:1355: + * _any_ FP-derived pointer into it (either their own or parent's FP). WARNING: line length of 92 exceeds 80 columns #681: FILE: kernel/bpf/liveness.c:1361: + bool src_is_local_fp = insn->src_reg == BPF_REG_FP || src->frame == depth || WARNING: line length of 97 exceeds 80 columns #682: FILE: kernel/bpf/liveness.c:1362: + (src->frame == ARG_IMPRECISE && (src->mask & BIT(depth))); WARNING: line length of 84 exceeds 80 columns #690: FILE: kernel/bpf/liveness.c:1370: + if (src_is_local_fp && BPF_MODE(insn->code) == BPF_MEM && sz == 8) { WARNING: line length of 97 exceeds 80 columns #691: FILE: kernel/bpf/liveness.c:1371: + *dst = fill_from_stack(insn, at_out, insn->src_reg, at_stack_out, depth); WARNING: line length of 98 exceeds 80 columns #695: FILE: kernel/bpf/liveness.c:1375: + env->callsite_at_stack[instance->callchain.callsites[src->frame]]; WARNING: line length of 85 exceeds 80 columns #717: FILE: kernel/bpf/liveness.c:1397: + dst_is_local_fp = insn->dst_reg == BPF_REG_FP || dst->frame == depth; WARNING: line length of 85 exceeds 80 columns #724: FILE: kernel/bpf/liveness.c:1404: + clear_stack_for_all_offs(insn, at_out, insn->dst_reg, WARNING: line length of 90 exceeds 80 columns #736: FILE: kernel/bpf/liveness.c:1416: + bool dst_is_local_fp = insn->dst_reg == BPF_REG_FP || dst->frame == depth; WARNING: line length of 90 exceeds 80 columns #805: FILE: kernel/bpf/liveness.c:1485: + struct arg_track (*at_stack_in)[MAX_ARG_SPILL_SLOTS]) WARNING: line length of 106 exceeds 80 columns #819: FILE: kernel/bpf/liveness.c:1499: + env->prog->aux->func_info[subprog].type_id)->name_off) WARNING: line length of 93 exceeds 80 columns #917: FILE: kernel/bpf/liveness.c:1597: + at_stack_out = kvmalloc_objs(*at_stack_out, MAX_ARG_SPILL_SLOTS, GFP_KERNEL_ACCOUNT); WARNING: line length of 86 exceeds 80 columns #945: FILE: kernel/bpf/liveness.c:1625: + verbose(env, "subprog#%d: analyzing (depth %d)...\n", subprog, depth); WARNING: line length of 83 exceeds 80 columns #956: FILE: kernel/bpf/liveness.c:1636: + if (!arg_is_visited(&at_in[i][0]) && !arg_is_visited(&at_in[i][1])) WARNING: line length of 98 exceeds 80 columns #960: FILE: kernel/bpf/liveness.c:1640: + memcpy(at_stack_out, at_stack_in[i], MAX_ARG_SPILL_SLOTS * sizeof(*at_stack_out)); WARNING: line length of 94 exceeds 80 columns #963: FILE: kernel/bpf/liveness.c:1643: + arg_track_log(env, insn, idx, at_in[i], at_stack_in[i], at_out, at_stack_out); WARNING: line length of 84 exceeds 80 columns #978: FILE: kernel/bpf/liveness.c:1658: + &at_in[ti][r], at_out[r]); WARNING: line length of 83 exceeds 80 columns #981: FILE: kernel/bpf/liveness.c:1661: + changed |= arg_track_join(env, idx, target, -r - 1, WARNING: line length of 96 exceeds 80 columns #982: FILE: kernel/bpf/liveness.c:1662: + &at_stack_in[ti][r], at_stack_out[r]); WARNING: line length of 87 exceeds 80 columns #997: FILE: kernel/bpf/liveness.c:1677: + MAX_ARG_SPILL_SLOTS, GFP_KERNEL_ACCOUNT); WARNING: line length of 95 exceeds 80 columns #1001: FILE: kernel/bpf/liveness.c:1681: + at_stack_in[i], sizeof(struct arg_track) * MAX_ARG_SPILL_SLOTS); WARNING: line length of 100 exceeds 80 columns #1070: FILE: kernel/bpf/liveness.c:1750: + callee = find_callback_subprog(env, insn, idx, &caller_reg, &cb_callee_reg); WARNING: line length of 91 exceeds 80 columns #1073: FILE: kernel/bpf/liveness.c:1753: + * same bpf_loop() calls two different callbacks and passes WARNING: line length of 89 exceeds 80 columns #1076: FILE: kernel/bpf/liveness.c:1756: + if (info[subprog].at_in[j][caller_reg].frame == ARG_NONE) WARNING: line length of 88 exceeds 80 columns #1085: FILE: kernel/bpf/liveness.c:1765: + callee_args[cb_callee_reg] = info[subprog].at_in[j][caller_reg]; WARNING: line length of 81 exceeds 80 columns #1115: FILE: kernel/bpf/liveness.c:1795: + env->callsite_at_stack = kvzalloc_objs(*env->callsite_at_stack, insn_cnt, total: 3 errors, 52 warnings, 1 checks, 1115 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. Commit 8078c6e96d00 ("bpf: introduce forward arg-tracking dataflow analysis") has style problems, please review. NOTE: Ignored message types: ALLOC_SIZEOF_STRUCT BAD_REPORTED_BY_LINK CAMELCASE COMMIT_LOG_LONG_LINE FILE_PATH_CHANGES GIT_COMMIT_ID MACRO_ARG_REUSE NO_AUTHOR_SIGN_OFF NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS.