From: Dave Martin <Dave.Martin@arm.com>
To: Mark Rutland <mark.rutland@arm.com>
Cc: linux-arch@vger.kernel.org, arnd@arndb.de, jiong.wang@arm.com,
marc.zyngier@arm.com, catalin.marinas@arm.com, yao.qi@arm.com,
will.deacon@arm.com, linux-kernel@vger.kernel.org,
kernel-hardening@lists.openwall.com,
kvmarm@lists.cs.columbia.edu,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 01/11] arm64: docs: describe ELF hwcaps
Date: Fri, 21 Jul 2017 18:05:24 +0100 [thread overview]
Message-ID: <20170721170523.GD1538@e103592.cambridge.arm.com> (raw)
In-Reply-To: <1500480092-28480-2-git-send-email-mark.rutland@arm.com>
On Wed, Jul 19, 2017 at 05:01:22PM +0100, Mark Rutland wrote:
> We don't document our ELF hwcaps, leaving developers to interpret them
> according to hearsay, guesswork, or (in exceptional cases) inspection of
> the current kernel code.
>
> This is less than optimal, and it would be far better if we had some
> definitive description of each of the ELF hwcaps that developers could
> refer to.
>
> This patch adds a document describing the (native) arm64 ELF hwcaps.
Minor nit: what do the hwcaps have to do with ELF really? Can we just
call them "hwcaps"?
I'm not sure of the history here.
> Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Dave Martin <Dave.Martin@arm.com>
> Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
> Cc: Will Deacon <will.deacon@arm.com>
> ---
> Documentation/arm64/elf_hwcaps.txt | 133 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 133 insertions(+)
> create mode 100644 Documentation/arm64/elf_hwcaps.txt
>
> diff --git a/Documentation/arm64/elf_hwcaps.txt b/Documentation/arm64/elf_hwcaps.txt
> new file mode 100644
> index 0000000..7bc2921
> --- /dev/null
> +++ b/Documentation/arm64/elf_hwcaps.txt
> @@ -0,0 +1,133 @@
> +ARM64 ELF hwcaps
> +================
> +
> +This document describes the usage and semantics of the arm64 ELF hwcaps.
> +
> +
> +1. Introduction
> +---------------
> +
> +Some hardware or software features are only available on some CPU
> +implementations, and/or with certain kernel configurations, but have no
> +architected discovery mechanism available to userspace code at EL0. The
> +kernel exposes the presence of these features to userspace through a set
> +of flags called hwcaps, exposed in the auxilliary vector.
> +
> +Userspace software can test for features by acquiring the AT_HWCAP entry
> +of the auxilliary vector, and testing whether the relevant flags are
> +set, e.g.
> +
> +bool floating_point_is_present(void)
> +{
> + unsigned long hwcaps = getauxval(AT_HWCAP);
> + if (hwcaps & HWCAP_FP)
> + return true;
> +
> + return false;
> +}
> +
> +Where software relies on a feature described by a hwcap, it should check
> +the relevant hwcap flag to verify that the feature is present before
> +attempting to make use of the feature.
> +
> +Features cannot be probed reliably through other means. When a feature
> +is not available, attempting to use it may result in unpredictable
This says that features cannot be probed reliably via the (emulated) ID
registers available with HWCAP_CPUID.
So, what use is the ID register emulation?
For each of hwcaps and cpuid, a particular feature may be reported as
present (y), absent (n), or not described at all (x):
hwcap> x n y
cpuid:
x N N Y
n N N
y Y Y
I've filled in the straightforward cases, where software may (Y) or must
not (N) use the feature.
In the cases left blank, hwcap and cpuid disagree.
Are we confident that should never be observed -- i.e., it's a kernel
bug if seen? If so, we can fill Ys in there. But we need to be clear
about cases where the hwcap doesn't mean exactly the same as the
corresponding CPUID feature. The hwcap may tell software it can assume
that certain kernel ABI extensions related to that CPU feature are
available for example.
This also affects how HWCAP_CPUID is described below.
[...]
Cheers
---Dave
WARNING: multiple messages have this Message-ID (diff)
From: Dave Martin <Dave.Martin@arm.com>
To: Mark Rutland <mark.rutland@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org,
arnd@arndb.de, jiong.wang@arm.com, marc.zyngier@arm.com,
catalin.marinas@arm.com, yao.qi@arm.com, suzuki.poulose@arm.com,
will.deacon@arm.com, linux-kernel@vger.kernel.org,
kernel-hardening@lists.openwall.com,
kvmarm@lists.cs.columbia.edu, christoffer.dall@linaro.org
Subject: Re: [PATCH 01/11] arm64: docs: describe ELF hwcaps
Date: Fri, 21 Jul 2017 18:05:24 +0100 [thread overview]
Message-ID: <20170721170523.GD1538@e103592.cambridge.arm.com> (raw)
Message-ID: <20170721170524.2Qk5uEba--fsCxk8mNEuLP9MPIzkJaO9cLG2i08kSyM@z> (raw)
In-Reply-To: <1500480092-28480-2-git-send-email-mark.rutland@arm.com>
On Wed, Jul 19, 2017 at 05:01:22PM +0100, Mark Rutland wrote:
> We don't document our ELF hwcaps, leaving developers to interpret them
> according to hearsay, guesswork, or (in exceptional cases) inspection of
> the current kernel code.
>
> This is less than optimal, and it would be far better if we had some
> definitive description of each of the ELF hwcaps that developers could
> refer to.
>
> This patch adds a document describing the (native) arm64 ELF hwcaps.
Minor nit: what do the hwcaps have to do with ELF really? Can we just
call them "hwcaps"?
I'm not sure of the history here.
> Signed-off-by: Mark Rutland <mark.rutland@arm.com>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Dave Martin <Dave.Martin@arm.com>
> Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
> Cc: Will Deacon <will.deacon@arm.com>
> ---
> Documentation/arm64/elf_hwcaps.txt | 133 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 133 insertions(+)
> create mode 100644 Documentation/arm64/elf_hwcaps.txt
>
> diff --git a/Documentation/arm64/elf_hwcaps.txt b/Documentation/arm64/elf_hwcaps.txt
> new file mode 100644
> index 0000000..7bc2921
> --- /dev/null
> +++ b/Documentation/arm64/elf_hwcaps.txt
> @@ -0,0 +1,133 @@
> +ARM64 ELF hwcaps
> +================
> +
> +This document describes the usage and semantics of the arm64 ELF hwcaps.
> +
> +
> +1. Introduction
> +---------------
> +
> +Some hardware or software features are only available on some CPU
> +implementations, and/or with certain kernel configurations, but have no
> +architected discovery mechanism available to userspace code at EL0. The
> +kernel exposes the presence of these features to userspace through a set
> +of flags called hwcaps, exposed in the auxilliary vector.
> +
> +Userspace software can test for features by acquiring the AT_HWCAP entry
> +of the auxilliary vector, and testing whether the relevant flags are
> +set, e.g.
> +
> +bool floating_point_is_present(void)
> +{
> + unsigned long hwcaps = getauxval(AT_HWCAP);
> + if (hwcaps & HWCAP_FP)
> + return true;
> +
> + return false;
> +}
> +
> +Where software relies on a feature described by a hwcap, it should check
> +the relevant hwcap flag to verify that the feature is present before
> +attempting to make use of the feature.
> +
> +Features cannot be probed reliably through other means. When a feature
> +is not available, attempting to use it may result in unpredictable
This says that features cannot be probed reliably via the (emulated) ID
registers available with HWCAP_CPUID.
So, what use is the ID register emulation?
For each of hwcaps and cpuid, a particular feature may be reported as
present (y), absent (n), or not described at all (x):
hwcap> x n y
cpuid:
x N N Y
n N N
y Y Y
I've filled in the straightforward cases, where software may (Y) or must
not (N) use the feature.
In the cases left blank, hwcap and cpuid disagree.
Are we confident that should never be observed -- i.e., it's a kernel
bug if seen? If so, we can fill Ys in there. But we need to be clear
about cases where the hwcap doesn't mean exactly the same as the
corresponding CPUID feature. The hwcap may tell software it can assume
that certain kernel ABI extensions related to that CPU feature are
available for example.
This also affects how HWCAP_CPUID is described below.
[...]
Cheers
---Dave
next prev parent reply other threads:[~2017-07-21 17:05 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-19 16:01 [PATCH 00/11] ARMv8.3 pointer authentication userspace support Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-19 16:01 ` [PATCH 01/11] arm64: docs: describe ELF hwcaps Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-21 17:05 ` Dave Martin [this message]
2017-07-21 17:05 ` Dave Martin
2017-07-24 10:47 ` Suzuki K Poulose
2017-08-03 14:49 ` Catalin Marinas
2017-08-03 14:49 ` Catalin Marinas
2017-08-03 17:57 ` Kees Cook
2017-08-03 17:57 ` Kees Cook
2017-07-19 16:01 ` [PATCH 02/11] asm-generic: mm_hooks: allow hooks to be overridden individually Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-19 16:01 ` [PATCH 03/11] arm64: add pointer authentication register bits Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-19 16:01 ` [PATCH 04/11] arm64/cpufeature: add ARMv8.3 id_aa64isar1 bits Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-24 10:54 ` Suzuki K Poulose
2017-07-19 16:01 ` [PATCH 05/11] arm64/cpufeature: detect pointer authentication Mark Rutland
2017-07-19 16:01 ` [PATCH 06/11] arm64: Don't trap host pointer auth use to EL2 Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-24 10:37 ` Dave Martin
2017-07-19 16:01 ` [PATCH 07/11] arm64: add basic pointer authentication support Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-25 15:26 ` Dave Martin
2017-07-25 15:26 ` Dave Martin
2017-08-11 7:46 ` Yao Qi
2017-08-11 8:45 ` Dave Martin
2017-08-11 8:45 ` Dave Martin
2017-07-19 16:01 ` [PATCH 08/11] arm64: expose user PAC bit positions via ptrace Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-19 16:01 ` [PATCH 09/11] arm64/kvm: preserve host HCR_EL2 value Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-08-01 11:00 ` Christoffer Dall
2017-08-01 11:00 ` Christoffer Dall
2017-07-19 16:01 ` [PATCH 10/11] arm64/kvm: context-switch ptrauth registers Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-08-01 11:00 ` Christoffer Dall
2017-08-01 11:00 ` Christoffer Dall
2017-08-01 14:26 ` Mark Rutland
2017-08-01 14:32 ` Will Deacon
2017-08-01 17:02 ` Christoffer Dall
2017-07-19 16:01 ` [PATCH 11/11] arm64: docs: document pointer authentication Mark Rutland
2017-07-19 16:01 ` Mark Rutland
2017-07-21 17:05 ` [PATCH 00/11] ARMv8.3 pointer authentication userspace support Dave Martin
2017-07-21 17:05 ` Dave Martin
2017-07-25 12:06 ` Mark Rutland
2017-07-25 12:06 ` Mark Rutland
2017-07-25 14:00 ` Jiong Wang
2017-08-11 11:29 ` Mark Rutland
2017-07-24 11:52 ` Yao Qi
2017-07-25 11:32 ` Yao Qi
2017-07-25 11:32 ` Yao Qi
2017-07-25 16:01 ` Mark Rutland
2017-07-25 14:12 ` [kernel-hardening] " Li Kun
2017-07-25 14:12 ` Li Kun
2017-07-25 15:12 ` Mark Rutland
2017-07-25 15:12 ` Mark Rutland
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=20170721170523.GD1538@e103592.cambridge.arm.com \
--to=dave.martin@arm.com \
--cc=arnd@arndb.de \
--cc=catalin.marinas@arm.com \
--cc=jiong.wang@arm.com \
--cc=kernel-hardening@lists.openwall.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=mark.rutland@arm.com \
--cc=will.deacon@arm.com \
--cc=yao.qi@arm.com \
/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;
as well as URLs for NNTP newsgroup(s).