spec-and-tsan #1
@@ -18,6 +18,15 @@ jobs:
|
|||||||
runs-on: linux/amd64
|
runs-on: linux/amd64
|
||||||
container:
|
container:
|
||||||
image: gitea.tourolle.paris/dtourolle/kpnpp-builder:latest
|
image: gitea.tourolle.paris/dtourolle/kpnpp-builder:latest
|
||||||
|
# This runner is Docker nested in an unprivileged LXC container, whose
|
||||||
|
# kernel randomizes mmap addresses beyond the range TSan's fixed shadow
|
||||||
|
# mapping expects, so TSan aborts at init with "unexpected memory
|
||||||
|
# mapping". The fix is to disable ASLR per-process with `setarch -R`
|
||||||
|
# (below), which needs the personality(2) syscall that Docker's default
|
||||||
|
# seccomp profile blocks. seccomp=unconfined permits it. Verified on the
|
||||||
|
# runner: setarch -R alone gets EPERM, seccomp alone still aborts, both
|
||||||
|
# together run clean. Scoped to this job, which runs only our own tests.
|
||||||
|
options: --security-opt seccomp=unconfined
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -54,13 +63,14 @@ jobs:
|
|||||||
# the full picture for lock-order issues.
|
# the full picture for lock-order issues.
|
||||||
env:
|
env:
|
||||||
TSAN_OPTIONS: "halt_on_error=1 second_deadlock_stack=1"
|
TSAN_OPTIONS: "halt_on_error=1 second_deadlock_stack=1"
|
||||||
run: ./build/tests/kpn_tests_stress
|
# setarch -R disables ASLR for this process; see the container comment.
|
||||||
|
run: setarch -R ./build/tests/kpn_tests_stress
|
||||||
|
|
||||||
- name: Run unit tests under TSan
|
- name: Run unit tests under TSan
|
||||||
working-directory: tsan-${{ github.run_id }}
|
working-directory: tsan-${{ github.run_id }}
|
||||||
env:
|
env:
|
||||||
TSAN_OPTIONS: "halt_on_error=1 second_deadlock_stack=1"
|
TSAN_OPTIONS: "halt_on_error=1 second_deadlock_stack=1"
|
||||||
run: ./build/tests/kpn_tests
|
run: setarch -R ./build/tests/kpn_tests
|
||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
if: always()
|
if: always()
|
||||||
|
|||||||
Reference in New Issue
Block a user