From nobody Fri Oct 20 16:04:54 2023 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 4SBqD62TkMz4xxHD; Fri, 20 Oct 2023 16:04:54 +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 4SBqD61wyDz3Jjd; Fri, 20 Oct 2023 16:04:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1697817894; 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=CRdecdeUeLQZoynh2P3CuGa2uAfzOMo9Umb1yYNZlAw=; b=oloEUYQHthT5TD8ZsqOGSUYdB+kab9YaT7krwqiE3d0G9GIf0YiRb958otfE5dyTpWUsv6 ftJm1SKmGlv87lfJYE4vXF46WkQ+j4WT9J0GbJGu6G4zbH5FMt74qVYqnwnNTomcKw7P4C ziCX6RZo/pT9og2ybDGSRw94Dp9aaZ6zDfycR4zgkAfFnBBoj0r8fbdJxlVuav0IUVNKjV eupqaBf5rbeuNzW6/LjuhaIA+NYY2Gixxv+Z+j584atyhkvLhO2m3hvWc3zKOKbC5J59gf Ma9yF0lmm+ybBvDgkdjOJ1A8yC5D/iCRDhduJgUoyXcQVUCp3L0IRen5A7Tjig== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1697817894; a=rsa-sha256; cv=none; b=dPVl8tWOpgqUX2LLgB1pOzjhHGF1oENcZzrxAcyrK0QmNEMEQr/pk7W77WO7Ht8eLA7ZNA /EsVgPOoYzRhnUIt6kEtqALe0wIni/t7kNBhotHFiScuJmrJXhAfhosbtY1KHyO850Cmkq nGpwBO7qEGMi5gCu/cU5orH7uBlnk2/CueOlcZAiUyBtBb7g6eaMQrGYfXVnH8HZC4gh3h jP3yudiFBlPuxW3VKDPlFIGPrLx32zjRDeaH+w0NeTIPyUaewO7iEo5+7n3llfUEtUtn/c rsBt/pyX30UyoaT4oUI5tMFoJ/b3Qq+ab3XuimJpWGUD9yi+Wb2in9dU7m3r1A== 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=1697817894; 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=CRdecdeUeLQZoynh2P3CuGa2uAfzOMo9Umb1yYNZlAw=; b=yyAMAOXeCv04qimDsFkueuBKfi2m0uQM72SC7xXkv8YFApnGnV+rJ0cVVJAr80ubBVp29r S+tBrnbLiinG9GKQCS5z9guRijiu1Y0lihzsgf7JwlMINZzIZHyD0I6kkLVltfFy+6CCHx wkuqek1LXJhHVuYlHhm1s7X6emO9rRcDaxNpgQIKStphncqBagGmOF6RPIdMlDAZraEToI Kh6oskPrH0elVGnKXAFB2hGwH2b4whXMqxYgzFHFomFCy8aIbKcJopNAD3PNS2b3lPe5u3 bXyisBKpL9ice5m9Q4q6udG8/k45mYjv1pwXFQIaDMXYyagZxd0Qo4P7uOpSVw== 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 4SBqD60zQYzfN1; Fri, 20 Oct 2023 16:04:54 +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 39KG4s67039369; Fri, 20 Oct 2023 16:04:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 39KG4sKC039366; Fri, 20 Oct 2023 16:04:54 GMT (envelope-from git) Date: Fri, 20 Oct 2023 16:04:54 GMT Message-Id: <202310201604.39KG4sKC039366@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 82597d2102a0 - main - 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/main X-Git-Reftype: branch X-Git-Commit: 82597d2102a02c4e9e9355717c32867d34b77ef0 Auto-Submitted: auto-generated The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=82597d2102a02c4e9e9355717c32867d34b77ef0 commit 82597d2102a02c4e9e9355717c32867d34b77ef0 Author: Andrew Turner AuthorDate: 2023-10-10 13:00:59 +0000 Commit: Andrew Turner CommitDate: 2023-10-20 15:59:25 +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 --- 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 6ebfca6eaf0c..da3c3df5f647 100644 --- a/sys/arm64/include/asm.h +++ b/sys/arm64/include/asm.h @@ -142,6 +142,58 @@ #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_ */ #endif /* !__arm__ */