From nobody Wed May 27 15:24:11 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gQYLg70gkz6fBdJ for ; Wed, 27 May 2026 15:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gQYLg51s1z3PQd for ; Wed, 27 May 2026 15:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779895451; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jXsfCtHjNTI4priY++dJBL6nUZP8gDPr4TOHoQGfah8=; b=uX0YjXyg4X+1RdeFm+RooOywuD5CfE7Gmrb+yCI37X7JJ//Apm8PkjcsSEZlYB0hhd1P9b 4hHsEt0zBeM9if9apEadQo1EMkWG5TwL+Caf+PXyvJ0FrY4NTYyKZiEx70wW4g8U5fHIgc 2B2IP+rinvhTJRlGTYy55bSG+63UhfxS7cQpIpXsaTIO8nnLC+VCJfPosVQ7uarKOdXuJq 7SyD0BqbwyuMVZJTuq3y0qMb4ffumh2KURvQlQGZDKTEvxMYhbRFoCf92fnUju3JFrc5gp +QSaYxqp+RIF+XzoV4NQk97hdGGp7Mm0tle2z95DTy2SU19b08PvHx29bmgnQw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1779895451; a=rsa-sha256; cv=none; b=gJmngwjrhYQMD53SBZVBHE9B1dxrWIDktNkxewVuIbfaIKoIuOm0VMRxZvvf/LTzV195KR kSr7v0fUDtcBkPB8U2QZ3TBQCW0jKkmm2cID/BTLU33yavUgbsWHIUW/ZELX1EXi/E+da7 j/kplOkDpcPNAB/qwN5Q8Q6taPXAMpxtbgM05WO5nC/GykAWjEBnwnIHkf58eD70Bp8FtJ 0kugQf5Z1Akp1j2dqNi13YnNxbmp8WVf0UxSP3Yc3wRHcw89me9V5iUC6gMRsIG7xnOXPG jv9mmNCHlLInQc82X2TkPx7HgqIx0U9fzIWeUe3cgBV7jKbK3pMXlaW0lUivsg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1779895451; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jXsfCtHjNTI4priY++dJBL6nUZP8gDPr4TOHoQGfah8=; b=ZiOuhQGOQB1hd98+BlvcjZF0VRXHY/alirvodrOFyIoJc16tT+VnHAUDhRUQi50B4TUF5K ZdDOqGqCakXEaYn4cleFMg/8y7EEauYADU5e0EUZaGxs7NZZDCedI2YsMky5jpmRhrhEZZ B8t8zmbm77NcLxkirb9o424zm0xL8du9exMJEwOH5A9OE37HIc29Qd/cZmxvynPmV+VX73 1DEPjYrbMI9bkvyuJc1dVm4bhIv+Ua5PGc/n5OHgndO6g1nJKutg8nEr0kxYbmurRBYn1b juz+FnMHeUfRevgRGzpwXDVW45c51gsYi7MDZVJHA3wlNddeEOVMz/jSxXQn9A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gQYLg4b7Wz14g2 for ; Wed, 27 May 2026 15:24:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 272a9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 27 May 2026 15:24:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 5cb511e62763 - main - arm64: Check for MTE tag failures on kernel entry List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5cb511e62763621cf7672db4294002411c3e897d Auto-Submitted: auto-generated Date: Wed, 27 May 2026 15:24:11 +0000 Message-Id: <6a170c9b.272a9.68b4c51d@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=5cb511e62763621cf7672db4294002411c3e897d commit 5cb511e62763621cf7672db4294002411c3e897d Author: Andrew Turner AuthorDate: 2026-05-15 16:13:33 +0000 Commit: Andrew Turner CommitDate: 2026-05-27 15:22:25 +0000 arm64: Check for MTE tag failures on kernel entry When entering the kernel from userspace we need to check for MTE tag failures when using asynchronous MTE. This is done by checking if either tag fault check types that have asynchronous checks are enabled, and if so check the register the result is stored. It then sets a flag the kernel can later use to raise a signal. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D55952 --- sys/arm64/arm64/exception.S | 36 ++++++++++++++++++++++++++++++++++-- sys/arm64/arm64/genassym.c | 3 +++ sys/arm64/include/proc.h | 4 +++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/sys/arm64/arm64/exception.S b/sys/arm64/arm64/exception.S index 5a4181348a54..5efbc4b36710 100644 --- a/sys/arm64/arm64/exception.S +++ b/sys/arm64/arm64/exception.S @@ -92,10 +92,34 @@ blr x1 1: - ldr x0, [x18, #PC_CURTHREAD] + ldr x19, [x18, #PC_CURTHREAD] + + ldr x1, [x19, #TD_MD_SCTLR] + /* + * If the upper bit in SCTLR_EL1.TCF0 is set we are either in async + * or asym modes. Either of which could set TFSRE0_EL1. + */ + tbz x1, #(SCTLR_TCF0_SHIFT + 1), 2f + /* Check for a tag fault */ + mrs x1, TFSRE0_EL1_REG + tbz x1, #TFSRE0_TF0_SHIFT, 2f + + /* + * A fault has happened, set MD_FLAG_MTE_ASYNC_FAULT. As FEAT_LSE + * is a required feature where FEAT_MTE_ASYNC could be implemented + * we can depend on it being present to set the flag. + */ + ldr w1, =MD_FLAG_MTE_ASYNC_FAULT + add x2, x19, #TD_MD_FLAGS +.arch_extension lse + stset w1, [x2] +.arch_extension nolse + +2: + mov x0, x19 bl ptrauth_exit_el0 - ldr x0, [x18, #(PC_CURTHREAD)] + mov x0, x19 bl dbg_monitor_enter /* Unmask debug and SError exceptions */ @@ -118,6 +142,14 @@ msr daifset, #(DAIF_ALL) .if \el == 0 ldr x0, [x18, #PC_CURTHREAD] + + ldr x1, [x0, #TD_MD_SCTLR] + /* See above for why we check this field */ + tbz x1, #(SCTLR_TCF0_SHIFT + 1), 1f + dsb ish + msr TFSRE0_EL1_REG, xzr +1: + mov x1, sp bl dbg_monitor_exit diff --git a/sys/arm64/arm64/genassym.c b/sys/arm64/arm64/genassym.c index b54f446e83bd..6c86f190282d 100644 --- a/sys/arm64/arm64/genassym.c +++ b/sys/arm64/arm64/genassym.c @@ -74,6 +74,9 @@ ASSYM(TD_FRAME, offsetof(struct thread, td_frame)); ASSYM(TD_LOCK, offsetof(struct thread, td_lock)); ASSYM(TD_MD_CANARY, offsetof(struct thread, td_md.md_canary)); ASSYM(TD_MD_EFIRT_TMP, offsetof(struct thread, td_md.md_efirt_tmp)); +ASSYM(TD_MD_FLAGS, offsetof(struct thread, td_md.md_flags)); +ASSYM(MD_FLAG_MTE_ASYNC_FAULT, MD_FLAG_MTE_ASYNC_FAULT); +ASSYM(TD_MD_SCTLR, offsetof(struct thread, td_md.md_sctlr)); ASSYM(TF_SIZE, sizeof(struct trapframe)); ASSYM(TF_SP, offsetof(struct trapframe, tf_sp)); diff --git a/sys/arm64/include/proc.h b/sys/arm64/include/proc.h index a455ab098ee9..22ceb614413d 100644 --- a/sys/arm64/include/proc.h +++ b/sys/arm64/include/proc.h @@ -69,7 +69,9 @@ struct mdthread { uint64_t md_efirt_tmp; int md_efirt_dis_pf; - int md_reserved0; + u_int md_flags; +#define MD_FLAG_MTE_ASYNC_FAULT_SHIFT 0 +#define MD_FLAG_MTE_ASYNC_FAULT (1u << 0) uint64_t md_sctlr; uint64_t md_gcr; /* FEAT_MTE: Tag Control Register */ };