mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 19:17:41 +00:00
Kernel: Add a size argument to validate_read_from_kernel
This commit is contained in:
parent
a3590ca602
commit
3aaeff483b
4 changed files with 7 additions and 7 deletions
|
@ -104,12 +104,12 @@ static void load_ksyms_from_data(const ByteBuffer& buffer)
|
||||||
RecognizedSymbol recognized_symbols[max_recognized_symbol_count];
|
RecognizedSymbol recognized_symbols[max_recognized_symbol_count];
|
||||||
int recognized_symbol_count = 0;
|
int recognized_symbol_count = 0;
|
||||||
if (use_ksyms) {
|
if (use_ksyms) {
|
||||||
for (u32* stack_ptr = (u32*)ebp; current->process().validate_read_from_kernel(VirtualAddress((u32)stack_ptr)) && recognized_symbol_count < max_recognized_symbol_count; stack_ptr = (u32*)*stack_ptr) {
|
for (u32* stack_ptr = (u32*)ebp; current->process().validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2) && recognized_symbol_count < max_recognized_symbol_count; stack_ptr = (u32*)*stack_ptr) {
|
||||||
u32 retaddr = stack_ptr[1];
|
u32 retaddr = stack_ptr[1];
|
||||||
recognized_symbols[recognized_symbol_count++] = { retaddr, ksymbolicate(retaddr) };
|
recognized_symbols[recognized_symbol_count++] = { retaddr, ksymbolicate(retaddr) };
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (u32* stack_ptr = (u32*)ebp; current->process().validate_read_from_kernel(VirtualAddress((u32)stack_ptr)); stack_ptr = (u32*)*stack_ptr) {
|
for (u32* stack_ptr = (u32*)ebp; current->process().validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2); stack_ptr = (u32*)*stack_ptr) {
|
||||||
u32 retaddr = stack_ptr[1];
|
u32 retaddr = stack_ptr[1];
|
||||||
dbgprintf("%x (next: %x)\n", retaddr, stack_ptr ? (u32*)*stack_ptr : 0);
|
dbgprintf("%x (next: %x)\n", retaddr, stack_ptr ? (u32*)*stack_ptr : 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1896,7 +1896,7 @@ static KernelMemoryCheckResult check_kernel_memory_access(VirtualAddress vaddr,
|
||||||
return KernelMemoryCheckResult::NotInsideKernelMemory;
|
return KernelMemoryCheckResult::NotInsideKernelMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Process::validate_read_from_kernel(VirtualAddress vaddr) const
|
bool Process::validate_read_from_kernel(VirtualAddress vaddr, ssize_t size) const
|
||||||
{
|
{
|
||||||
if (vaddr.is_null())
|
if (vaddr.is_null())
|
||||||
return false;
|
return false;
|
||||||
|
@ -1909,7 +1909,7 @@ bool Process::validate_read_from_kernel(VirtualAddress vaddr) const
|
||||||
return false;
|
return false;
|
||||||
if (is_kmalloc_address(vaddr.as_ptr()))
|
if (is_kmalloc_address(vaddr.as_ptr()))
|
||||||
return true;
|
return true;
|
||||||
return validate_read(vaddr.as_ptr(), 1);
|
return validate_read(vaddr.as_ptr(), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Process::validate_read_str(const char* str)
|
bool Process::validate_read_str(const char* str)
|
||||||
|
|
|
@ -255,7 +255,7 @@ public:
|
||||||
u32 m_ticks_in_user_for_dead_children { 0 };
|
u32 m_ticks_in_user_for_dead_children { 0 };
|
||||||
u32 m_ticks_in_kernel_for_dead_children { 0 };
|
u32 m_ticks_in_kernel_for_dead_children { 0 };
|
||||||
|
|
||||||
bool validate_read_from_kernel(VirtualAddress) const;
|
bool validate_read_from_kernel(VirtualAddress, ssize_t) const;
|
||||||
|
|
||||||
bool validate_read(const void*, ssize_t) const;
|
bool validate_read(const void*, ssize_t) const;
|
||||||
bool validate_write(void*, ssize_t) const;
|
bool validate_write(void*, ssize_t) const;
|
||||||
|
|
|
@ -708,7 +708,7 @@ String Thread::backtrace_impl() const
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
Vector<RecognizedSymbol, 64> recognized_symbols;
|
Vector<RecognizedSymbol, 64> recognized_symbols;
|
||||||
recognized_symbols.append({ tss().eip, ksymbolicate(tss().eip) });
|
recognized_symbols.append({ tss().eip, ksymbolicate(tss().eip) });
|
||||||
for (u32* stack_ptr = (u32*)frame_ptr(); process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr)); stack_ptr = (u32*)*stack_ptr) {
|
for (u32* stack_ptr = (u32*)frame_ptr(); process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2); stack_ptr = (u32*)*stack_ptr) {
|
||||||
u32 retaddr = stack_ptr[1];
|
u32 retaddr = stack_ptr[1];
|
||||||
recognized_symbols.append({ retaddr, ksymbolicate(retaddr) });
|
recognized_symbols.append({ retaddr, ksymbolicate(retaddr) });
|
||||||
}
|
}
|
||||||
|
@ -738,7 +738,7 @@ Vector<u32> Thread::raw_backtrace(u32 ebp) const
|
||||||
ProcessPagingScope paging_scope(process);
|
ProcessPagingScope paging_scope(process);
|
||||||
Vector<u32> backtrace;
|
Vector<u32> backtrace;
|
||||||
backtrace.append(ebp);
|
backtrace.append(ebp);
|
||||||
for (u32* stack_ptr = (u32*)ebp; process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr)); stack_ptr = (u32*)*stack_ptr) {
|
for (u32* stack_ptr = (u32*)ebp; process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2); stack_ptr = (u32*)*stack_ptr) {
|
||||||
u32 retaddr = stack_ptr[1];
|
u32 retaddr = stack_ptr[1];
|
||||||
backtrace.append(retaddr);
|
backtrace.append(retaddr);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue