From: George Spelvin <lkml@sdf.org>
To: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
linux-arm-kernel@lists.infradead.org,
George Spelvin <lkml@sdf.org>
Subject: [PATCH v2] arm64: ptr auth: Use get_random_u64 instead of _bytes
Date: Tue, 31 Mar 2020 15:44:12 GMT [thread overview]
Message-ID: <202003311544.02VFiClP011630@sdf.org> (raw)
get_random_bytes() is approximately 4x the cost of two
get_random_u64() calls, because the former implements
anti-backtracking.
Because these are authentication keys, useless to an attacker
as soon as the kernel stops using them, there is no security
benefit from anti-backtracking.
Signed-off-by: George Spelvin <lkml@sdf.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
---
v2: Took out all the clever bitmap-based stuff and made a simple
boring helper function to replace get_random_bytes(&key, 16).
arch/arm64/include/asm/pointer_auth.h | 16 +++++++++++-----
arch/arm64/kernel/pointer_auth.c | 10 +++++-----
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/arch/arm64/include/asm/pointer_auth.h b/arch/arm64/include/asm/pointer_auth.h
index 7a24bad1a58b8..1a4590d05785e 100644
--- a/arch/arm64/include/asm/pointer_auth.h
+++ b/arch/arm64/include/asm/pointer_auth.h
@@ -30,17 +30,23 @@ struct ptrauth_keys {
struct ptrauth_key apga;
};
+static inline void __ptrauth_key_init(struct ptrauth_key *key)
+{
+ key->lo = get_random_u64();
+ key->hi = get_random_u64();
+}
+
static inline void ptrauth_keys_init(struct ptrauth_keys *keys)
{
if (system_supports_address_auth()) {
- get_random_bytes(&keys->apia, sizeof(keys->apia));
- get_random_bytes(&keys->apib, sizeof(keys->apib));
- get_random_bytes(&keys->apda, sizeof(keys->apda));
- get_random_bytes(&keys->apdb, sizeof(keys->apdb));
+ __ptrauth_key_init(&keys->apia);
+ __ptrauth_key_init(&keys->apib);
+ __ptrauth_key_init(&keys->apda);
+ __ptrauth_key_init(&keys->apdb);
}
if (system_supports_generic_auth())
- get_random_bytes(&keys->apga, sizeof(keys->apga));
+ __ptrauth_key_init(&keys->apga);
}
#define __ptrauth_key_install(k, v) \
diff --git a/arch/arm64/kernel/pointer_auth.c b/arch/arm64/kernel/pointer_auth.c
index c507b584259d0..05e2e3d174010 100644
--- a/arch/arm64/kernel/pointer_auth.c
+++ b/arch/arm64/kernel/pointer_auth.c
@@ -31,15 +31,15 @@ int ptrauth_prctl_reset_keys(struct task_struct *tsk, unsigned long arg)
return -EINVAL;
if (arg & PR_PAC_APIAKEY)
- get_random_bytes(&keys->apia, sizeof(keys->apia));
+ __ptrauth_key_init(&keys->apia);
if (arg & PR_PAC_APIBKEY)
- get_random_bytes(&keys->apib, sizeof(keys->apib));
+ __ptrauth_key_init(&keys->apib);
if (arg & PR_PAC_APDAKEY)
- get_random_bytes(&keys->apda, sizeof(keys->apda));
+ __ptrauth_key_init(&keys->apda);
if (arg & PR_PAC_APDBKEY)
- get_random_bytes(&keys->apdb, sizeof(keys->apdb));
+ __ptrauth_key_init(&keys->apdb);
if (arg & PR_PAC_APGAKEY)
- get_random_bytes(&keys->apga, sizeof(keys->apga));
+ __ptrauth_key_init(&keys->apga);
ptrauth_keys_switch(keys);
--
2.26.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2020-03-31 15:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-31 15:44 George Spelvin [this message]
2020-03-31 16:22 ` [PATCH v2] arm64: ptr auth: Use get_random_u64 instead of _bytes Mark Rutland
2020-04-28 12:58 ` Will Deacon
2020-05-04 21:07 ` Will Deacon
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=202003311544.02VFiClP011630@sdf.org \
--to=lkml@sdf.org \
--cc=catalin.marinas@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=will@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.