Skip to content

SCST: Improve static analysis integration and clean up warnings - #429

Merged
lnocturno merged 24 commits into
masterfrom
3.11/gleb/analyzers
Oct 26, 2026
Merged

lnocturno merged 24 commits into
masterfrom
3.11/gleb/analyzers

Conversation

@lnocturno

Copy link
Copy Markdown
Contributor

No description provided.

Cppcheck configuration exploration reports syntaxError at
TRACE_MEM("HIGHMEM page allocated, no clustering") in the SCST_HIGHMEM
branch. The statement is missing its semicolon, and the guard refers
to an undeclared page.

Check the current SG element with PageHighMem(sg_page(&sg[cur])) and
terminate the trace statement. Preserve the optional branch and its
existing no-clustering behavior; normal builds do not define
SCST_HIGHMEM.
Cppcheck reports nullPointerRedundantCheck in scst_pr_send_ua_all():

  Either the condition 'reg!=exclude_reg' is redundant or there is
  possible null pointer dereference: reg.

The list is protected by dev_pr_mutex and contains valid registrants.
exclude_reg may deliberately be NULL to address every registrant.
State that case explicitly before comparing the current entry.
Preserve the existing behavior for a well-formed list and a non-NULL
exclusion, without treating NULL as a list entry or adding a suppression.
Cppcheck reports invalidPrintfArgType_sint in the DEBUG_TM_IGNORE
branch of usr/fileio/common.c:

  %d in format string (no. 2) requires 'int' but the argument type is
  'unsigned int'.

cmd_h is a uint32_t ABI field. Use %u, as in the other command-handle
traces, so handles above INT_MAX are not printed as negative values.
Cppcheck reports constParameterPointer for cmd in scst_set_io_context()
and scst_unmap_overlap(), dev in tm_dbg_task_mgmt() and
scst_cm_dev_free_designators(), tgt_dev in __scst_abort_task_set(),
mcmd in scst_do_nexus_loss_sess(), test in percpu_test_start(), and map
in sqa_free_cmd_map(). These helpers only read the supplied objects;
mutations and frees through their members affect separate objects.

Add const and propagate it through scst_cm_on_del_lun() and
scst_lun_cm_del(), including their private declarations and KUnit stubs.
The QLA cleanup helper forwards its allocation to kvfree(), which already
accepts a const pointer.

Resolve constParameterPointer in both iscsi_extracheck_is_*_thread()
helpers and tm_dbg_deinit_tgt_dev():
  Parameter 'conn' can be declared as pointer to const
  Parameter 'tgt_dev' can be declared as pointer to const
Qualify enabled implementations, disabled stubs and private declarations
together: they only inspect task/state or compare target-device identity.

Resolve constVariablePointer for attrs_list in iscsi_del_attr(),
pending_list in both pending-command cleanup loops, and head in
dev_user_unjam_dev():
  Variable 'attrs_list' can be declared as pointer to const
  Variable 'pending_list' can be declared as pointer to const
  Variable 'head' can be declared as pointer to const
These local views only supply traversal sentinels. List nodes and owning
objects remain mutable through their existing references and locks.

Cppcheck reports constParameterCallback for iscsi_tcp_send_data_rsp() and
isert_send_data_rsp():
  Parameter 'sense' can be declared as pointer to const
Both pass sense data to create_status_rsp(), which already accepts const.
Qualify the internal transport slot and both implementations together.
Keep exported SCST interfaces, kernel callback signatures and control ABI
unchanged.

Cppcheck also reports variableScope for tgt in
scst_process_redirect_cmd(). Use cmd->tgt directly at its only use,
before any callback can change cmd, instead of keeping an alias.
Checkpatch --strict reports LONG_LINE in deeply nested DIF action calls,
conditional help strings and diagnostics containing PRI macros, and
LONG_LINE_STRING in trace calls whose flags share the format line:

  CHECK:LONG_LINE: line length of 103 exceeds 100 columns
  CHECK:LONG_LINE_STRING: line length of 110 exceeds 100 columns

Select the DIF action in a single setter argument instead of duplicating
that setter in both branches. Preserve the mode test, PASS versus
PASS_CHECK selection and update of the existing action flags.

Wrap conditional alternatives, existing PRI concatenation boundaries
and trace arguments without splitting diagnostic strings or changing
argument order. Resolve 15 LONG_LINE and 23 LONG_LINE_STRING reports
without adding exceptions. Retain layouts whose further shortening
would require interface or deeper control-flow changes.

