From: Junyoung Jang <graypanda.inzag@gmail.com>
To: "Marek Behún" <kabel@kernel.org>
Cc: Junyoung Jang <graypanda.inzag@gmail.com>,
David Howells <dhowells@redhat.com>,
Jarkko Sakkinen <jarkko@kernel.org>,
keyrings@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] platform: cznic: avoid slab-out-of-bounds write on short Turris key reads
Date: Tue, 10 Nov 2026 06:26:31 +0900 [thread overview]
Message-ID: <20261109212632.2437881-1-graypanda.inzag@gmail.com> (raw)
For 0 < buflen <= PAGE_SIZE, keyctl_read_key() allocates a temporary
kernel buffer of size buflen via kvmalloc() and passes it to the key
type's .read() callback. Only after the callback returns does it check
whether the returned required length exceeds buflen.
turris_signing_key_read() clamps buflen when it exceeds
subtype->public_key_size, but ignores the clamped value and
unconditionally passes subtype->public_key_size (33 or 67 bytes) to
memcpy(). As a result, calling KEYCTL_READ with a smaller non-zero
buffer (e.g., buflen=1) writes past the end of the temporary buffer,
triggering a kernel heap slab-out-of-bounds write.
Per the key_type .read() contract, only copy the public key when the
supplied buffer is large enough to hold it, and always return the
required size.
Fixes: 0b28b7080ef5 ("platform: cznic: Add keyctl helpers for Turris platform")
Signed-off-by: Junyoung Jang <graypanda.inzag@gmail.com>
---
drivers/platform/cznic/turris-signing-key.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/platform/cznic/turris-signing-key.c b/drivers/platform/cznic/turris-signing-key.c
index 3827178565e2..af414e236de2 100644
--- a/drivers/platform/cznic/turris-signing-key.c
+++ b/drivers/platform/cznic/turris-signing-key.c
@@ -46,12 +46,8 @@ static long turris_signing_key_read(const struct key *key, char *buffer, size_t
if (!subtype)
return -EIO;
- if (buffer) {
- if (buflen > subtype->public_key_size)
- buflen = subtype->public_key_size;
-
+ if (buffer && buflen >= subtype->public_key_size)
memcpy(buffer, subtype->get_public_key(key), subtype->public_key_size);
- }
return subtype->public_key_size;
}
--
2.43.0
reply other threads:[~2026-11-09 21:26 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20261109212632.2437881-1-graypanda.inzag@gmail.com \
--to=graypanda.inzag@gmail.com \
--cc=dhowells@redhat.com \
--cc=jarkko@kernel.org \
--cc=kabel@kernel.org \
--cc=keyrings@vger.kernel.org \
--cc=linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®