Просмотр исходного кода

svc: Check for word alignment of addresses within svcArbitrateLock/svcArbitrateUnlock

The kernel itself checks whether or not the provided addresses are word
aligned before continuing, so we should be doing the same.
Lioncash 7 лет назад
Родитель
Сommit
4b5ae8dbaa
1 измененных файлов с 8 добавлено и 0 удалено
  1. 8 0
      src/core/hle/kernel/svc.cpp

+ 8 - 0
src/core/hle/kernel/svc.cpp

@@ -350,6 +350,10 @@ static ResultCode ArbitrateLock(Handle holding_thread_handle, VAddr mutex_addr,
         return ERR_INVALID_ADDRESS_STATE;
     }
 
+    if (!Common::IsWordAligned(mutex_addr)) {
+        return ERR_INVALID_ADDRESS;
+    }
+
     auto& handle_table = Core::System::GetInstance().Kernel().HandleTable();
     return Mutex::TryAcquire(handle_table, mutex_addr, holding_thread_handle,
                              requesting_thread_handle);
@@ -363,6 +367,10 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) {
         return ERR_INVALID_ADDRESS_STATE;
     }
 
+    if (!Common::IsWordAligned(mutex_addr)) {
+        return ERR_INVALID_ADDRESS;
+    }
+
     return Mutex::Release(mutex_addr);
 }