Repository navigation
ci: add ASan/LSan and UBSan jobs - #354
Merged
Merged
Conversation
abhinavagarwal07
force-pushed
the
ci-sanitizers
branch
9 times, most recently
from
May 22, 2026 01:35
a99808e to
e6667c2
Compare
abhinavagarwal07
force-pushed
the
ci-sanitizers
branch
from
October 22, 2026 09:18
e6667c2 to
633e059
Compare
abhinavagarwal07
marked this pull request as ready for review
October 22, 2026 09:24
There was a problem hiding this comment.
🟡 Changes recommended
Sanitizer jobs can pass despite sanitizer reports or silently skipped filesystem integration tests.
2 open issues
What changed in this PR
Adds sanitizer CI coverage for sshfs and frees cached symlink targets when cache nodes are destroyed.
Changes:
- Adds required ASan and UBSan jobs plus an advisory ASan+LeakSanitizer job.
- Configures SSH/FUSE preflights, test timeouts, JUnit results, and sanitizer log artifacts.
- Frees
node->linkduring cache-node cleanup.
| File | Description |
|---|---|
cache.c |
Releases cached symlink storage when freeing a node. |
.github/workflows/sanitizers.yml |
Adds sanitizer builds, integration-test execution, and diagnostic artifacts. |
Review effort: Balanced
abhinavagarwal07
force-pushed
the
ci-sanitizers
branch
from
October 22, 2026 09:44
b8a3988 to
3b1ddb1
Compare
Build with clang and -Db_sanitize and run the test suite under ASan with LeakSanitizer and under UBSan. Reports are written to files and a final step prints them and fails the job if there are any, so tests that expect sshfs to fail can't hide one. The job also fails if any test was skipped. LSan uses the existing test/lsan_suppress.txt; it caught the free_node leak fixed in libfuse#390.
abhinavagarwal07
force-pushed
the
ci-sanitizers
branch
from
October 22, 2026 09:46
3b1ddb1 to
e8fa780
Compare
| - name: Test | ||
| env: | ||
| ASAN_OPTIONS: "${{ matrix.sanitizer == 'asan' && format('{0}:log_path={1}/sanitizer/asan', matrix.san_opts, runner.temp) || '' }}" | ||
| LSAN_OPTIONS: "${{ matrix.sanitizer == 'asan' && format('suppressions={0}/test/lsan_suppress.txt', github.workspace) || '' }}" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.


Add
sanitizers.ymlwith two jobs, both clang with-Db_sanitizeand-Db_lundef=false, running the full test suite:detect_leaks=1, using the existingtest/lsan_suppress.txt)halt_on_error=1)Reports are written to files and a final step prints them and fails the job if there are any, so tests that expect sshfs to fail can't hide a report. The job also fails if any test was skipped, so a missing FUSE prerequisite can't quietly drop the mount tests. Runs on PRs and on pushes to master.
The LSan job found a real leak of the cached symlink target in
cache.c, fixed in #390.