Commit 705d01c8 authored by Ethan Tidmore's avatar Ethan Tidmore Committed by Wei Liu
Browse files

x86/hyperv: Fix error pointer dereference



The function idle_thread_get() can return an error pointer and is not
checked for it. Add check for error pointer.

Detected by Smatch:
arch/x86/hyperv/hv_vtl.c:126 hv_vtl_bringup_vcpu() error:
'idle' dereferencing possible ERR_PTR()

Fixes: 2b4b90e0 ("x86/hyperv: Use per cpu initial stack for vtl context")
Signed-off-by: default avatarEthan Tidmore <ethantidmore06@gmail.com>
Signed-off-by: default avatarWei Liu <wei.liu@kernel.org>
parent fe9f1598
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ static void hv_vtl_ap_entry(void)

static int hv_vtl_bringup_vcpu(u32 target_vp_index, int cpu, u64 eip_ignored)
{
	u64 status;
	u64 status, rsp, rip;
	int ret = 0;
	struct hv_enable_vp_vtl *input;
	unsigned long irq_flags;
@@ -123,9 +123,11 @@ static int hv_vtl_bringup_vcpu(u32 target_vp_index, int cpu, u64 eip_ignored)
	struct desc_struct *gdt;

	struct task_struct *idle = idle_thread_get(cpu);
	u64 rsp = (unsigned long)idle->thread.sp;
	if (IS_ERR(idle))
		return PTR_ERR(idle);

	u64 rip = (u64)&hv_vtl_ap_entry;
	rsp = (unsigned long)idle->thread.sp;
	rip = (u64)&hv_vtl_ap_entry;

	native_store_gdt(&gdt_ptr);
	store_idt(&idt_ptr);