From: Stian Halseth <stian@itx.no>
To: davem@davemloft.net, Andreas Larsson <andreas@gaisler.com>
Cc: sparclinux@vger.kernel.org, linux-kernel@vger.kernel.org,
glaubitz@physik.fu-berlin.de, Stian Halseth <stian@itx.no>
Subject: [PATCH v2 1/3] sparc64: restore %asi in user_rtt_fill_fixup_common
Date: Wed, 7 Oct 2026 10:53:45 +0200 [thread overview]
Message-ID: <20261007085347.256789-2-stian@itx.no> (raw)
In-Reply-To: <20261007085347.256789-1-stian@itx.no>
A window fill that faults re-enters the kernel through
user_rtt_fill_fixup_common(), which does not pass through etrap. rtrap
has already set %asi to ASI_AIUP for the fill, and etrap is what would
normally re-establish ASI_AIUS from the TSTATE it synthesizes, so the
kernel carries on with %asi = ASI_AIUP while the primary context has
just been restored to the kernel's.
Every %asi-based user access made from there - put_user(), get_user()
and everything built on them - then translates in the kernel context.
User addresses below the VA hole fault forever, because nothing ever
fills a context-zero translation for them, and the CPU is wedged in
kernel mode: the task survives SIGKILL, sits in state R at 100% CPU,
and takes the machine down once RCU stalls. Addresses above the hole
fail more quietly, silently aliasing the kernel linear mapping.
Restore the invariant before any user access is attempted.
Fixes: 7cafc0b8bf13 ("sparc64: Fix return from trap window fill crashes.")
Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Link: https://github.com/sparclinux/issues/issues/87
Signed-off-by: Stian Halseth <stian@itx.no>
---
v2: reword the comment as suggested by Andreas: state the restored
invariant first, phrase it as why the write is needed, and leave the
failure-mode details to the commit message. No code change.
arch/sparc/kernel/urtt_fill.S | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/arch/sparc/kernel/urtt_fill.S b/arch/sparc/kernel/urtt_fill.S
index e4cee7be5cd02..1ec67df9b59e3 100644
--- a/arch/sparc/kernel/urtt_fill.S
+++ b/arch/sparc/kernel/urtt_fill.S
@@ -1,4 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0 */
+#include <asm/asi.h>
#include <asm/thread_info.h>
#include <asm/trap_block.h>
#include <asm/spitfire.h>
@@ -32,6 +33,15 @@ user_rtt_fill_fixup_common:
sethi %hi(KERNBASE), %g1
flush %g1
+ /* Restore the kernel's ASI_AIUS invariant, which etrap
+ * would have re-established had we passed through it.
+ * rtrap set %asi to ASI_AIUP for the window fill, and
+ * the primary context is now the kernel's, so a leftover
+ * ASI_AIUP would make %asi-based user accesses (put_user,
+ * get_user) translate in the kernel context.
+ */
+ wr %g0, ASI_AIUS, %asi
+
mov %g4, %l4
mov %g5, %l5
brnz,pn %g3, 1f
--
2.43.0
next prev parent reply other threads:[~2026-10-07 8:54 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 8:53 [PATCH v2 0/3] sparc64: fix a window fill fixup lockup and two fault bugs Stian Halseth
2026-10-07 8:53 ` Stian Halseth [this message]
2026-10-07 8:53 ` [PATCH v2 2/3] sparc64: use the fault address for si_addr on window fixup faults Stian Halseth
2026-10-07 8:53 ` [PATCH v2 3/3] sparc64: decide the TSB huge-page window fixup before the bank switch Stian Halseth
2026-10-07 11:40 ` [PATCH v2 0/3] sparc64: fix a window fill fixup lockup and two fault bugs Andreas Larsson
2026-10-07 13:05 ` Stian Halseth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261007085347.256789-2-stian@itx.no \
--to=stian@itx.no \
--cc=andreas@gaisler.com \
--cc=davem@davemloft.net \
--cc=glaubitz@physik.fu-berlin.de \
--cc=linux-kernel@vger.kernel.org \
--cc=sparclinux@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®