mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 15:48:12 +00:00
UserspaceEmulator: Honor the read/write/execute bits in mmap regions
UE will now correctly crash when accessing an mmap memory region in some way it's not supposed to be accessed.
This commit is contained in:
parent
ef9ac8a8a2
commit
d4509647d8
5 changed files with 72 additions and 5 deletions
|
@ -75,6 +75,12 @@ ValueWithShadow<u8> SoftMMU::read8(X86::LogicalAddress address)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_readable()) {
|
||||
reportln("SoftMMU::read8: Non-readable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
|
||||
return region->read8(address.offset() - region->base());
|
||||
}
|
||||
|
||||
|
@ -87,6 +93,12 @@ ValueWithShadow<u16> SoftMMU::read16(X86::LogicalAddress address)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_readable()) {
|
||||
reportln("SoftMMU::read16: Non-readable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
|
||||
return region->read16(address.offset() - region->base());
|
||||
}
|
||||
|
||||
|
@ -99,6 +111,12 @@ ValueWithShadow<u32> SoftMMU::read32(X86::LogicalAddress address)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_readable()) {
|
||||
reportln("SoftMMU::read32: Non-readable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
|
||||
return region->read32(address.offset() - region->base());
|
||||
}
|
||||
|
||||
|
@ -111,6 +129,12 @@ ValueWithShadow<u64> SoftMMU::read64(X86::LogicalAddress address)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_readable()) {
|
||||
reportln("SoftMMU::read64: Non-readable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
|
||||
return region->read64(address.offset() - region->base());
|
||||
}
|
||||
|
||||
|
@ -123,6 +147,11 @@ void SoftMMU::write8(X86::LogicalAddress address, ValueWithShadow<u8> value)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_writable()) {
|
||||
reportln("SoftMMU::write8: Non-writable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
region->write8(address.offset() - region->base(), value);
|
||||
}
|
||||
|
||||
|
@ -135,6 +164,12 @@ void SoftMMU::write16(X86::LogicalAddress address, ValueWithShadow<u16> value)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_writable()) {
|
||||
reportln("SoftMMU::write16: Non-writable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
|
||||
region->write16(address.offset() - region->base(), value);
|
||||
}
|
||||
|
||||
|
@ -147,6 +182,12 @@ void SoftMMU::write32(X86::LogicalAddress address, ValueWithShadow<u32> value)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_writable()) {
|
||||
reportln("SoftMMU::write32: Non-writable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
|
||||
region->write32(address.offset() - region->base(), value);
|
||||
}
|
||||
|
||||
|
@ -159,6 +200,12 @@ void SoftMMU::write64(X86::LogicalAddress address, ValueWithShadow<u64> value)
|
|||
TODO();
|
||||
}
|
||||
|
||||
if (!region->is_writable()) {
|
||||
reportln("SoftMMU::write64: Non-writable region @ {:p}", address.offset());
|
||||
Emulator::the().dump_backtrace();
|
||||
TODO();
|
||||
}
|
||||
|
||||
region->write64(address.offset() - region->base(), value);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue