mm/kasan: prevent recursive report overflow #18042
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR addresses a critical stack overflow issue in the KASAN (Kernel Address Sanitizer) error reporting mechanism when the report handler recursively triggers additional KASAN checks.
Problem
When
kasan_report()is executing and calls_alert()for error reporting, the logging function may trigger additional memory access operations that can fail KASAN checks. This causes recursive re-entry into the KASAN report handler, leading to stack overflow and suppressing the original error report.Solution
The fix implements a dual-approach strategy:
kasan_stop()before reporting: Halts all KASAN checks when entering the panic path, preventing recursive checks during error message printingdump_onlyflag efficiently: Consolidates the panic/non-panic decision logic into a single flag, ensuring consistent behavior without additional stack usageKey Changes
dump_onlyflag calculation at the beginning ofkasan_report()kasan_stop()only when panic reporting is needed (before_alert())Impact
Stability
Compatibility
Code Quality