2022-05-18 08:30:19

by Liu Chao

[permalink] [raw]
Subject: [PATCH] cpu/hotplug: check the return value of idle_thread_get

ilde may be ERR_PTR()

Signed-off-by: Chao Liu <[email protected]>
---
kernel/cpu.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/kernel/cpu.c b/kernel/cpu.c
index d0a9aa0b42e8..8ddf372e8d29 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -590,6 +590,9 @@ static int bringup_cpu(unsigned int cpu)
struct task_struct *idle = idle_thread_get(cpu);
int ret;

+ if (IS_ERR(idle))
+ return PTR_ERR(idle);
+
/*
* Reset stale stack state from the last time this CPU was online.
*/
@@ -614,7 +617,12 @@ static int bringup_cpu(unsigned int cpu)
static int finish_cpu(unsigned int cpu)
{
struct task_struct *idle = idle_thread_get(cpu);
- struct mm_struct *mm = idle->active_mm;
+ struct mm_struct *mm = NULL;
+
+ if (IS_ERR(idle))
+ return PTR_ERR(idle);
+
+ mm = idle->active_mm;

/*
* idle_task_exit() will have switched to &init_mm, now
--
2.23.0



2022-05-18 08:59:25

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH] cpu/hotplug: check the return value of idle_thread_get

On Mon, Mar 27 2023 at 20:37, Chao Liu wrote:
> ilde may be ERR_PTR()

Yes, but if that happens in bringup_cpu() or finish_cpu() it would be a
serious bug and the error pointer dereference would be the least of the
problems.

If the initial check in _cpu_up() failed for a CPU then the above
functions cannot be invoked for that CPU ever.

Thanks,

tglx