Skip to content

Commit 3b3db56

Browse files
Emanuele Altierifacebook-github-bot
authored andcommitted
fixes heap-use-after-free when cleaning up interaction
Summary: Fixes heap-use-after-free bug by changing the lambda that cleans up a tile aka interaction to capture the variables needed before scheduling the lambda. Differential Revision: D52223739 fbshipit-source-id: 770f4e83f29222fea8331adcdf5376596e228ff0
1 parent f7c8a33 commit 3b3db56

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

third-party/thrift/src/thrift/lib/cpp2/async/AsyncProcessor.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,9 @@ void GeneratedAsyncProcessorBase::processInteraction(ServerRequest&& req) {
163163
apache::thrift::detail::ServerRequestHelper::setInternalPriority(
164164
request, source);
165165

166-
apache::thrift::detail::ServerRequestHelper::resourcePool(request)->accept(
167-
std::move(request));
166+
auto&& resourcePool =
167+
apache::thrift::detail::ServerRequestHelper::resourcePool(request);
168+
resourcePool->accept(std::move(request));
168169
}
169170

170171
bool GeneratedAsyncProcessorBase::createInteraction(ServerRequest& req) {
@@ -805,7 +806,8 @@ bool HandlerCallbackBase::fulfillTilePromise(std::unique_ptr<Tile> ptr) {
805806
return false;
806807
}
807808

808-
auto fn = [ctx = reqCtx_,
809+
auto fn = [connCtx = reqCtx_->getConnectionContext(),
810+
interactionId = reqCtx_->getInteractionId(),
809811
interaction = std::move(interaction_),
810812
ptr = std::move(ptr),
811813
tm = getThreadManager_deprecated(),
@@ -819,8 +821,7 @@ bool HandlerCallbackBase::fulfillTilePromise(std::unique_ptr<Tile> ptr) {
819821
} else {
820822
static_cast<TilePromise&>(*interaction).fulfill(*tile, tm, *eb);
821823
}
822-
ctx->getConnectionContext()->tryReplaceTile(
823-
ctx->getInteractionId(), std::move(tile));
824+
connCtx->tryReplaceTile(interactionId, std::move(tile));
824825
};
825826

826827
eb_->runImmediatelyOrRunInEventBaseThread(std::move(fn));

0 commit comments

Comments
 (0)