]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commit
Fix async prefetch heap use after free (#11049)
authoranand76 <anand76@devvm4702.ftw0.facebook.com>
Wed, 21 Dec 2022 17:15:53 +0000 (09:15 -0800)
committeranand76 <anand76@devvm4702.ftw0.facebook.com>
Wed, 21 Dec 2022 17:46:30 +0000 (09:46 -0800)
commit208310ad9907465e3a9f568633fa5fcf136f5f8c
treed9a2a8064132a3a133400d742bb33087ab7e8c68
parentafa92034d9482ef5853677773698c60dbaa961c5
Fix async prefetch heap use after free (#11049)

Summary:
This PR fixes a heap use after free bug in the async prefetch code that happens in the following scenario -
1. Scan thread starts 2 async reads for Seek, one for the seek block and one for prefetching
2. Before the first read in https://github.com/facebook/rocksdb/issues/1 completes, another thread reads and loads the block in cache
3. The first scan thread finds the block in cache, continues and the next block cache miss is for a block that spans the boundary of the 2 prefetch buffers, and the 1st read is complete but the 2nd one is not complete yet
4. The scan thread will reallocate (i.e free the old buffer and allocate a new one) the 2nd prefetch buffer, and the in-progress prefetch is orphaned
5. The orphaned prefetch finally completes, resulting in a use after free

Also add a few asserts to surface bugs earlier in the crash tests.

Pull Request resolved: https://github.com/facebook/rocksdb/pull/11049

Test Plan: Repro with db_stress and verify the fix

Reviewed By: akankshamahajan15

Differential Revision: D42181118

Pulled By: anand1976

fbshipit-source-id: 1ac55d2f64a89ce128c1c574262b8aa7d82eb8cc
HISTORY.md
file/file_prefetch_buffer.cc