From nobody Fri Dec 19 06:07:44 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D01E2F12CA; Thu, 18 Dec 2025 08:13:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766045582; cv=none; b=hDau27GV0cQy4OvvBD9KADD7WU2c8kZTzQVSpqr1gt/cxyFEpEOJ2JqXA9Zby417ou9Pa8oHpQ5remIIQFuHg4NaTkLikPNO2z6+I+FzkRNurzoMmirLNRr2ecTEfcXQa126iFsTmMefZVaSFLUIoPyacl32HnTAk0D8Sjvl4ZA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766045582; c=relaxed/simple; bh=kPQRcvC7WfSPYhzJwayZjYIsAWbvmKAaCwsniNqkt7c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=knadrPfPwmm+b6SqAJE/+lz07RedjR+JcgkgF71jkzfvzrC6RhVncY6PIGM6foBFJOZYWBaIryvNZZfWcMNYADQF39hKMTpwLo01HBGGEnxGWwQaij3uwF3e5S/ykRZCWV0UkRX01kkhJCw7prDfGONryvmuis/KUJc4nDcp+T4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jNDEIbmn; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jNDEIbmn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5BD54C113D0; Thu, 18 Dec 2025 08:12:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1766045581; bh=kPQRcvC7WfSPYhzJwayZjYIsAWbvmKAaCwsniNqkt7c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jNDEIbmnWGZ5xe3caj5iK+JefJd+0K9WJ0bqjEItqZ4Ax3S0/Eg2yFSr6jzcgq3fV YH9fRSNsJWYoRbDLfTTSgiLAbWWtht3osjPIBiAYw7eg73SugwJjc/SJgIPV5uls+M R542E98nqWG9yc/POXovJQgzTW/EqoxK4UEtAkq77EDAeFQT5Ae5zZSHZ5sRMzRG2X YUpXCnyNqVst12jP//HtBJ7kNhWgbvUmfRmCmEMx1z5T228Te/lsV2d0N/aqiWLw5s b9ksT/6RHrcVd1eEu88Ao91fEYdI3joX6OJbfigDFozqQ8Y0L/7lwQ96m6FdeYmISc LqwdNEntYSB+A== From: Mark Brown Date: Thu, 18 Dec 2025 08:10:06 +0000 Subject: [PATCH v23 1/8] arm64/gcs: Return a success value from gcs_alloc_thread_stack() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251218-clone3-shadow-stack-v23-1-7cb318fbb385@kernel.org> References: <20251218-clone3-shadow-stack-v23-0-7cb318fbb385@kernel.org> In-Reply-To: <20251218-clone3-shadow-stack-v23-0-7cb318fbb385@kernel.org> To: "Rick P. Edgecombe" , Deepak Gupta , "H.J. Lu" , Florian Weimer , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Christian Brauner , Shuah Khan Cc: linux-kernel@vger.kernel.org, Catalin Marinas , Will Deacon , jannh@google.com, bsegall@google.com, Andrew Morton , Yury Khrustalev , "H.J. Lu" , Adhemerval Zanella Netto , Wilco Dijkstra , CarlosO'Donell , Florian Weimer , Rich Felker , linux-kselftest@vger.kernel.org, linux-api@vger.kernel.org, Mark Brown , Kees Cook X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=3646; i=broonie@kernel.org; h=from:subject:message-id; bh=kPQRcvC7WfSPYhzJwayZjYIsAWbvmKAaCwsniNqkt7c=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBpQ7d6whj/pB24OzdyEDg6QA3mhXAv8CI8+PPID LWorYWSy7SJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCaUO3egAKCRAk1otyXVSH 0Ne+B/9cF0EEL56snz9RmBIdM0oxWpZPDSNILdtEK+P5nmEYgGm/jQns2le1ZJ+/0thlA+eK4jh aORotdpZGq1RP79sUogPG/m7fxL8dIs1El8JuNC8krTB9AtFBonCAw63OicRxDZcxL6my91lrZe TG7UsuDnCty01bhOrEZHJ6Twf0EylaKtcniaY26KkluIIGVg4m9eD3yRVml90Z+6E/A8YuvhgtM bpiwhtOhCaF4DPLfs4xJTSXmWK47k6lRs2APCVq/xK0tS0AUdoI3YvpOkTadVF6t63fqIuOOtMd x+dR0KqBxj4zFxMehkOFEopVJ6US0GpzDk2cf2hAXU8d3Zkb X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB Currently as a result of templating from x86 code gcs_alloc_thread_stack() returns a pointer as an unsigned int however on arm64 we don't actually use this pointer value as anything other than a pass/fail flag. Simplify the interface to just return an int with 0 on success and a negative error code on failure. Acked-by: Deepak Gupta Reviewed-by: Catalin Marinas Signed-off-by: Mark Brown --- arch/arm64/include/asm/gcs.h | 8 ++++---- arch/arm64/kernel/process.c | 8 ++++---- arch/arm64/mm/gcs.c | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/arch/arm64/include/asm/gcs.h b/arch/arm64/include/asm/gcs.h index 8fa0707069e8..534ea5ae9281 100644 --- a/arch/arm64/include/asm/gcs.h +++ b/arch/arm64/include/asm/gcs.h @@ -64,8 +64,8 @@ static inline bool task_gcs_el0_enabled(struct task_struc= t *task) void gcs_set_el0_mode(struct task_struct *task); void gcs_free(struct task_struct *task); void gcs_preserve_current_state(void); -unsigned long gcs_alloc_thread_stack(struct task_struct *tsk, - const struct kernel_clone_args *args); +int gcs_alloc_thread_stack(struct task_struct *tsk, + const struct kernel_clone_args *args); =20 static inline int gcs_check_locked(struct task_struct *task, unsigned long new_val) @@ -171,8 +171,8 @@ static inline void put_user_gcs(unsigned long val, unsi= gned long __user *addr, int *err) { } static inline void push_user_gcs(unsigned long val, int *err) { } =20 -static inline unsigned long gcs_alloc_thread_stack(struct task_struct *tsk, - const struct kernel_clone_args *args) +static inline int gcs_alloc_thread_stack(struct task_struct *tsk, + const struct kernel_clone_args *args) { return -ENOTSUPP; } diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index fba7ca102a8c..4dadc70df16b 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -299,7 +299,7 @@ static void flush_gcs(void) static int copy_thread_gcs(struct task_struct *p, const struct kernel_clone_args *args) { - unsigned long gcs; + int ret; =20 if (!system_supports_gcs()) return 0; @@ -310,9 +310,9 @@ static int copy_thread_gcs(struct task_struct *p, p->thread.gcs_el0_mode =3D current->thread.gcs_el0_mode; p->thread.gcs_el0_locked =3D current->thread.gcs_el0_locked; =20 - gcs =3D gcs_alloc_thread_stack(p, args); - if (IS_ERR_VALUE(gcs)) - return PTR_ERR((void *)gcs); + ret =3D gcs_alloc_thread_stack(p, args); + if (ret !=3D 0) + return ret; =20 return 0; } diff --git a/arch/arm64/mm/gcs.c b/arch/arm64/mm/gcs.c index 6e93f78de79b..3abcbf9adb5c 100644 --- a/arch/arm64/mm/gcs.c +++ b/arch/arm64/mm/gcs.c @@ -38,8 +38,8 @@ static unsigned long gcs_size(unsigned long size) return max(PAGE_SIZE, size); } =20 -unsigned long gcs_alloc_thread_stack(struct task_struct *tsk, - const struct kernel_clone_args *args) +int gcs_alloc_thread_stack(struct task_struct *tsk, + const struct kernel_clone_args *args) { unsigned long addr, size; =20 @@ -59,13 +59,13 @@ unsigned long gcs_alloc_thread_stack(struct task_struct= *tsk, size =3D gcs_size(size); addr =3D alloc_gcs(0, size); if (IS_ERR_VALUE(addr)) - return addr; + return PTR_ERR((void *)addr); =20 tsk->thread.gcs_base =3D addr; tsk->thread.gcs_size =3D size; tsk->thread.gcspr_el0 =3D addr + size - sizeof(u64); =20 - return addr; + return 0; } =20 SYSCALL_DEFINE3(map_shadow_stack, unsigned long, addr, unsigned long, size= , unsigned int, flags) --=20 2.47.3