Kaynağa Gözat

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 yıl önce
ebeveyn
işleme
4b5ae8dbaa
1 değiştirilmiş dosya ile 8 ekleme ve 0 silme
  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;
         return ERR_INVALID_ADDRESS_STATE;
     }
     }
 
 
+    if (!Common::IsWordAligned(mutex_addr)) {
+        return ERR_INVALID_ADDRESS;
+    }
+
     auto& handle_table = Core::System::GetInstance().Kernel().HandleTable();
     auto& handle_table = Core::System::GetInstance().Kernel().HandleTable();
     return Mutex::TryAcquire(handle_table, mutex_addr, holding_thread_handle,
     return Mutex::TryAcquire(handle_table, mutex_addr, holding_thread_handle,
                              requesting_thread_handle);
                              requesting_thread_handle);
@@ -363,6 +367,10 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) {
         return ERR_INVALID_ADDRESS_STATE;
         return ERR_INVALID_ADDRESS_STATE;
     }
     }
 
 
+    if (!Common::IsWordAligned(mutex_addr)) {
+        return ERR_INVALID_ADDRESS;
+    }
+
     return Mutex::Release(mutex_addr);
     return Mutex::Release(mutex_addr);
 }
 }