From nobody Mon Feb 19 16:44:55 2024 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 4TdpL00TDgz5C95x; Mon, 19 Feb 2024 16:44:56 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TdpKz3xXtz4ZxW; Mon, 19 Feb 2024 16:44:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708361095; 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=DGbZ/E1jTG6rCybmJVbMJm2mngo4etPlvPWKnUR+LH0=; b=kkQqsyMODE3Hcm/cba0e2hLGnKWVLO+P7lIVLskzZ53AL7IB9bzVrGITczE6eKDiGTOkf6 ODI0okmJX5C6czuO1obLzAKH7t34MbG5mrU7eaIIj99DOK2zKSnJFmLfj54mFOH2UkN+Zm 53+pgF6X0wGudRcx2tn+DsXVIaYEQvZcmvRgZfMrhcrQt1T1OT/shqVqkz2dS1c/xqNwT7 adPjRGejV/oyLXKMiSG1YSyufC9GqWCQ4NjYBa3bqFy01T+3e+d2A2ESTQmoHQEbumV8lB 68JkWcy9Y7fcz8V29BOrpvEPEIK11ifYAEJEO5gbjBe4DuxyqiZDaPjcEPWq+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1708361095; 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=DGbZ/E1jTG6rCybmJVbMJm2mngo4etPlvPWKnUR+LH0=; b=qISsETQuO9nx/oiXtBl6w/ktSnTPZkx8qOQMGeQks4Twue/AYupzGtsPexMBXhidnHCehD UdU5PCZ3laIAROOabZXz3QOTkxn97J3XG/vXpXYKTF4kqFZH+1msokdTiorCl5P3zKzy05 Ww3DGCsI1IbG8XCO8pF6jMXH3SJTg8a8ErVu8OjdU2iGB2L8U6XiB0x05mogbcUWotwZl5 RDJC4xieFp2ENqCXQtVafet8uIvUMOVHHg05uhc+uELBb1FyoYkcpm2kZWXuBkq+zTG38K /K5s72aOemok3NNuZ6dtYJZxzyVdvsvQRQjAZniYw6OG/FRGiFBO/JGAuhHYbg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1708361095; a=rsa-sha256; cv=none; b=h/fL4ROpSYiG/3rAK7cynxb04w2VLKlgH5G2aWaGuyGgqXVPx5wD8LJydqZH2lYrb1oqyu UOk6r/ZBTK6ZOMlqYuPQcaz3yZg8FFjuuecqjUd1C+EDZk1kzvwbbJunJCYto+Fm8AP4h+ JKo2fQwUCQK4AE2DoXXg3X4ww+HRn/RoQ197afCGn8Bf9AjfcesDR1AJtpub7dsuhqALfr XvFTPzuUpvAKychoZqXZqF2328O5CZ8u2n7/m1XPpFZOrV3uK+JQWv6XeAZ+laGqOK+iHY tEzF4xY2pO8KuocAdZWUUX5DbK+kcyFdW0WRoGrZn3/AJBZiRjb0LKeHSEOPFg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4TdpKz1LflzjDK; Mon, 19 Feb 2024 16:44:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 41JGitpt094207; Mon, 19 Feb 2024 16:44:55 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 41JGitH7094204; Mon, 19 Feb 2024 16:44:55 GMT (envelope-from git) Date: Mon, 19 Feb 2024 16:44:55 GMT Message-Id: <202402191644.41JGitH7094204@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Andrew Turner Subject: git: 29e38839272e - stable/13 - arm64: Support creating a BTI & PAC note 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org 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/stable/13 X-Git-Reftype: branch X-Git-Commit: 29e38839272e9aa43dfc8c548385eb27452cb6b1 Auto-Submitted: auto-generated The branch stable/13 has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=29e38839272e9aa43dfc8c548385eb27452cb6b1 commit 29e38839272e9aa43dfc8c548385eb27452cb6b1 Author: Andrew Turner AuthorDate: 2023-10-10 13:00:59 +0000 Commit: Andrew Turner CommitDate: 2024-02-19 12:40:53 +0000 arm64: Support creating a BTI & PAC note To detect when an object file is build with the Branch Target Identification (BTI) and Pointer Authentication Code (PAC) extensions there is an elf note the compiler will insert. It will only do so from a high level language, e.g. C or C++. To get the not in assembly add the GNU_PROPERTY_AARCH64_FEATURE_1_NOTE macro that can be used to create it, and the GNU_PROPERTY_AARCH64_FEATURE_1_VAL macro to insert the correct value based on which combination of BTI and PAC are enabled. Reviewed by: markj (earlier version), emaste Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D42225 (cherry picked from commit 82597d2102a02c4e9e9355717c32867d34b77ef0) --- sys/arm64/include/asm.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/sys/arm64/include/asm.h b/sys/arm64/include/asm.h index cfbcd2623e69..955fb51af030 100644 --- a/sys/arm64/include/asm.h +++ b/sys/arm64/include/asm.h @@ -138,4 +138,56 @@ #define BTI_J #endif +/* + * GNU_PROPERTY_AARCH64_FEATURE_1_NOTE can be used to insert a note that + * the current assembly file is built with Pointer Authentication (PAC) or + * Branch Target Identification support (BTI). As the linker requires all + * object files in an executable or library to have the GNU property + * note to emit it in the created elf file we need to add a note to all + * assembly files that support BTI so the kernel and dynamic linker can + * mark memory used by the file as guarded. + * + * The GNU_PROPERTY_AARCH64_FEATURE_1_VAL macro encodes the combination + * of PAC and BTI that have been enabled. It can be used as follows: + * GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(GNU_PROPERTY_AARCH64_FEATURE_1_VAL); + * + * To use this you need to include for + * GNU_PROPERTY_AARCH64_FEATURE_1_* + */ +#if defined(__ARM_FEATURE_BTI_DEFAULT) +#if defined(__ARM_FEATURE_PAC_DEFAULT) +/* BTI, PAC */ +#define GNU_PROPERTY_AARCH64_FEATURE_1_VAL \ + (GNU_PROPERTY_AARCH64_FEATURE_1_BTI | GNU_PROPERTY_AARCH64_FEATURE_1_PAC) +#else +/* BTI, no PAC */ +#define GNU_PROPERTY_AARCH64_FEATURE_1_VAL \ + (GNU_PROPERTY_AARCH64_FEATURE_1_BTI) +#endif +#elif defined(__ARM_FEATURE_PAC_DEFAULT) +/* No BTI, PAC */ +#define GNU_PROPERTY_AARCH64_FEATURE_1_VAL \ + (GNU_PROPERTY_AARCH64_FEATURE_1_PAC) +#else +/* No BTI, no PAC */ +#define GNU_PROPERTY_AARCH64_FEATURE_1_VAL 0 +#endif + +#if defined(__ARM_FEATURE_BTI_DEFAULT) || defined(__ARM_FEATURE_PAC_DEFAULT) +#define GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(x) \ + .section .note.gnu.property, "a"; \ + .balign 8; \ + .4byte 0x4; /* sizeof(vendor) */ \ + .4byte 0x10; /* sizeof(note data) */ \ + .4byte (NT_GNU_PROPERTY_TYPE_0); \ + .asciz "GNU"; /* vendor */ \ + /* note data: */ \ + .4byte (GNU_PROPERTY_AARCH64_FEATURE_1_AND); \ + .4byte 0x4; /* sizeof(property) */ \ + .4byte (x); /* property */ \ + .4byte 0 +#else +#define GNU_PROPERTY_AARCH64_FEATURE_1_NOTE(x) +#endif + #endif /* _MACHINE_ASM_H_ */