Fix SEGV Issue during UpdatePkg, ErasePkg 18/321418/2
authorJihoi Kim <jihoi.kim@samsung.com>
Fri, 21 Mar 2025 02:02:49 +0000 (11:02 +0900)
committerJihoi Kim <jihoi.kim@samsung.com>
Fri, 21 Mar 2025 07:10:14 +0000 (16:10 +0900)
- While Erase/UpdatePkg, size of shm may changed,
  make earlier ptrs dangling.

Change-Id: I036c4b11f92f4d347c813e4f3aeeac53fe378f32
Signed-off-by: Jihoi Kim <jihoi.kim@samsung.com>
src/server/shared_memory/shm_writer.cc

index ea6fc7171362a71655978b9dd5e10acf6c7f643c..e93b4e5eaad896cead0d31ad1de108dbe89644b4 100644 (file)
@@ -213,7 +213,7 @@ std::pair<int, int> ShmWriter<T>::GetHandleInsertIndex(const char* key) const {
 
 template<typename T>
 bool ShmWriter<T>::RemoveIndex(size_t index, size_t key_size) {
-  auto* ptr = (ps::HandleMappingData*)index_mapper_.GetPtr();
+  auto* ptr = reinterpret_cast<ps::HandleMappingData*>(index_mapper_.GetPtr());
   size_t handle_size = GetHandleSize();
 
   free_space_.emplace(ptr[index].len, ptr[index].index);
@@ -228,6 +228,8 @@ bool ShmWriter<T>::RemoveIndex(size_t index, size_t key_size) {
       index_mapper_.GetSize() - sizeof(ps::HandleMappingData));
   config_handler_.SetIndexMemSize(index_mapper_.GetSize());
 
+  // Resize may change real ptr
+  ptr = reinterpret_cast<ps::HandleMappingData*>(index_mapper_.GetPtr());
   for (size_t i = index; i < GetHandleSize(); ++i)
     ptr[i].key_index -= key_size;
 
@@ -321,6 +323,7 @@ bool ShmWriter<T>::InsertKey(const char* key, int index) {
   }
   config_handler_.SetKeyMemSize(key_mapper_.GetSize());
 
+  // Resize may change real ptr
   ptr = reinterpret_cast<char*>(key_mapper_.GetPtr());
   if (moved_num > 0)
     memmove((void*)(ptr + index + key_size), (void*)(ptr + index), moved_num);