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
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