mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 07:15:07 +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();
|
start_frame = frame_ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
SmapDisabler disabler;
|
|
||||||
auto& process = const_cast<Process&>(this->process());
|
auto& process = const_cast<Process&>(this->process());
|
||||||
ProcessPagingScope paging_scope(process);
|
ProcessPagingScope paging_scope(process);
|
||||||
struct RecognizedSymbol {
|
struct RecognizedSymbol {
|
||||||
|
@ -717,11 +716,14 @@ String Thread::backtrace_impl() const
|
||||||
Vector<RecognizedSymbol, 128> recognized_symbols;
|
Vector<RecognizedSymbol, 128> recognized_symbols;
|
||||||
if (current != this)
|
if (current != this)
|
||||||
recognized_symbols.append({ tss().eip, ksymbolicate(tss().eip) });
|
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 stack_ptr = start_frame;
|
||||||
u32 retaddr = stack_ptr[1];
|
for (;;) {
|
||||||
recognized_symbols.append({ retaddr, ksymbolicate(retaddr) });
|
if (!process.validate_read_from_kernel(VirtualAddress((u32)stack_ptr), sizeof(void*) * 2))
|
||||||
if (recognized_symbols.size() == 256)
|
|
||||||
break;
|
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();
|
bool mask_kernel_addresses = !current->process().is_superuser();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue