#15210·rocksdb

【BUG】在 block.cc 文件的 SeekForGetImpl 函数中,遗漏了对 data_ 是否为空的检查。该函数直接使用 data_ 进行哈希查找和后续解析,这对 RocksDB-v6.26.1 存在着空指针的潜在风险。

作者: wkxNiubi创建于 2026年9月14日更新于 2026年9月14日

问题描述

此问题是由于 DataBlockIter 的状态不一致导致的,导致可能出现空指针引用。当迭代器尚未初始化或已通过调用 Invalidate() 失效时,成员变量 data_ 可能为 nullptr。然而,SeekForGet() 仅检查 data_block_hash_index_ 是否为空,而不检查 data_。如果哈希索引指针仍然不为空或具有残值,则会进入 SeekForGetImpl()。该函数然后直接执行: data_block_hash_index_->Lookup(data_, map_offset, target_user_key); Lookup() 对 data_ 进行地址操作,并读取哈希桶。当 data_ 为 nullptr 时,这是未定义的行为,可能导致 RocksDB 进程崩溃。

内容来源: facebook/rocksdb