Skip to content

Commit 6cb0d5c

Browse files
authored
Merge pull request ceph#67568 from tchaikov/wip-rgw-fix-co_waiter-stack-use-after-scope
common/async: fix stack-use-after-scope in co_waiter Reviewed-by: Casey Bodley <cbodley@redhat.com>
2 parents c47f5b4 + b760a94 commit 6cb0d5c

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

src/common/async/co_waiter.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ class co_waiter {
4646
public:
4747
co_waiter() = default;
4848

49+
~co_waiter() {
50+
// Clear the cancellation slot to prevent use-after-scope
51+
if (handler) {
52+
auto slot = boost::asio::get_associated_cancellation_slot(*handler);
53+
if (slot.is_connected()) {
54+
slot.clear();
55+
}
56+
}
57+
}
58+
4959
// copy and move are disabled because the cancellation handler captures 'this'
5060
co_waiter(const co_waiter&) = delete;
5161
co_waiter& operator=(const co_waiter&) = delete;
@@ -116,6 +126,16 @@ class co_waiter<void, Executor> {
116126
public:
117127
co_waiter() = default;
118128

129+
~co_waiter() {
130+
// Clear the cancellation slot to prevent use-after-scope
131+
if (handler) {
132+
auto slot = boost::asio::get_associated_cancellation_slot(*handler);
133+
if (slot.is_connected()) {
134+
slot.clear();
135+
}
136+
}
137+
}
138+
119139
// copy and move are disabled because the cancellation handler captures 'this'
120140
co_waiter(const co_waiter&) = delete;
121141
co_waiter& operator=(const co_waiter&) = delete;

0 commit comments

Comments
 (0)