From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56812C433F5 for ; Mon, 10 Jan 2022 22:07:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9EB726B0071; Mon, 10 Jan 2022 17:07:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 973F76B0073; Mon, 10 Jan 2022 17:07:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7EDA36B0074; Mon, 10 Jan 2022 17:07:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0031.hostedemail.com [216.40.44.31]) by kanga.kvack.org (Postfix) with ESMTP id 6E6486B0071 for ; Mon, 10 Jan 2022 17:07:06 -0500 (EST) Received: from smtpin14.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 28E0E8D6ED for ; Mon, 10 Jan 2022 22:07:06 +0000 (UTC) X-FDA: 79015763652.14.6391E09 Received: from mail-yb1-f176.google.com (mail-yb1-f176.google.com [209.85.219.176]) by imf18.hostedemail.com (Postfix) with ESMTP id B23641C000B for ; Mon, 10 Jan 2022 22:07:05 +0000 (UTC) Received: by mail-yb1-f176.google.com with SMTP id g81so14737745ybg.10 for ; Mon, 10 Jan 2022 14:07:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=OLoSFmV+IY05QKb0dS8wO8UVqMpy7ASVbT1uYBBSlVk=; b=IxQB2TPmTUhakP4Y4I6pmrmn98v/DAm6vwbvYZyvTHDkJAVNk6OhngUc6IRUJFiHu2 BSiMshSd/ISmmbFRNUuuA8MD0nYAwd5GwN6rbgWkNOaioMBnSt9aV60pbTjdP3ml0O5X h4e7+0/DpdPRxqnCe2HR/mvdRsJW8/f9eRjgqgXy+87Ek4PH5NnRwLLTLWppR1ppGAjm 0/ZwnY8LeEs0c00hXL/70SpAcF1O2JRCq0HkVMtX5K6SlZqozKmWH4VI7nS3wtQlYuC6 DMHPRAL2ec0Abox7w+nlLjciBrwB9Yw0HMH/73oDXAnuyr3KNTkRxGnQkDZ1yXLNGJMM Vy4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=OLoSFmV+IY05QKb0dS8wO8UVqMpy7ASVbT1uYBBSlVk=; b=qgMD/xPhHcCKWQ1He1OSQ/91mBrLZnrTHdalRpA3C++wMTQpan1WmxODaVejqP7zwh wd6mmFSo9ITXKGRWeRTAwaC7jNUqYEJLAnEOFV90MRNBuGXdhRj/eq2yuvCYGPwIhqtT TNnr1Qyecle3a+vd6uWElepkkPRwKqpqkT5HCvm/SoRsm/SNNaeGPWJopMkwTsti2WHf TSl+tO9D/tK4yIFIiNJ9jPyPu74HGaKUtANLSV844tvJKXluwFqBfjHNIV/1YVxV9xLW 9dotP+ymNCs+oLHq+FiE0Sj3EcHksOL8AhHX9OyRrP/fefeztsTh0MunImfOzOAYfCOX MOUA== X-Gm-Message-State: AOAM5321G0Sq7VMrhQ5FOrzbgP5ncOlAvlMJbDWxy+nFv2QbAH2HH4K6 1xbiwyusUIVGv9taxV5nC3f1ScHm19R1q2WttiFf4w== X-Google-Smtp-Source: ABdhPJzryT/NjsVOi5SARPjPlviemKlUVT+U6gViPtgl/7bBvxfByaT33kw2rB4BLSc7HSihyH8Ow17sPMRTfMkN5RA= X-Received: by 2002:a25:b9d2:: with SMTP id y18mr843069ybj.615.1641852424421; Mon, 10 Jan 2022 14:07:04 -0800 (PST) MIME-Version: 1.0 References: <233d81a0a1e7b8eca1907998152ee848159b8774.1641659630.git.luto@kernel.org> In-Reply-To: <233d81a0a1e7b8eca1907998152ee848159b8774.1641659630.git.luto@kernel.org> From: Sami Tolvanen Date: Mon, 10 Jan 2022 14:06:53 -0800 Message-ID: Subject: Re: [PATCH 11/23] sched/scs: Initialize shadow stack on idle thread bringup, not shutdown To: Andy Lutomirski Cc: Andrew Morton , Linux-MM , Nicholas Piggin , Anton Blanchard , Benjamin Herrenschmidt , Paul Mackerras , Randy Dunlap , linux-arch , X86 ML , Rik van Riel , Dave Hansen , Peter Zijlstra , Nadav Amit , Mathieu Desnoyers , Woody Lin , Valentin Schneider , Mark Rutland Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: B23641C000B X-Stat-Signature: 366f6cj4czjm9jnjgau9xny78h1r11ex Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=IxQB2TPm; spf=pass (imf18.hostedemail.com: domain of samitolvanen@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=samitolvanen@google.com; dmarc=pass (policy=reject) header.from=google.com X-HE-Tag: 1641852425-822591 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hi Andy, On Sat, Jan 8, 2022 at 8:44 AM Andy Lutomirski wrote: > > Starting with commit 63acd42c0d49 ("sched/scs: Reset the shadow stack when > idle_task_exit"), the idle thread's shadow stack was reset from the idle > task's context during CPU hot-unplug. This was fragile: between resetting > the shadow stack and actually stopping the idle task, the shadow stack > did not match the actual call stack. > > Clean this up by resetting the idle task's SCS in bringup_cpu(). > > init_idle() still does scs_task_reset() -- see the comments there. I > leave this to an SCS maintainer to untangle further. > > Cc: Woody Lin > Cc: Valentin Schneider > Cc: Sami Tolvanen > Signed-off-by: Andy Lutomirski > --- > kernel/cpu.c | 3 +++ > kernel/sched/core.c | 9 ++++++++- > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/kernel/cpu.c b/kernel/cpu.c > index 192e43a87407..be16816bb87c 100644 > --- a/kernel/cpu.c > +++ b/kernel/cpu.c > @@ -33,6 +33,7 @@ > #include > #include > #include > +#include > > #include > #define CREATE_TRACE_POINTS > @@ -587,6 +588,8 @@ static int bringup_cpu(unsigned int cpu) > struct task_struct *idle = idle_thread_get(cpu); > int ret; > > + scs_task_reset(idle); > + > /* > * Some architectures have to walk the irq descriptors to > * setup the vector space for the cpu which comes online. > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 917068b0a145..acd52a7d1349 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -8621,7 +8621,15 @@ void __init init_idle(struct task_struct *idle, int cpu) > idle->flags |= PF_IDLE | PF_KTHREAD | PF_NO_SETAFFINITY; > kthread_set_per_cpu(idle, cpu); > > + /* > + * NB: This is called from sched_init() on the *current* idle thread. > + * This seems fragile if not actively incorrect. > + * > + * Initializing SCS for about-to-be-brought-up CPU idle threads > + * is in bringup_cpu(), but that does not cover the boot CPU. > + */ > scs_task_reset(idle); > + > kasan_unpoison_task_stack(idle); > > #ifdef CONFIG_SMP > @@ -8779,7 +8787,6 @@ void idle_task_exit(void) > finish_arch_post_lock_switch(); > } > > - scs_task_reset(current); > /* finish_cpu(), as ran on the BP, will clean up the active_mm state */ > } I believe Mark already fixed this one here: https://lore.kernel.org/lkml/20211123114047.45918-1-mark.rutland@arm.com/ Sami