mirror of
https://github.com/RGBCube/serenity
synced 2025-05-26 02:05:08 +00:00
Kernel: Keep SMAP protection enabled in Thread::backtrace_impl()
This commit is contained in:
parent
a6cef2408c
commit
a885719af5
1 changed files with 7 additions and 5 deletions
|
@ -706,7 +706,6 @@ String Thread::backtrace_impl() const
|
|||
start_frame = frame_ptr();
|
||||
}
|
||||
|
||||
SmapDisabler disabler;
|
||||
auto& process = const_cast<Process&>(this->process());
|
||||
ProcessPagingScope paging_scope(process);
|
||||
struct RecognizedSymbol {
|
||||
|
@ -717,11 +716,14 @@ String Thread::backtrace_impl() const
|
|||
Vector<RecognizedSymbol, 128> recognized_symbols;
|
||||
if (current != this)
|
||||
recognized_symbols.append({ tss().eip, ksymbolicate(tss().eip) });
|
||||
for (u32* stack_ptr = (u32*)start_frame; process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2); stack_ptr = (u32*)*stack_ptr) {
|
||||
u32 retaddr = stack_ptr[1];
|
||||
recognized_symbols.append({ retaddr, ksymbolicate(retaddr) });
|
||||
if (recognized_symbols.size() == 256)
|
||||
u32 stack_ptr = start_frame;
|
||||
for (;;) {
|
||||
if (!process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2))
|
||||
break;
|
||||
u32 retaddr;
|
||||
copy_from_user(&retaddr, &((u32*)stack_ptr)[1]);
|
||||
recognized_symbols.append({ retaddr, ksymbolicate(retaddr) });
|
||||
copy_from_user(&stack_ptr, (u32*)stack_ptr);
|
||||
}
|
||||
|
||||
bool mask_kernel_addresses = !current->process().is_superuser();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue