| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -17,6 +17,7 @@ permissions: | |||
| 17 | 17 | ||
| 18 | 18 | env: | |
| 19 | 19 | FORCE_COLOR: 1 | |
| 20 | + OPENSSL_VER: 3.5.7 | ||
| 20 | 21 | ||
| 21 | 22 | jobs: | |
| 22 | 23 | build-san-reusable: | |
@@ -38,28 +39,55 @@ jobs: | |||
| 38 | 39 | run: | | |
| 39 | 40 | sudo ./.github/workflows/posix-deps-apt.sh | |
| 40 | 41 | # 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 | ||
| 58 | 42 | echo "CC=clang" >> "$GITHUB_ENV" | |
| 59 | 43 | 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" | ||
| 60 | 52 | env: | |
| 61 | - SANITIZER: ${{ inputs.sanitizer }} | ||
| 62 | 53 | 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 | ||
| 63 | 91 | - name: Configure CPython | |
| 64 | 92 | run: >- | |
| 65 | 93 | ./configure | |
@@ -70,6 +98,7 @@ jobs: | |||
| 70 | 98 | || '--with-undefined-behavior-sanitizer --with-strict-overflow' | |
| 71 | 99 | }} | |
| 72 | 100 | --with-pydebug | |
| 101 | + ${{ inputs.sanitizer == 'TSan' && '--with-openssl="$OPENSSL_DIR" --with-openssl-rpath=auto' || '' }} | ||
| 73 | 102 | ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} | |
| 74 | 103 | - name: Build CPython | |
| 75 | 104 | run: make -j4 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -163,6 +163,12 @@ | |||
| 163 | 163 | dest='keep_sources', | |
| 164 | 164 | help="Keep original sources for debugging." | |
| 165 | 165 | ) | |
| 166 | + parser.add_argument( | ||
| 167 | + '--tsan', | ||
| 168 | + action='store_true', | ||
| 169 | + dest='tsan', | ||
| 170 | + help="Build with thread sanitizer. (Disables fips in OpenSSL 3.x)." | ||
| 171 | + ) | ||
| 166 | 172 | ||
| 167 | 173 | ||
| 168 | 174 | class AbstractBuilder(object): | |
@@ -317,6 +323,8 @@ def _build_src(self, config_args=()): | |||
| 317 | 323 | """Now build openssl""" | |
| 318 | 324 | log.info("Running build in {}".format(self.build_dir)) | |
| 319 | 325 | cwd = self.build_dir | |
| 326 | + if self.args.tsan: | ||
| 327 | + config_args += ("-fsanitize=thread",) | ||
| 320 | 328 | cmd = [ | |
| 321 | 329 | "./config", *config_args, | |
| 322 | 330 | "shared", "--debug", | |
| Back | FazBrowse Home | New Git URL |
0 commit comments