Uh oh!
There was an error while loading. Please reload this page.
[Fix](Exception) Fix potential use-after-free because Exception::to_string is not thread safe - #59558
Conversation
Thearas
commented
Jan 5, 2026
Thank you for your contribution to Apache Doris. Please clearly describe your PR:
|
0d90f21 to
df5240fComparedf5240f to
394140eComparePR approved by at least one committer and no changes requested. |
bobhan1
commented
Jan 5, 2026
run buildall |
PR approved by anyone and no changes requested. |
doris-robot
commented
Jan 5, 2026
Cloud UT Coverage ReportIncrement line coverage Increment coverage report
|
doris-robot
commented
Jan 5, 2026
TPC-H: Total hot run time: 31449 ms |
doris-robot
commented
Jan 5, 2026
TPC-DS: Total hot run time: 173109 ms |
doris-robot
commented
Jan 5, 2026
ClickBench: Total hot run time: 26.93 s |
doris-robot
commented
Jan 5, 2026
BE UT Coverage ReportIncrement line coverage Increment coverage report
|
hello-stephen
commented
Jan 5, 2026
BE Regression && UT Coverage ReportIncrement line coverage Increment coverage report
|
bobhan1
commented
Jan 6, 2026
run cloud_p0 |
bobhan1
commented
Jan 6, 2026
run nonConcurrent |
hello-stephen
commented
Jan 6, 2026
BE Regression && UT Coverage ReportIncrement line coverage Increment coverage report
|
Uh oh!
There was an error while loading. Please reload this page.
…string` is not thread safe (#59558) ### What problem does this PR solve? Problem Summary: `Exception::to_string()` may by accessed concurrently in the following situation: - thread A and thread B access the same `DorisCallOnce` object - An Exception `e` is throw when thread A is calling `DorisCallOnce::call` and `e` is thrown to thread A - `e` will be also thrown to thread B later by DorisCallOnce - thread A and thread B access `Exception::to_string()` concurrently This may cause use-after-free due to the assignment of `_cache_string` in `Exception::to_string` Considering that `Exception` should not be frequently used, this PR construct `_cache_string` in constructor `Exception::Exception` rather than lazily creating it. This can avoid additional unnessary synchronazation. ### Release note None ### Check List (For Author) - Test <!-- At least one of them must be included. --> - [ ] Regression test - [ ] Unit Test - [ ] Manual test (add detailed scripts or steps below) - [ ] No need to test or manual test. Explain why: - [ ] This is a refactor/code format and no logic has been changed. - [ ] Previous test can cover this change. - [ ] No code files have been changed. - [ ] Other reason <!-- Add your reason? --> - Behavior changed: - [ ] No. - [ ] Yes. <!-- Explain the behavior change --> - Does this need documentation? - [ ] No. - [ ] Yes. <!-- Add document PR link here. eg: apache/doris-website#1214 --> ### Check List (For Reviewer who merge this PR) - [ ] Confirm the release note - [ ] Confirm test cases - [ ] Confirm document - [ ] Add branch pick label <!-- Add branch pick label that this PR should merge into -->
…string` is not thread safe (apache#59558) ### What problem does this PR solve? Problem Summary: `Exception::to_string()` may by accessed concurrently in the following situation: - thread A and thread B access the same `DorisCallOnce` object - An Exception `e` is throw when thread A is calling `DorisCallOnce::call` and `e` is thrown to thread A - `e` will be also thrown to thread B later by DorisCallOnce - thread A and thread B access `Exception::to_string()` concurrently This may cause use-after-free due to the assignment of `_cache_string` in `Exception::to_string` Considering that `Exception` should not be frequently used, this PR construct `_cache_string` in constructor `Exception::Exception` rather than lazily creating it. This can avoid additional unnessary synchronazation. ### Release note None ### Check List (For Author) - Test <!-- At least one of them must be included. --> - [ ] Regression test - [ ] Unit Test - [ ] Manual test (add detailed scripts or steps below) - [ ] No need to test or manual test. Explain why: - [ ] This is a refactor/code format and no logic has been changed. - [ ] Previous test can cover this change. - [ ] No code files have been changed. - [ ] Other reason <!-- Add your reason? --> - Behavior changed: - [ ] No. - [ ] Yes. <!-- Explain the behavior change --> - Does this need documentation? - [ ] No. - [ ] Yes. <!-- Add document PR link here. eg: apache/doris-website#1214 --> ### Check List (For Reviewer who merge this PR) - [ ] Confirm the release note - [ ] Confirm test cases - [ ] Confirm document - [ ] Add branch pick label <!-- Add branch pick label that this PR should merge into -->
…ception::to_string` is not thread safe apache#59558 (apache#59598) Cherry-picked from apache#59558 Co-authored-by: bobhan1 <baohan@selectdb.com>
What problem does this PR solve?
Problem Summary:
Exception::to_string()may by accessed concurrently in the following situation:DorisCallOnceobjecteis throw when thread A is callingDorisCallOnce::callandeis thrown to thread Aewill be also thrown to thread B later by DorisCallOnceException::to_string()concurrentlyThis may cause use-after-free due to the assignment of
_cache_stringinException::to_stringConsidering that
Exceptionshould not be frequently used, this PR construct_cache_stringin constructorException::Exceptionrather than lazily creating it. This can avoid additional unnessary synchronazation.Release note
None
Check List (For Author)
Test
Behavior changed:
Does this need documentation?
Check List (For Reviewer who merge this PR)