From: Daniel Zahka <daniel.zahka@gmail.com>
To: Jakub Kicinski <kuba@kernel.org>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH] netdevsim: psp: reset spi on key rotation and check for exhaustion on alloc
Date: Fri, 15 May 2026 10:08:52 -0700 [thread overview]
Message-ID: <20260515-spi-handle-v1-1-debf8cb467cb@gmail.com> (raw)
The PSP spec states that the lower 31b of the SPI need to be
non-zero. Though not in the spec, I think it is reasonable to reset
the lower 31b of the spi space after a key rotation, and to also
decline to generate session keys when the lower 31b saturate.
Assisted-by: Claude:claude-opus-4.7
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
---
This commit was originally part of the series:
https://lore.kernel.org/netdev/20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com/
But it stands alone, so I am submitting individually first.
---
drivers/net/netdevsim/psp.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c
index 6936ecb8173e..c6000ebc6bc8 100644
--- a/drivers/net/netdevsim/psp.c
+++ b/drivers/net/netdevsim/psp.c
@@ -132,14 +132,15 @@ nsim_rx_spi_alloc(struct psp_dev *psd, u32 version,
struct netlink_ext_ack *extack)
{
struct netdevsim *ns = psd->drv_priv;
- unsigned int new;
int i;
- new = ++ns->psp.spi & PSP_SPI_KEY_ID;
- if (psd->generation & 1)
- new |= PSP_SPI_KEY_PHASE;
+ /* Check if incrementing the spi would change the phase bit */
+ if ((ns->psp.spi & PSP_SPI_KEY_ID) == PSP_SPI_KEY_ID) {
+ NL_SET_ERR_MSG(extack, "SPI space exhausted");
+ return -ENOSPC;
+ }
- assoc->spi = cpu_to_be32(new);
+ assoc->spi = cpu_to_be32(++ns->psp.spi);
assoc->key[0] = psd->generation;
for (i = 1; i < PSP_MAX_KEY; i++)
assoc->key[i] = ns->psp.spi + i;
@@ -162,6 +163,16 @@ static int nsim_assoc_add(struct psp_dev *psd, struct psp_assoc *pas,
static int nsim_key_rotate(struct psp_dev *psd, struct netlink_ext_ack *extack)
{
+ struct netdevsim *ns = psd->drv_priv;
+
+ /* Flip key phase and reset SPI to 0 within that space
+ * (will be pre-incremented, as 0 is an invalid SPI).
+ */
+ if (ns->psp.spi & PSP_SPI_KEY_PHASE)
+ ns->psp.spi = 0;
+ else
+ ns->psp.spi = PSP_SPI_KEY_PHASE;
+
return 0;
}
---
base-commit: 822d4a8e390a08ccfaf2abb347ae670b230b196f
change-id: 20260515-spi-handle-8be9eb842667
Best regards,
--
Daniel Zahka <daniel.zahka@gmail.com>
next reply other threads:[~2026-05-15 17:08 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-15 17:08 Daniel Zahka [this message]
2026-05-15 20:57 ` [PATCH] netdevsim: psp: reset spi on key rotation and check for exhaustion on alloc Willem de Bruijn
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=20260515-spi-handle-v1-1-debf8cb467cb@gmail.com \
--to=daniel.zahka@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=willemdebruijn.kernel@gmail.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 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.