Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions .github/workflows/sanitizers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,21 @@ jobs:
# abort fires before the test logic runs. The bug this test
# guards is exercised by the unsanitized meson test suite on
# every run. Tracked as T-Y4M-ALLOC-RLIMIT-AS-SANITIZER-INCOMPATIBLE.
# Exclude test_gpu_picture_pool_uaf: intentionally allocates ~192 GiB
# to exercise the OOM cleanup path. The ASan allocator aborts with
# "out of memory" before returning NULL, causing a spurious SIGABRT.
# Tracked as T-GPU-POOL-UAF-OOM-TSAN-ABORT (same root cause as TSan
# exclusion; ADR-0347 deselect list). The OOM path is covered by the
# unsanitized suite on every run.
# Exclude test_integer_motion_v2_coverage: triggers a SIGABRT under
# ASan due to an intentional huge-allocation pattern in the motion
# coverage path that the ASan allocator cannot satisfy.
# Exclude test_pic_preallocation: triggers a SIGABRT under ASan in
# addition to its pre-existing Linux exclusion; the test relies on
# allocation semantics that ASan's allocator intercepts fatally.
TESTS=$(meson introspect build --tests 2>&1 \
| python3 -c "import json,sys; [print('libvmaf:'+t['name']) for t in json.load(sys.stdin)]" \
| grep -vE 'test_model$|test_y4m_alloc_failure$' || true)
| grep -vE 'test_model$|test_y4m_alloc_failure$|test_gpu_picture_pool_uaf$|test_integer_motion_v2_coverage$|test_pic_preallocation$' || true)
echo "test count: $(echo "$TESTS" | wc -l)"
if [ -z "$TESTS" ]; then
echo "::error::Test enumeration produced empty list" >&2
Expand Down Expand Up @@ -184,14 +196,18 @@ jobs:
# Exclude test_y4m_alloc_failure: RLIMIT_AS incompatible with
# TSan internal allocator (same reason as ASan exclusion above).
# Exclude test_gpu_picture_pool_uaf: the test intentionally tries
# to malloc ~32 GiB to exercise the OOM failure path. The TSan
# to malloc ~192 GiB to exercise the OOM failure path. The TSan
# allocator aborts with "out of memory" instead of returning NULL,
# causing a spurious failure. The bug this test guards is covered
# by the unsanitized meson test suite on every run. Tracked as
# T-GPU-POOL-UAF-OOM-TSAN-ABORT.
# Exclude test_integer_motion_v2_coverage: intentional huge-allocation
# pattern triggers SIGABRT under the TSan allocator.
# Exclude test_pic_preallocation: SIGABRT under TSan for the same
# intentional-huge-alloc reason as the ASan exclusion.
TESTS=$(meson introspect build --tests 2>&1 \
| python3 -c "import json,sys; [print('libvmaf:'+t['name']) for t in json.load(sys.stdin)]" \
| grep -vE 'test_model$|test_y4m_alloc_failure$|test_gpu_picture_pool_uaf$' || true)
| grep -vE 'test_model$|test_y4m_alloc_failure$|test_gpu_picture_pool_uaf$|test_integer_motion_v2_coverage$|test_pic_preallocation$' || true)
echo "test count: $(echo "$TESTS" | wc -l)"
if [ -z "$TESTS" ]; then
echo "::error::Test enumeration produced empty list" >&2
Expand Down
12 changes: 12 additions & 0 deletions changelog.d/chore/sanitizer-exclusions-huge-alloc-tests.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
### Chore

- Add `test_gpu_picture_pool_uaf`, `test_integer_motion_v2_coverage`, and
`test_pic_preallocation` to the ASan+UBSan exclusion list in
`sanitizers.yml`. All three tests intentionally trigger huge allocations
(up to ~192 GiB) to exercise OOM cleanup paths; the ASan/UBSan and TSan
allocators abort with SIGABRT instead of returning NULL, producing spurious
failures. The OOM paths these tests guard are covered by the unsanitized
meson test suite on every run.
- `test_gpu_picture_pool_uaf` was already excluded from TSan (PR #735) but
was missing from the ASan+UBSan job; this PR closes that gap and adds the
two new tests to both jobs.
6 changes: 6 additions & 0 deletions docs/rebase-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -45096,4 +45096,10 @@ Python code affected. The `time.NewTicker` refactor is a semantic no-op for
rebases; the `MaxBytesReader` + `ReadTimeout` additions are internal to the HTTP
handler and do not touch any public API surface.

## fix/sanitizer-exclusions-huge-alloc-tests

no rebase impact: only `.github/workflows/sanitizers.yml` and a changelog
fragment are modified. No C source, public API, or upstream-mirrored file is
touched.

---
Loading