Commit c25fa96a authored by Daniel Leung's avatar Daniel Leung Committed by Anas Nashif
Browse files

x86: only set psp pointer for thread stacks



Only set the privileged stack pointer for thread stacks, but
nullify the pointer for kernel-only stacks, as these stacks
do not have the reserved space. The psp pointer may point to
arbitrary memory in this case if stack is not big enough.

Signed-off-by: default avatarDaniel Leung <daniel.leung@intel.com>
parent d26b7d4e
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ void *z_x86_userspace_prepare_thread(struct k_thread *thread)
{
	void *initial_entry;

	if (z_stack_is_user_capable(thread->stack_obj)) {
		struct z_x86_thread_stack_header *header =
#ifdef CONFIG_THREAD_STACK_MEM_MAPPED
			(struct z_x86_thread_stack_header *)thread->stack_info.mapped.addr;
@@ -77,8 +78,10 @@ void *z_x86_userspace_prepare_thread(struct k_thread *thread)
			(struct z_x86_thread_stack_header *)thread->stack_obj;
#endif /* CONFIG_THREAD_STACK_MEM_MAPPED */

	thread->arch.psp =
		header->privilege_stack + sizeof(header->privilege_stack);
		thread->arch.psp = header->privilege_stack + sizeof(header->privilege_stack);
	} else {
		thread->arch.psp = NULL;
	}

#ifndef CONFIG_X86_COMMON_PAGE_TABLE
	/* Important this gets cleared, so that arch_mem_domain_* APIs