Also fix PARENTHESIS_ALIGNMENT in dev_user_ext_cdb_get() and its private
declaration, and remove an extra blank line.

Quote and shorten the three HIGHMEM preprocessor warnings. This fixes
Checkpatch CAMELCASE reports for <Consider> and <See> and the accompanying
LINE_CONTINUATIONS reports without suppressing those diagnostic types.
Preserve the existing conditions and the distinction between HIGHMEM
being supported by the core and unsupported by the other two modules.
Checkpatch reports MACRO_ARG_REUSE in the private MD5 and SHA1 Boolean
transforms and in MD5STEP, for example:

  CHECK:MACRO_ARG_REUSE: Macro argument reuse 'z' - possible side-effects?
  CHECK:MACRO_ARG_REUSE: Macro argument reuse 'w' - possible side-effects?
  CHECK:MACRO_ARG_REUSE: Macro argument reuse 's' - possible side-effects?

The current callers pass plain local state, so this is not a demonstrated
digest bug. Replace the transforms with typed u32 inline functions and
make each MD5 step return the updated word instead of mutating a macro
argument. Pass the Boolean result by value, without a function pointer.

Preserve all 64 MD5 round operands, constants, input indices and rotations,
including truncation to 32 bits before rotation. Preserve the SHA1 round
expressions and schedule. Resolve all seven native diagnostics without
exceptions; leave compatibility and control-flow macros alone.
Checkpatch reports eight instances of:

  ERROR:ASSIGN_IN_IF: do not use assignment in if condition

These occur in config_parse_main(), text_scan_login() and the get/set
attribute event handlers. Each conditional stores the successful lookup
index while falling back from target keys to session keys and user keys.

Assign the index before each condition. Finish a handled configuration or
login key with continue, and send successful attribute responses through
the common done path. Only attempt the next lookup after the previous
branch failed to match; do not eagerly evaluate every key table.

Preserve target/global eligibility checks, unknown-key handling, parsing
errors, response generation and buffer cleanup. This is a control-flow
cleanup, not a fix for a demonstrated parameter lookup bug. Resolve all
eight diagnostics without exceptions.
Checkpatch --strict reports CAMELCASE for the nine iSCSI parameter names
passed to ISCSI_SESS_*_PARAM_ATTR(), including:

  CHECK:CAMELCASE: Avoid CamelCase: <InitialR2T>
  CHECK:CAMELCASE: Avoid CamelCase: <MaxRecvDataSegmentLength>
  CHECK:CAMELCASE: Avoid CamelCase: <HeaderDigest>

These names form the existing sysfs interface and must retain their
protocol spelling. Pass them as string literals and initialize the
kobj_attribute directly instead of asking __ATTR() to stringify tokens.
Keep every attribute name, mode 0444, show function and NULL store callback
unchanged. Rename the macro parameter to param so it cannot substitute
the .name designator in the initializer. Generated private symbols and
session parameter accesses keep their existing spelling.

This resolves the style reports without changing public structure fields
or introducing aliases or diagnostic exceptions.
Cppcheck reports knownConditionTrueFalse at ten READ/WRITE CDB wrappers:
  Condition 'res!=0' is always false

The shared helpers only extract LBA and length fields and have no failure
path. Make the three helpers used solely for field extraction return void
and remove the callers' impossible error branches. Keep the int result of
get_cdb_info_lba_4_len_2 because it also implements the opcode-table callback.

Keep READ/WRITE(6)'s zero-length-to-256 conversion, DIF action selection,
corrupted-tag injection, and every return from the fallible protection
parsers unchanged. Resolve all ten diagnostics without exceptions.
Cppcheck reports unreadVariable in dev_user_flush_dcache():
  Variable 'start' is assigned a value that is never used.

Only ARCH_HAS_FLUSH_ANON_PAGE needs the advancing virtual address. Move
its increment into that branch, after the mapping lookup and anonymous
page flush. Keep the initial zero-address check, data-cache flush, page
iteration, and buffer-length accounting on every architecture.
@lnocturno
lnocturno force-pushed the 3.11/gleb/analyzers branch 5 times, most recently from 16fac2a to f63a47f Compare October 23, 2026 15:55
The shared path policy skips Clang, kernel regression, KUnit and Ginkgo
when a pull request changes only inputs classified as unrelated to a
check. Run these checks for every pull request to master so coverage no
longer depends on maintaining that classification.

Remove the selector, its TOML policy and dedicated tests, together with
the workflow conditions and full-history checkouts used for selection.
Keep VM supervisor checks and the kernel matrix dependency, and update
the CI guide to describe unconditional PR coverage.

Preserve the event-specific Ginkgo label sets and the 30-minute PR job
limit. Push and manual triggers retain their existing behavior.
A source diff cannot establish that a module's unchanged consumers and
headers remain clean. Make the analyzer targets always check their
full configured scope. Retain explicit-file selection for focused
investigation.

Remove DIFFBR, --base and the shared Git diff/pathspec helpers. Keep
policy validation, symlink checks and missing-input failures. Update
CLI and selector fixtures and document the supported interface.

Capture Git stderr and preserve it in source-selection errors, so SCS
negative fixtures can assert the failure without leaking an expected
"fatal: not a git repository" into a successful CI test log.

The SCS layout rule and explicit-file interface remain unchanged.
Kbuild can discard a checker's exit status, and an interrupted checker
can lose buffered output. Publish a started record before execution,
stream native output to a retained log, then atomically publish the
completed record. Require every announced CHECK to have a completed
result before reporting clean analysis.

Resolve relative CHECK paths against active make directories before
falling back to suffixes. This avoids confusing duplicate basenames
such as config.c while keeping ambiguous or missing invocations fatal.
Allow capture clients to clear checker-only CHECKFLAGS explicitly.

Give the shared process-group runner bounded deadlines and preserve
partial output on timeout or interruption. Add a result renderer that
separates active diagnostics, notes, reviewed exceptions, coverage and
build messages. A pahole version notice is evidence, not a checker
failure. Native records remain authoritative for exit status.

Cover interrupted adapters, duplicate and missing CHECK invocations,
process-group termination, output retention and report classification
with isolated fixtures. Sparse and Smatch exception policy is unchanged.

Serialize report replacement with a per-tool lock, separate from the
Kbuild lock. Validate inherited lock descriptors and preserve Make
jobserver descriptors. Keep the lock until rendering and publication
finish, so another invocation cannot replace the evidence underneath it.
Allow outer callers to extend cancellation grace while native process
groups retain their two-second deadline.

Render native exit statuses, checker activity, source findings, coverage
limitations and build diagnostics separately. Group repeated inventories
without changing the retained logs. Label progress as total elapsed time;
per-rule durations remain distinct. Cover locks, inherited descriptors,
termination escalation and report rendering with isolated fixtures.
Provide make compile-commands as a shared compilation database for
tools and editors. Read actual Kbuild compiler commands from .cmd files
and check them against fresh capture records, rather than passing
Sparse-specific CHECKFLAGS to a C compiler.

Record userspace recipes through the same compile_c expansion used for
normal objects, without rebuilding executables. Keep the collector
out of ordinary CLI prerequisites so builds need no Python tooling.

Retain original commands and build evidence, require complete capture,
and publish the database atomically under the shared build lock. The
export includes configured sources outside analyzer policy; consumers
apply their own scope. Add isolated collector and Make recipe fixtures.

Target analysis at the current CI kernel instead of supporting legacy
Kbuild layouts. Reject CHECK records whose cwd is the kernel build tree
before reading its unrelated modules.order. Keep module-build support
independent of this analyzer requirement and cover the rejection with
an isolated inventory fixture.
The analyzer workflow checks source style independently of kernel
compatibility builds. Stop running each downloaded kernel's Checkpatch
on the generated SCST patch, and remove its separate diagnostic summary
and filters. Patch generation, application and compilation stay intact.

Remove the obsolete -nc option from the regression runner, kernel matrix
parser, regression workflow and nightly entries. Preserve every kernel
version and all remaining build options. Update the regression workflow
documentation and kernel-update instructions in the same patch.
Whole-file Checkpatch needs reviewed exceptions without hiding native
failures. Validate per-file completion, totals, stderr and exit status
before applying source comments. An unreadable second file must fail
even if all findings from the first file are exempt.

Support exact rule IDs, bounded regions, macros, named identifiers and
single-rule file scopes with reasons. Allow standalone comments to wrap
without expanding their scope. Bind PREFER_FALLTHROUGH and TYPO_SPELLING
to comments; retain neighboring locations and other diagnostic types.
Limit COMPLEX_MACRO ranges to single-line object-like sense tuples with
known keys and byte-valued ASC/ASCQ. Reject expressions, function-like
macros, directives, unrelated code and literals instead of broadening the
exception. Keep ordinary macro exceptions attached to one definition.
Add completion, location-binding and malformed-declaration fixtures,
including block boundaries and attempted sense-structure bypasses.

Recognize CONSTANT_COMPARISON only in complete #if/#elif predicates
comparing the configured version macros and literal constructors. Parse
Boolean groups, defined guards, vendor - 0 and paired >> 8 forms. Splice
physical lines before recognizing comments and literals. Mixed or unknown
expressions and ordinary C comparisons remain checked.

Recognize LONG_LINE_STRING only for the exact configured logging names
and paths when a literal format argument ends the line. Keep checks on
other arguments, unrelated calls and ordinary strings. Validate native
source quotations before either exception and retain all raw findings.
Add structural, continuation, false-match and malformed-policy fixtures.

Remove the legacy Checkpatch wrappers and their separate PR workflow.
Make checkpatch and the analyzer workflow provide the source checks;
Conform and review own commit-message conventions.

Accept native totals without the checks field when strict mode is
disabled; Checkpatch omits that field rather than emitting zero.
Preserve severity accounting and per-file completion checks. Add native
clean, WARNING and CHECK probes in both modes, including the strict-only
AVOID_BUG severity in --file mode. Require an unreadable second input to
remain incomplete in every case.

Keep the global exclusions in the same policy change: AVOID_BUG for
established invariant assertions, LINUX_VERSION_CODE for supported
upstream/vendor compatibility, and commit-submission metadata checks
which do not apply to source analysis. Do not disable other source rules.
Use the shared report lock around analysis and evidence publication.
Use the structurally validated policy for version predicates and complete
logging literals. Keep ordinary C comparisons and other long strings
checked instead of disabling CONSTANT_COMPARISON or LONG_LINE_STRING.
Attach the remaining exceptions to their source constructs:

- CONST_STRUCT for registration objects required by older kernels, and
  CONSTANT_COMPARISON for one SRP enum constant-expression maximum.
- COMPLEX_MACRO, MACRO_ARG_REUSE, MACRO_ARG_PRECEDENCE and related rules
  for reviewed tuples, declarations and token builders.
- IF_0, IF_1 and MSLEEP for retained debug paths and existing timing.
- PREFER_KERNEL_TYPES and SPDX_LICENSE_TAG for portable ABI types and
  existing license headers, with one diagnostic per file exemption.
- LONG_LINE for symbolic sense arguments, long API and DIF action names.
- STRLCPY, portable fallthrough and established interface spellings at
  their specific call sites. Declare each shared CamelCase symbol once.

Group 51 sense definitions into two bounded COMPLEX_MACRO ranges and
23 protocol bit constants into five BIT_MACRO ranges. Keep one shared
reason per group. Sense blocks are structurally validated; the remaining
macro and line exceptions stay individually scoped.

The full native scan reports 421 CONSTANT_COMPARISON, 259 LONG_LINE_STRING
and 42 LONG_LINE findings. All remain in raw reports with their reviewed
reasons; execution failures and incomplete reports cannot be exempted.
Source changes in this patch are comments only; assertions, debug paths
and compatibility behavior are unchanged.
Extend installed parser hints with current SCST declaration and iterator
bodies. Read complete definitions directly from source instead of pinning
their hashes. Reject missing or ambiguous definitions. Do not generate
synthetic macro contexts or claim exhaustive macro/_Generic coverage.

Recognize native parse errors only when the excerpt matches a complete
current standalone macro definition in source scope. Preserve them as
explicit coverage limitations with the original excerpt and policy
reason. Call-site errors, partial definitions, lost surrounding bodies,
missing handling records and unfinished rules remain blocking.

Ignore alignment annotations and supply for_each_possible_cpu parser
hints without removing project bodies. Adapt stream_open.cocci using
exact structural anchors, and the known add_namespace.cocci version
using its content hash, in private report-mode copies. Validate effective
spatch options and retain native handling/completion records.

Support source-bound rule exceptions with adjacent reasons. List rules
without report mode as skipped and the exact reviewed do_div Python
SyntaxWarning as visible advice. Source exceptions cannot waive parser,
coverage or execution failures. Add source-reader, model, frontend,
rule-adaptation and coverage fixtures alongside the integration.

Record each rule duration and publish the current rule in a run-bound
progress record for the shared frontend. Keep progress separate from
native diagnostics and handling/completion evidence.

Add native positive and negative semantic-match probes for current sysfs
and KUnit declaration models, visibility annotations and CPU iteration.
Require TRACE_EXIT to remain distinct from return. Exercise the actual
kernel stream_open and namespace adaptations, checking completion and
unchanged inputs rather than accepting missing findings alone.

Cover several initializer fields, nested commas, empty tails and GNU
named variadics with native probes. Fedora's Coccinelle 1.3.1 loses the
scst_kunit_suite initializer fields and fails the probe with:
  AssertionError: 0 != 1
Temporarily skip the four variadic probes with an explicit reason
while awaiting an upstream fix. Keep their assertions for re-enabling
and retain the other native model probes. Do not alter SCST sources or
patch the distribution analyzer.
The native report rules flag atomic_as_refcounter for completion
counters, double_lock/mini_lock for caller-owned lock phases, and
use_after_iter for guarded break results and RCU iterator output
parameters. Document these contracts beside the affected statements
instead of filtering matching text from arbitrary diagnostics.

Retain ptr_err_to_pe, string_choices, ifnullfree and minmax exceptions
where replacements require newer kernel helpers or lose a constant
array bound. Carry forward reviewed SCST contracts with exact rule IDs
and bounded locations. There are no file-wide Coccinelle exceptions and no parser or execution-error suppressions.
@lnocturno
lnocturno force-pushed the 3.11/gleb/analyzers branch from f63a47f to b007740 Compare October 23, 2026 19:20
Use the shared compilation database for separate kernel and userspace
profiles. Preserve original commands, compiler ABI/features and build
configuration; do not invent unrelated --force configurations. Give
parallel scans fresh per-profile build directories so whole-program
checks remain enabled and stale state cannot affect later runs.

Keep project bodies and headers, replacing kernel header bodies with
reviewed SCST syntax and ownership contracts. Preserve volatile
READ_ONCE/WRITE_ONCE accesses, vendor version predicates,
CPU-mask iteration and native byte order. Userspace probes retain the
real Linux UAPI and libc endian macros. Keep explicit in-tree settings
and prevent unrelated kernel branches in CLI commands.

Validate native inline suppression IDs against cppcheck --errorlist.
Expose exact unmatchedSuppression notices and reviewed omitted system
headers as advice only after frontend and checker coverage validation.
Keep QLogic dependency-header findings outside owned diagnostic scope;
errors also referencing the SCST target and all frontend failures block.

Allow consecutive native exception annotations for one construct to
share a preceding rationale comment. Stop at code, preprocessor
boundaries, file scopes, block ends and another annotation's inline
reason. Preserve each diagnostic ID, symbol and source range. Document
the common-rationale syntax and cover grouped signatures, separate
contracts and inheritance boundaries with isolated parser fixtures.

Retain probe commands, partial output, raw XML, original/adapted
commands and complete header inventories. Unknown includes, unknown
IDs and incomplete analysis remain failures. Add isolated compiler,
byte-order, header, native-exception and parallel-profile fixtures.

Explain the native "Active checkers: 120/189" inventory for Cppcheck
2.22.0. Of its 69 No entries, 67 require C++, one requires Windows,
and unusedFunction uses a build-directory whole-program path which
omits logChecker. Keep these explanations bound to the audited version;
unknown reasons remain explicit. Preserve native activity flags and
requirements without relaxing failure checks or suppressing diagnostics.

Add native model probes using the same kernel.h, kernel.cfg and compiler
context as analysis. Valid allocation/free, member access, iterator and
trace examples must pass; deliberate bugs must retain leakReturnValNotUsed,
memleak, deallocret and arrayIndexOutOfBounds. Keep these analyzer fixtures
separate from tests of SCST kernel behavior.

Keep the trace fixture's only invalid array access inside TP_fast_assign;
TP_printk must not produce the expected arrayIndexOutOfBounds instead.
Require its location to reference the tested macro invocation. On fixture
failure, emit compiler probe commands and complete logs before deleting
the temporary directory, so CI retains the cause of preparation failures.
Add isolated fixtures for diagnostic locations and failed compiler probes.
Use native source declarations and local reasons for retained contracts:

- constParameterCallback/constParameterPointer for mutable callback or
  exported interfaces, disabled stubs and list-destruction contracts.
  Debug paths can set cmd->atomic, lock the connection and release commands
  from the device hash. The TCP receive callback mutates its command;
  QLogic target callbacks retain the upstream mutable session signature.
- constVariablePointer for the optional per-device command counter and
  older RDMA interfaces requiring a mutable device.
- knownConditionTrueFalse and unsignedLessThanZero for compile-time
  assertions, configuration-dependent predicates and execution invariants;
  redundantContinue for the shared loop-tail label.
- memleak for release_work and w, whose ownership transfers to workers.
  Keep the release_work exception on the queued-work path only; failed
  allocation leaves no object to transfer or leak.
- selfAssignment for endian conversions that swap on big-endian hosts.
- unassignedVariable for the GNU local label in ___scst_wait_event.
- unusedFunction for public inline APIs, helpers called by the separately
  analyzed daemon or excluded QLogic sources, and the retained disabled
  scst_zero_write_rest() debug caller.
- unreachableCode for deliberate HIGHMEM initialization guards.
- duplicateBreak for the explicit copy-manager debug-loop exit after
  sBUG(). Keep the break so the loop remains safe if the fatal assertion
  is removed or the diagnostic code is reused.

Bind ownership exceptions to the affected variable and signature-only
blocks to the parameter declaration. Keep 251 declarations with no
file-wide exceptions or frontend/coverage suppressions. Unmatched
declarations remain visible as validated advice, not suppression hits.

Use one shared rationale for adjacent annotations of the same callback
signature. Avoid repeating identical explanations for different warning
IDs or parameters; retain all 251 declarations and their exact scopes.

Document the declaration syntax and policy/model ownership. These source
changes are comments only; callback ABI and runtime behavior are unchanged.
Route the analyzer targets, including SCS and all-lint, through one
frontend with Start, Run, Result and Reports sections. Preserve complete
driver output beside the native JSON and readable summary. Show grouped
findings, coverage, inventories and PASS/FAIL/SKIP; fold details in
GitHub Actions and expose command tracing with V=1.

Identify each invocation and reject stale, malformed or inconsistent
reports. Hold the shared report lock through driver execution and
rendering, passing its validated descriptor to the child while preserving
Make's jobserver. Give the driver ten seconds to stop its native process
group and publish partial evidence before escalation.

Include SCS diagnostics, parser runtime and run identity in its report.
Keep the native classification authoritative and preserve nonzero Make
status when a tool or analysis fails. Add isolated frontend fixtures for
invalid results, interruptions, report ownership and rendering failures.
Add make analyzer-tests for tracked script fixtures and native
Checkpatch, Coccinelle and Cppcheck model probes. Run each suite in an
isolated process with one interpreter, bounded execution and retained
logs and JSON results. Missing tools, empty suites, unexpected skips,
expected failures and interrupted children fail the target. These probes
do not build or execute SCST.

Keep make lint-test for lightweight wrapper fixtures and the separate
SCS parser tests. The native probes exercise the production models:
valid C examples must pass and deliberate bugs must retain the expected
analyzer diagnostic rather than disappearing during model expansion.

Allow only the four named Coccinelle variadic probes deferred for the
upstream argument-expansion defect. Check their exact suite, test and
reason in both child and parent, retain visible SKIP records, and reject
duplicate or missing details and suites without an executed test. All
other skips and failures remain blocking.

Add isolated runner fixtures for result consistency, environment
isolation, cancellation, and failures beside an approved skip.
Run the parallel analyzer matrix, native tooling/model probes and SCST
style checks on PRs to master, pushes to master and manual dispatch.
Cancel obsolete runs of the same PR without cancelling post-merge runs.
Keep PR and manual jobs strict. Push jobs allow workflow-level failure
while preserving failed steps and the native strict exit status.

Use the common Make frontend and require complete reports, matching
invocation identities and KUnit coverage before publishing findings or
summaries. Hold the inherited report lock through final CI validation.
Allow twenty seconds for Make and its children to stop and retain partial
reports before escalation. A later Make failure must not publish a clean
native result. Include SCS evidence in summaries and retained artifacts.

Run make analyzer-tests in the analyzer container alongside analysis.
Keep Fedora's packaged Coccinelle without a local patch or version pin;
the runner reports the four explicitly deferred upstream variadic probes.
Distribution tools follow Fedora updates, while kernel inputs and
Sparse/Smatch revisions remain pinned and recorded in tool provenance.

Split Smatch's data and manual-page install pattern rules to address:
  warning: pattern recipe did not update peer target
Each recipe installs one target, so the targets must be independent.
Record this install patch alongside the frontend fix in provenance.
Add isolated CI fixtures for status, coverage and publication consistency.
@lnocturno
lnocturno force-pushed the 3.11/gleb/analyzers branch from b007740 to f2d950a Compare October 26, 2026 08:45
@lnocturno
lnocturno merged commit 6f95ff0 into master Oct 26, 2026
64 checks passed
@lnocturno
lnocturno deleted the 3.11/gleb/analyzers branch October 26, 2026 11:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant