mirror of https://github.com/facebook/rocksdb.git
Fix use_after_free bug when underlying FS enables kFSBuffer (#11645)
Summary: Fix use_after_free bug in async_io MultiReads when underlying FS enabled kFSBuffer. kFSBuffer is when underlying FS pass their own buffer instead of using RocksDB scratch in FSReadRequest Since it's an experimental feature, added a hack for now to fix the bug. Planning to make public API change to remove const from the callback as it doesn't make sense to use const. Pull Request resolved: https://github.com/facebook/rocksdb/pull/11645 Test Plan: tested locally Reviewed By: ltamasi Differential Revision: D47819907 Pulled By: akankshamahajan15 fbshipit-source-id: 1faf5ef795bf27e2b3a60960374d91274931df8d
This commit is contained in:
parent
c24ef26ca7
commit
63a5125a52
|
@ -0,0 +1 @@
|
|||
Fix use_after_free bug in async_io MultiReads when underlying FS enabled kFSBuffer. kFSBuffer is when underlying FS pass their own buffer instead of using RocksDB scratch in FSReadRequest. Right now it's an experimental feature.
|
|
@ -26,6 +26,11 @@ bool AsyncFileReader::MultiReadAsyncImpl(ReadAwaiter* awaiter) {
|
|||
FSReadRequest* read_req = static_cast<FSReadRequest*>(cb_arg);
|
||||
read_req->status = req.status;
|
||||
read_req->result = req.result;
|
||||
if (req.fs_scratch != nullptr) {
|
||||
// TODO akanksha: Revisit to remove the const in the callback.
|
||||
FSReadRequest& req_tmp = const_cast<FSReadRequest&>(req);
|
||||
read_req->fs_scratch = std::move(req_tmp.fs_scratch);
|
||||
}
|
||||
},
|
||||
&awaiter->read_reqs_[i], &awaiter->io_handle_[i], &awaiter->del_fn_[i],
|
||||
/*aligned_buf=*/nullptr);
|
||||
|
|
Loading…
Reference in New Issue