Skip to content

Commit ccca039

Browse files
committed
Fix reuse thread stack with asan
1 parent 8f330c0 commit ccca039

6 files changed

Lines changed: 199 additions & 198 deletions

File tree

.github/actions/init-ut-make-config/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ inputs:
55
runs:
66
using: "composite"
77
steps:
8-
- run: sudo apt-get update && sudo apt-get install -y clang-12 lldb-12 lld-12 libgtest-dev cmake gdb libstdc++6-11-dbg && cd /usr/src/gtest && export CC=clang-12 && export CXX=clang++-12 && sudo cmake . && sudo make -j ${{env.proc_num}} && sudo mv lib/libgtest* /usr/lib/
8+
- run: sudo apt-get update && sudo apt-get install -y clang-12 lldb-12 lld-12 libgtest-dev cmake gdb libstdc++6-11-dbg && cd /usr/src/gtest && export CC=clang-12 && export CXX=clang++-12 && sudo cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 . && sudo make -j ${{env.proc_num}} && sudo mv lib/libgtest* /usr/lib/
99
shell: bash
1010
- run: sudo git clone https://github.com/libunwind/libunwind.git && cd libunwind && sudo git checkout tags/v1.8.1 && sudo mkdir -p /libunwind && sudo autoreconf -i && sudo CC=clang-12 CXX=clang++-12 ./configure --prefix=/libunwind && sudo make -j ${{env.proc_num}} && sudo make install
1111
shell: bash

.github/workflows/ci-linux.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
export CC=gcc && export CXX=g++
3737
mkdir build
3838
cd build
39-
cmake ..
39+
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ..
4040
- name: compile
4141
run: |
4242
cd build
@@ -76,7 +76,7 @@ jobs:
7676
export CC=gcc && export CXX=g++
7777
mkdir build
7878
cd build
79-
cmake -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON -DWITH_RDMA=ON -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON -DWITH_BTHREAD_TRACER=ON -DWITH_ASAN=ON ..
79+
cmake -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON -DWITH_RDMA=ON -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON -DWITH_BTHREAD_TRACER=ON -DWITH_ASAN=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ..
8080
- name: compile
8181
run: |
8282
cd build
@@ -110,7 +110,7 @@ jobs:
110110
export CC=clang && export CXX=clang++
111111
mkdir build
112112
cd build
113-
cmake ..
113+
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ..
114114
- name: compile
115115
run: |
116116
cd build
@@ -150,7 +150,7 @@ jobs:
150150
export CC=clang && export CXX=clang++
151151
mkdir build
152152
cd build
153-
cmake -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON -DWITH_RDMA=ON -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON -DWITH_BTHREAD_TRACER=ON -DWITH_ASAN=ON ..
153+
cmake -DWITH_MESALINK=OFF -DWITH_GLOG=ON -DWITH_THRIFT=ON -DWITH_RDMA=ON -DWITH_DEBUG_BTHREAD_SCHE_SAFETY=ON -DWITH_DEBUG_LOCK=ON -DWITH_BTHREAD_TRACER=ON -DWITH_ASAN=ON -DCMAKE_POLICY_VERSION_MINIMUM=3.5 ..
154154
- name: compile
155155
run: |
156156
cd build

src/bthread/stack_inl.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,8 @@ BUTIL_FORCE_INLINE void FinishSwitchFiber(void* fake_stack_save) {
7070

7171
class ScopedASanFiberSwitcher {
7272
public:
73-
ScopedASanFiberSwitcher(bool cur_ending, StackStorage& next_storage) {
74-
// If the current bthread will be quit here, pass NULL as `fake_stack_save',
75-
// so that ASan knows it can destroy the fake stack.
76-
StartSwitchFiber(cur_ending ? NULL : &_fake_stack, next_storage);
73+
ScopedASanFiberSwitcher(StackStorage& next_storage) {
74+
StartSwitchFiber(&_fake_stack, next_storage);
7775
}
7876

7977
~ScopedASanFiberSwitcher() {
@@ -92,16 +90,16 @@ class ScopedASanFiberSwitcher {
9290
#define BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage) \
9391
::bthread::internal::ASanUnpoisonMemoryRegion(storage)
9492

95-
#define BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage, ending) \
96-
::bthread::internal::ScopedASanFiberSwitcher switcher(storage, ending)
93+
#define BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage) \
94+
::bthread::internal::ScopedASanFiberSwitcher switcher(storage)
9795

9896
} // namespace internal
9997
#else
10098

10199
// If ASan are used, the annotations should be no-ops.
102100
#define BTHREAD_ASAN_POISON_MEMORY_REGION(storage) ((void)(storage))
103101
#define BTHREAD_ASAN_UNPOISON_MEMORY_REGION(storage) ((void)(storage))
104-
#define BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage, ending) ((void)(storage), (void)(ending))
102+
#define BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(storage) ((void)(storage))
105103

106104
#endif // BUTIL_USE_ASAN
107105

src/bthread/task_group.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -716,8 +716,7 @@ void TaskGroup::sched_to(TaskGroup** pg, TaskMeta* next_meta, bool cur_ending) {
716716
g->_control->_task_tracer.set_status(TASK_STATUS_JUMPING, next_meta);
717717
#endif // BRPC_BTHREAD_TRACER
718718
{
719-
BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(
720-
cur_ending, next_meta->stack->storage);
719+
BTHREAD_SCOPED_ASAN_FIBER_SWITCHER(next_meta->stack->storage);
721720
jump_stack(cur_meta->stack, next_meta->stack);
722721
}
723722
// probably went to another group, need to assign g again.

0 commit comments

Comments
 (0)