mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 11:36:13 +00:00
Fix potential overflow in sys_vm
This commit is contained in:
parent
517a2bc34a
commit
ade291e73d
2 changed files with 10 additions and 10 deletions
|
@ -135,7 +135,7 @@ error_code sys_vm_return_memory(u32 addr, u32 size)
|
|||
|
||||
std::lock_guard lock(block->mutex);
|
||||
|
||||
if (block->psize < 0x100000 + size)
|
||||
if (u64{block->psize} < u64{0x100000} + size)
|
||||
{
|
||||
return CELL_EBUSY;
|
||||
}
|
||||
|
@ -156,7 +156,7 @@ error_code sys_vm_lock(u32 addr, u32 size)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
@ -175,7 +175,7 @@ error_code sys_vm_unlock(u32 addr, u32 size)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
@ -194,7 +194,7 @@ error_code sys_vm_touch(u32 addr, u32 size)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ error_code sys_vm_flush(u32 addr, u32 size)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
@ -232,7 +232,7 @@ error_code sys_vm_invalidate(u32 addr, u32 size)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ error_code sys_vm_store(u32 addr, u32 size)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
@ -271,7 +271,7 @@ error_code sys_vm_sync(u32 addr, u32 size)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
@ -285,7 +285,7 @@ error_code sys_vm_test(u32 addr, u32 size, vm::ptr<u64> result)
|
|||
|
||||
const auto block = idm::get<sys_vm_t>(sys_vm_t::find_id(addr));
|
||||
|
||||
if (!block || addr + size > block->addr + block->size)
|
||||
if (!block || u64{addr} + size > u64{block->addr} + block->size)
|
||||
{
|
||||
return CELL_EINVAL;
|
||||
}
|
||||
|
|
|
@ -717,7 +717,7 @@ namespace vm
|
|||
shm = std::make_shared<utils::shm>(size);
|
||||
|
||||
// Search for an appropriate place (unoptimized)
|
||||
for (u32 addr = ::align(this->addr, align); addr < this->addr + this->size - 1; addr += align)
|
||||
for (u32 addr = ::align(this->addr, align); u64{addr} + size < u64{this->addr} + this->size - 1; addr += align)
|
||||
{
|
||||
if (try_alloc(addr, pflags, size, std::move(shm)))
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue