1
Fork 0
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:
Andreas Kling 2020-01-12 10:47:01 +01:00
parent a6cef2408c
commit a885719af5

View file

@ -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();