@@ -17,6 +17,7 @@ permissions:
1717
1818env :
1919 FORCE_COLOR : 1
20+ OPENSSL_VER : 3.5.7
2021
2122jobs :
2223 build-san-reusable :
@@ -38,28 +39,55 @@ jobs:
3839 run : |
3940 sudo ./.github/workflows/posix-deps-apt.sh
4041 # On ubuntu-26.04 image, clang is clang-21 by default
41-
42- if [ "${SANITIZER}" = "TSan" ]; then
43- # Reduce ASLR to avoid TSan crashing
44- sudo sysctl -w vm.mmap_rnd_bits=28
45- fi
46-
47- - name : Sanitizer option setup
48- run : |
49- if [ "${SANITIZER}" = "TSan" ]; then
50- echo "TSAN_OPTIONS=${SAN_LOG_OPTION} suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${{
51- fromJSON(inputs.free-threading)
52- && '_free_threading'
53- || ''
54- }}.txt handle_segv=0" >> "$GITHUB_ENV"
55- else
56- echo "UBSAN_OPTIONS=${SAN_LOG_OPTION} halt_on_error=1 suppressions=${GITHUB_WORKSPACE}/Tools/ubsan/suppressions.txt" >> "$GITHUB_ENV"
57- fi
5842 echo "CC=clang" >> "$GITHUB_ENV"
5943 echo "CXX=clang++" >> "$GITHUB_ENV"
44+ - name : TSan option setup
45+ if : inputs.sanitizer == 'TSan'
46+ run : |
47+ sudo sysctl -w vm.mmap_rnd_bits=28 # Reduce ASLR to avoid TSan crashing
48+
49+ echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV"
50+ echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> "$GITHUB_ENV"
51+ echo "TSAN_OPTIONS=${SAN_LOG_OPTION} suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${SUPPRESSIONS_SUFFIX}.txt handle_segv=0" >> "$GITHUB_ENV"
6052 env :
61- SANITIZER : ${{ inputs.sanitizer }}
6253 SAN_LOG_OPTION : log_path=${{ github.workspace }}/san_log
54+ SUPPRESSIONS_SUFFIX : >-
55+ ${{
56+ fromJSON(inputs.free-threading)
57+ && '_free_threading'
58+ || ''
59+ }}
60+ - name : UBSan option setup
61+ if : inputs.sanitizer != 'TSan'
62+ run : >-
63+ echo
64+ "UBSAN_OPTIONS=${SAN_LOG_OPTION}
65+ halt_on_error=1
66+ suppressions=${GITHUB_WORKSPACE}/Tools/ubsan/suppressions.txt"
67+ >> "$GITHUB_ENV"
68+ env :
69+ SAN_LOG_OPTION : log_path=${{ github.workspace }}/san_log
70+ - name : Add ccache to PATH
71+ run : |
72+ echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
73+ - name : ' Restore OpenSSL build (TSan)'
74+ id : cache-openssl
75+ if : inputs.sanitizer == 'TSan'
76+ uses : actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
77+ with :
78+ path : ./multissl/openssl/${{ env.OPENSSL_VER }}
79+ key : ${{ env.IMAGE_OS_VERSION }}-multissl-openssl-tsan-${{ env.OPENSSL_VER }}
80+ - name : Install OpenSSL (TSan)
81+ if : >-
82+ inputs.sanitizer == 'TSan'
83+ && steps.cache-openssl.outputs.cache-hit != 'true'
84+ run : >-
85+ python3 Tools/ssl/multissltests.py
86+ --steps=library
87+ --base-directory="${MULTISSL_DIR}"
88+ --openssl="${OPENSSL_VER}"
89+ --system=Linux
90+ --tsan
6391 - name : Configure CPython
6492 run : >-
6593 ./configure
7098 || '--with-undefined-behavior-sanitizer --with-strict-overflow'
7199 }}
72100 --with-pydebug
101+ ${{ inputs.sanitizer == 'TSan' && '--with-openssl="$OPENSSL_DIR" --with-openssl-rpath=auto' || '' }}
73102 ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }}
74103 - name : Build CPython
75104 run : make -j4
0 commit comments