| From 9e49b394a10d793a248231ea18705e0b9e527bf6 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 18 Feb 2026 13:09:03 -0600 |
| Subject: x86/hyperv: Fix error pointer dereference |
| |
| From: Ethan Tidmore <ethantidmore06@gmail.com> |
| |
| [ Upstream commit 705d01c8d78121ee1634bfc602ac4b0ad1438fab ] |
| |
| 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: 2b4b90e053a29 ("x86/hyperv: Use per cpu initial stack for vtl context") |
| Signed-off-by: Ethan Tidmore <ethantidmore06@gmail.com> |
| Signed-off-by: Wei Liu <wei.liu@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/hyperv/hv_vtl.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| diff --git a/arch/x86/hyperv/hv_vtl.c b/arch/x86/hyperv/hv_vtl.c |
| index 2510e91b29b08..b135ba5c18710 100644 |
| --- a/arch/x86/hyperv/hv_vtl.c |
| +++ b/arch/x86/hyperv/hv_vtl.c |
| @@ -68,7 +68,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; |
| @@ -81,9 +81,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); |
| -- |
| 2.51.0 |
| |