From nobody Sat Jun 13 07:50:59 2026 Received: from mail-ot1-f54.google.com (mail-ot1-f54.google.com [209.85.210.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC9493F54C3 for ; Fri, 8 May 2026 14:53:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252041; cv=none; b=fXXXZTvxYmGd9BGTpcTeICMmIx3Zjv5emXEsBvcezQiIzG1NzA1LmdhTa2PRBoY8wilH9gxQgpp8QA+KhG5I6RF0RIQJ1GE2kbVTsg1kBA+VwBb3WvDOSIV8FzkYAz2wSVW3uucuqWMfV7+lyWRPWU6lfnd+qdN+7/ZVY4nppUI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252041; c=relaxed/simple; bh=Imh165vQ/goc4NSzO7qYhOZsclYavVhpTt2KZ2NZzGU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BUqiMkBy3spjTU9gDgf6qIYCwgjt3aCKw05id/KsHyJ7PYQOTTxgotDYGw8SFJWPEwOh63HtE4MGSFnYSw2XPTd8mba4QUobEe2PX3UeZFRnscV/DrfqtWIXLM+99G76sGCQcdTX3nvCmovyVxQKS8+zv7Y5tPjtkYfASvqYaso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BoptMYnT; arc=none smtp.client-ip=209.85.210.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BoptMYnT" Received: by mail-ot1-f54.google.com with SMTP id 46e09a7af769-7dcd89701acso1879338a34.1 for ; Fri, 08 May 2026 07:53:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778252038; x=1778856838; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=p3yf/0EioU1Vkg8reIOYdru1mIh+jCd1PePb15OVlfI=; b=BoptMYnT3XYVkaWsOQkveikubxxOkLGFxXnwb1hS8/9I65AJRK41p0CtgtKfNESV4p dVYSRpA9+D0VBkGMClqYAKOdTiDSzEyz46ELu0h6BfjhK+GCi5xo1RADXLuCPsOLT0nl WDKEPhGSNckA5+qNB4gPwr/CGgZ6b3HufZpLsrGDfjz0jU/xzHBZreaQGArqSACe88oM DewzTbDpnIxMYuh9TMwFRUxsxX7AxWyXAgcvRTCxA3SatEYoq6o1qj1eebWsSSliKgAH 1ocsTbBi9Iff7ppNQEkuehCjM2XwOiapTpmb0a6HuqprytckWJDOCRZ7TLqjKPILzDFO 42sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778252038; x=1778856838; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=p3yf/0EioU1Vkg8reIOYdru1mIh+jCd1PePb15OVlfI=; b=dbUdxfszDQEtGdm8sbOw7/NReG900JBMWpL7vU/4JUU9/a51/giFaFYunFknf/WE5x lk6PLyZY749sLONB13SsugKBzplk7ndi/CkRzWQj4IzoIYfygsTDbnFutB6eqh2wAWsK XPYMehQGMyTXAGQl+8u2rNGJSE9TIRk4+gPyHlHAPZeiCBKdLqPf2uQwqEpszBoy0nre sdw3so6XFtrougfPh1NZDSRdJ3coaJSywpUsnNBoetqWmttirrKwjowyuYKCL7Yh3LdO LqXvDSI5T+zlg1Qugz/48O60HKIPuoV673IPOmbhSbfy+RVg5KZWguW1TWMb4hDOqQPW 4nqA== X-Forwarded-Encrypted: i=1; AFNElJ+HcKfJ8LckrltDnpPDVqOsj3Dmi8Spv1kVYPZmBnyrXDz0AriHA4eFt1B5b/9AviQTecIsosHRmRM4bSU=@vger.kernel.org X-Gm-Message-State: AOJu0YxtKBMd9a1Fsv79F3Dj88A4a0e8B0rXniQLPZDhbViAn8VT8bm5 42iviyRY2aVKfOkgrnkd7g+fNxPN/cejyNr45u1ckLb0XajgUfgPKNQx X-Gm-Gg: AeBDievVtVTgxz38gPGgOozPJVQDau1gPDbMWNc9rUXKsRopeKLSZJtT7u85CxQxr69 XGLjz/FFKk7seH90g+FnwQwzrEckc7Yi3ovNvxzMZlQTzBkbW+PwTOy/A7RiSnTSV7inmnkZAFl jDowt15tbLpzg9dAaZN/THr8UiXkYjD7+9XyDpcMpIN9P0xj3hsqzIjAcApSNrK/4NJMhXLHIoh UOCjrlmbSCyfxlleoYK8v4BKhMRbNc/Q8qKPtOsxRzFzeSYB9gbkKQvTLq5zxoAj75U5i+EH+5B 01ebsHjwzJJEvqqT60TlLKA66HqIdEd2KojR6N6dbPl6AxXq7k3TxROBlWAl3wSC2aknPpG8eC8 gbSQcCvWNm1+OHQT2TRkDpLM3LKBpwiDfGf3xidKGhHOhRwklSTW0J0HZXWwVnPdimIM9mZ78qo Bbe8j/3csfDOa4idJraBL6+H1qx8C2YSpze3K5q7QdIm9hb3fuPZpw X-Received: by 2002:a05:6820:3106:b0:696:924d:2fec with SMTP id 006d021491bc7-69998d5e1b6mr6025442eaf.56.1778252038577; Fri, 08 May 2026 07:53:58 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:52::]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-69b25c76cc4sm1213298eaf.6.2026.05.08.07.53.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 07:53:58 -0700 (PDT) From: Daniel Zahka Date: Fri, 08 May 2026 07:53:44 -0700 Subject: [PATCH net-next 1/6] netdevsim: psp: reset spi on key rotation and check for exhaustion on alloc Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-nsim-psp-crypto-v1-1-4b50ed09b794@gmail.com> References: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> In-Reply-To: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> To: Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.13.0 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 --- drivers/net/netdevsim/psp.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c index 6936ecb8173e..5073bda60883 100644 --- a/drivers/net/netdevsim/psp.c +++ b/drivers/net/netdevsim/psp.c @@ -132,14 +132,14 @@ nsim_rx_spi_alloc(struct psp_dev *psd, u32 version, struct netlink_ext_ack *extack) { struct netdevsim *ns =3D psd->drv_priv; - unsigned int new; int i; =20 - new =3D ++ns->psp.spi & PSP_SPI_KEY_ID; - if (psd->generation & 1) - new |=3D PSP_SPI_KEY_PHASE; + if ((ns->psp.spi ^ (ns->psp.spi + 1)) & PSP_SPI_KEY_PHASE) { + NL_SET_ERR_MSG(extack, "SPI space exhausted"); + return -ENOSPC; + } =20 - assoc->spi =3D cpu_to_be32(new); + assoc->spi =3D cpu_to_be32(++ns->psp.spi); assoc->key[0] =3D psd->generation; for (i =3D 1; i < PSP_MAX_KEY; i++) assoc->key[i] =3D ns->psp.spi + i; @@ -162,6 +162,10 @@ static int nsim_assoc_add(struct psp_dev *psd, struct = psp_assoc *pas, =20 static int nsim_key_rotate(struct psp_dev *psd, struct netlink_ext_ack *ex= tack) { + struct netdevsim *ns =3D psd->drv_priv; + + ns->psp.spi =3D (ns->psp.spi & PSP_SPI_KEY_PHASE) ^ PSP_SPI_KEY_PHASE; + return 0; } =20 --=20 2.52.0 From nobody Sat Jun 13 07:50:59 2026 Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 57E943F7A86 for ; Fri, 8 May 2026 14:54:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252042; cv=none; b=D2SJdRML6fRtEaBrOUCI5Om2OrWqxOrB+qgyUJIglQ28NCqXhBpgCLTz93yNsd/p6348kdvtD9PSmsSGktfWU3ep6rkI5yvjoWoX1MmR/QqNo0TrM+2qAGoTXGjvRnpADzD0KMxUVHi1//z6T5I0lBjXcjQbLzVyYnw54rghn8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252042; c=relaxed/simple; bh=Id8y3cDF8b1Tt5vK2dt0u5UkdzJtwzOfVSavA6SQ85A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LPKNC3RP5JusCduXwrlZx9kDvXMJBibAIs62vpK3YASAn/SIRJLCyOvJngb3H54iilkQRtKpwCwX2Ab2aCDS8FZsWXu6kObGpXRgLKtpcvhIA8dXA7ZkROuUa3EjlQrW94648irypi0471I5brCBD4eJyn54Eu5W/6SQwetujDI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=W/PgGArx; arc=none smtp.client-ip=209.85.210.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="W/PgGArx" Received: by mail-ot1-f41.google.com with SMTP id 46e09a7af769-7dea20cf21aso1918933a34.1 for ; Fri, 08 May 2026 07:54:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778252040; x=1778856840; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+GeLFNXv42TuP6KRLLxjXq2DNl7n0yfqf6KcI9MFRQo=; b=W/PgGArx/Gpk0rxhJWwV9Nr+YCeyjqriEyTlggWQNPuyShZNSg8BzBOuFMtB9M4EYY 90A1wJvCE+1QichTfTf9Q2Yte1RdQ5tGCNqM7j6n79ik9a/hvZRJ9Rr3EaggvIoA7t7T T7xsz3oh5xsLVbGBPmdRicqB+d/yZBKD8tYVv2ctZfkcGngV8tJYeUwokRAA57K1Fnbh 927Ln4xh3ov/d0RNl2Lt2O7UvJ/eGJqMKORwGRgZncq9Ob8rV0ceESyu6ZWZ1ZPzvImI 6RlqhDfPaWOzq3hq208w0m7Hsm6QhlKyHy8cEKipol34KmUCkyWcKe68HHTjwiQ3yK2Y 1Klw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778252040; x=1778856840; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=+GeLFNXv42TuP6KRLLxjXq2DNl7n0yfqf6KcI9MFRQo=; b=f2KpUqaLNjfswDNv8dOHKYqOURKLVxPKEWbVlZTbjTYzsxQA70dZR9MvCtWQdqiSPA 2tYaa+Shzgv9CIEZ17HmqAtQnYoaVTrx/kP9clP56L6jTTTrVpnJcLQUDGImWaetVyRA GbCxW2n+0eWttlko8uY5k0steSNsJvO83/E1FDTGE7sZU9PdmPg8Uft87lCXGPkKZaOe Wqe/Rernzy+XXPde3u0tLkRTm+O3OhodYb1SN1k99DrlzXMdlQLuH4lzSFMOyDOBV74G 0AVh+inj6qW4jIR3zNMdF+jmT1ymA9LHNWoVBZjz/522w+saohJbFCWXMvwu9y8njA6l qcDA== X-Forwarded-Encrypted: i=1; AFNElJ/w+InE/2PfzuLqxfIAIJeE45QjPzCyJJ45uVsSj7yTTIckvTvyrlgWSt2XzfS4UcRhOG3ONzb1m5J5Aa0=@vger.kernel.org X-Gm-Message-State: AOJu0YzHAIecYjL72WZIJtG86gOrn54/KSa9y+NeW3z8ig8KUk1EPRhn QtvvR++XBZTgX+vSa9lGaqFLsqvvKGw2X/qbZA0vlhAF3v4UcSsa9XjD X-Gm-Gg: AeBDievw0WJ8Aq0uT2oQKGqEDV3fS/jJ2sHYtkrb4TgIk1sFjVahH7nlAgZ3uS/MNRM Be9YEVcnLR388gojaJgUyJZAKhAMVCw4XgTG/bw/wQ8+/IYmXciFm1E7KV5Ve54gZBMzQYKaHZA gqt+wUiEm5W0yeICm4pwqiUqxAKS+mFcPmYFrqoPyGRXYmDsQKP+SRRiyAMaBa1bLOL6E/uAldL +puCdf2SyrezuK8RURuVGPv+PoXH9XKWUIO1NoUKa1uFTbCiAxlGi5vKReEc17kj47q13rtM+Og jHOodoeHVmVyF0oJku1D5CconW3dVCeCOninB/zaRuAhup7HLdGAQrKLYWxIyqDiNzE0NhyZ/mY HBgnBTI1VzCgBpl6NKRx+iJIXJXIv/UR/6JzUHZHzgMgwZiq5OUqABm1XkyN9nHjxlHo79xwvKt ENGvbkwZ0xVlNS1MpTivtmhgQ49mqdYlF/0a3kscfhgFAtV8SFJVwk X-Received: by 2002:a05:6830:a90:b0:7dc:c92d:976d with SMTP id 46e09a7af769-7e1def3f15dmr8500919a34.10.1778252040158; Fri, 08 May 2026 07:54:00 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:4e::]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e367be21f6sm1274509a34.2.2026.05.08.07.53.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 07:53:59 -0700 (PDT) From: Daniel Zahka Date: Fri, 08 May 2026 07:53:45 -0700 Subject: [PATCH net-next 2/6] netdevsim: psp: remove unnecessary UDP checksum computation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-nsim-psp-crypto-v1-2-4b50ed09b794@gmail.com> References: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> In-Reply-To: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> To: Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.13.0 The PSP spec requires the implementations accept 0 checksum in psp-udp header. Let's take advantage of that to trim netdevsim's psp code down. psp_dev_encapsulate() already sets uh->check to 0. Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Daniel Zahka Reviewed-by: Willem de Bruijn --- drivers/net/netdevsim/psp.c | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c index 5073bda60883..75740e2a731f 100644 --- a/drivers/net/netdevsim/psp.c +++ b/drivers/net/netdevsim/psp.c @@ -1,8 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 =20 -#include #include -#include #include #include =20 @@ -81,36 +79,6 @@ nsim_do_psp(struct sk_buff *skb, struct netdevsim *ns, skb->len - skb_inner_transport_offset(skb)); u64_stats_update_end(&ns->psp.syncp); } else { - struct ipv6hdr *ip6h __maybe_unused; - struct iphdr *iph; - struct udphdr *uh; - __wsum csum; - - /* Do not decapsulate. Receive the skb with the udp and psp - * headers still there as if this is a normal udp packet. - * psp_dev_encapsulate() sets udp checksum to 0, so we need to - * provide a valid checksum here, so the skb isn't dropped. - */ - uh =3D udp_hdr(skb); - csum =3D skb_checksum(skb, skb_transport_offset(skb), - ntohs(uh->len), 0); - - switch (skb->protocol) { - case htons(ETH_P_IP): - iph =3D ip_hdr(skb); - uh->check =3D udp_v4_check(ntohs(uh->len), iph->saddr, - iph->daddr, csum); - break; -#if IS_ENABLED(CONFIG_IPV6) - case htons(ETH_P_IPV6): - ip6h =3D ipv6_hdr(skb); - uh->check =3D udp_v6_check(ntohs(uh->len), &ip6h->saddr, - &ip6h->daddr, csum); - break; -#endif - } - - uh->check =3D uh->check ?: CSUM_MANGLED_0; skb->ip_summed =3D CHECKSUM_NONE; } =20 --=20 2.52.0 From nobody Sat Jun 13 07:50:59 2026 Received: from mail-oa1-f41.google.com (mail-oa1-f41.google.com [209.85.160.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC7B73FA5E0 for ; Fri, 8 May 2026 14:54:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252044; cv=none; b=Rh2dQYaWQBMJwfGynz+Ac+7L8+igw7qpdTCjTqmqxBQV1ybTPIvn89ofDht7wE0Ucd9FvvMmEck6sRj2eIoeKlPoPWbpMYh2+4PQgD7DKDQ/uLWqJkL1WyB74fuKZM4N+jK/dVChQuef/8V+JXJ19dJUtKAvBqN/GdYDrq8cM5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252044; c=relaxed/simple; bh=4rUe0GE39WnEOhgpkhyqxnVyQIK5B+AS+6s0cJLDi2s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IGLi1BDZMjJhEUGhmQSqi2OvgryYAgYRBcrPmOs/qpMxoJHZG568eZQiiUAWNUiS0DCo2ZSfm8MxiIFGhqHAOBHfpu2kbluha3yk1epAki/wMAK7o96qQ0qEwflzPS5XzHEj2rwHgbVjBlGBlMo+a8UKYglXwrtb80b5Cfec7Qw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mCGIrpTP; arc=none smtp.client-ip=209.85.160.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mCGIrpTP" Received: by mail-oa1-f41.google.com with SMTP id 586e51a60fabf-4303eb92930so1506777fac.3 for ; Fri, 08 May 2026 07:54:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778252041; x=1778856841; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=edNVxC7/EX13maCPvj5hXjKR9NoEcXJSooB20xW4P3g=; b=mCGIrpTP2qDMUfDehJ2fXUmz30dTunmnu1xKMzGz+a4V93jOjoiQTvmOcmFfSEkt3n GUgKtr4qVyXdiQMbtE4oBmACnNqNcV0uLZOqyNQl0obrPNvoc0p4ZHuvQD9XX6iaTUe9 +I+7XtmdgO+pBT6IJAGhxDtseJipNlhErP/tzOR2FRQH0ndtDgI0c3K3LFR+bchJblV0 XvSONjmEkUjz7mxsfXCnhzwreq1zfG76v9SuJebzmL4qwElnHtcOmX1rJO5OGI8bhbva Woh1xsNt4eRMjVD18oEvmXvKf86pvZsq7IQNS/qqgz0sZKNCu3LafBESS5OdlKPOLJnK WU9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778252041; x=1778856841; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=edNVxC7/EX13maCPvj5hXjKR9NoEcXJSooB20xW4P3g=; b=qUBd8rpKwJtln1m0jLuJXz3meZE7i5mqopGyXDUBNqioLQffsP5u2kaZajvJDlyM9s vmYRyE2f7h1nFNiQXx0Xf41ydBMxFRy4+IThRFBca1cBVf/IT3a5UYstyE997l74FZ+y /f7h8BFdKxRFHS3dynzYOL+5tD6ub5mI3ODBQllNV+zJgtNTY/tCH08SPL2IpWk6RZve wCI7jKZRwGFZEqKhu3xhE3jbJIEuNOCA90AamLJkY09eQYDH6FS/GIlC3oGKGzbvkoqN 9MR6ooZ4Dm0tbnm83Lzh7OqAfZkPYSuO/h8O4QmeYkyRvyYRezItj4RAICuB/mxqwksb p2yg== X-Forwarded-Encrypted: i=1; AFNElJ/Z2jTEje12iTDjKmByQqswov5R4FL17f0ybn2GpynmIaMHR131PGuCRt+bCxVyqI9ro2sohbAmQX6WqAw=@vger.kernel.org X-Gm-Message-State: AOJu0YxwWNRfpCIkCebQAq0Y66nzcBC8vNo7fkCZzTrzJHh+cWWzSS9R DUjlDqsx/MDzv4Z9kWv7oTpE+ADqQxl857ao9yefZOFJ3xMNGuDfm/8Z X-Gm-Gg: AeBDieujHRk74n2TvoPII7+SGSCN7m345GO22oVJ1YVEkRAvmvLfy+S2tRUsKTmG/+Y AfIw1xUOuzhTUuBvJcZJO+zSY32NdifHgzKdt4Gtw7+qw2ypDR/HBkFnpJXErnC5lItGOsIM/I1 Qvu1zMVLNZys55CsGWhQsMtetmSGLuV09SabEPSHs06DyMv+EW6gMum8FGQu9AsVxLt+mzX6hcn nA3Ms6/hsaVhCDlv31b1x3iF2eLnEJFEoqez9f64uLBghI3GT6p1Ew0Xdbibb1vnwrZWJO8rC4D hSTH84xYgGctF6c0VtK9LaNgAcTLEf78XXM0WD61qA3lFbbMUqIsBtk6PMEYO0P2j5/YP21Kcq7 es5l/YatFD0nY12xa+27XQeOyDdV8LLkJBL3CjLtcXao58lgoN11T5yc44DeFuYVETTnH68uN7O Imawau9sNn33wiVfy4aUoBcr/Tj/ytPwyTAl7faT1E45AnGXMUluZZr0oY7h3GvgcoUzmqwmMn0 g== X-Received: by 2002:a05:6870:f617:b0:433:ce4d:c211 with SMTP id 586e51a60fabf-43556b27b5bmr1741882fac.7.1778252041495; Fri, 08 May 2026 07:54:01 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:53::]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-435573e90c1sm1849809fac.16.2026.05.08.07.54.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 07:54:01 -0700 (PDT) From: Daniel Zahka Date: Fri, 08 May 2026 07:53:46 -0700 Subject: [PATCH net-next 3/6] netdevsim: psp: move rx processing into nsim_poll() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-nsim-psp-crypto-v1-3-4b50ed09b794@gmail.com> References: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> In-Reply-To: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> To: Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.13.0 nsim_do_psp() does PSP decap and skb extension creation in the tx path. This has the slightly undesirable property of not allowing the psp rx code to run on PSP packets cooked up in userspace and transmitted on a packet socket from the peer dev (e.g. packetdrill). This commit instead triggers the psp rx path just based on parsing the received skb. The current code relies on a bit of a hack to simulate authentication with the proper key: the peer's psd->generation was placed into the tx key, and during decap used to fill out the extension the packet before being sent up the psp rx path. This commit removes that hack, which creates a transient break in psp.py test cases that rely on this behavior (e.g. data_send_bad_key). Subsequent commits which introduce real aes-gcm crypto will restore the correct behavior. Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Daniel Zahka --- drivers/net/netdevsim/netdev.c | 18 ++--- drivers/net/netdevsim/netdevsim.h | 14 ++-- drivers/net/netdevsim/psp.c | 143 ++++++++++++++++++++++++++--------= ---- 3 files changed, 113 insertions(+), 62 deletions(-) diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c index a750768912b5..9c0db7b91fd6 100644 --- a/drivers/net/netdevsim/netdev.c +++ b/drivers/net/netdevsim/netdev.c @@ -103,19 +103,13 @@ static int nsim_napi_rx(struct net_device *tx_dev, st= ruct net_device *rx_dev, static int nsim_forward_skb(struct net_device *tx_dev, struct net_device *rx_dev, struct sk_buff *skb, - struct nsim_rq *rq, - struct skb_ext *psp_ext) + struct nsim_rq *rq) { int ret; =20 ret =3D __dev_forward_skb(rx_dev, skb); - if (ret) { - if (psp_ext) - __skb_ext_put(psp_ext); + if (ret) return ret; - } - - nsim_psp_handle_ext(skb, psp_ext); =20 return nsim_napi_rx(tx_dev, rx_dev, rq, skb); } @@ -123,7 +117,6 @@ static int nsim_forward_skb(struct net_device *tx_dev, static netdev_tx_t nsim_start_xmit(struct sk_buff *skb, struct net_device = *dev) { struct netdevsim *ns =3D netdev_priv(dev); - struct skb_ext *psp_ext =3D NULL; struct net_device *peer_dev; unsigned int len =3D skb->len; struct netdevsim *peer_ns; @@ -147,7 +140,7 @@ static netdev_tx_t nsim_start_xmit(struct sk_buff *skb,= struct net_device *dev) peer_dev =3D peer_ns->netdev; } =20 - dr =3D nsim_do_psp(skb, ns, peer_ns, &psp_ext); + dr =3D nsim_psp_handle_tx(skb, ns); if (dr) goto out_drop_free; =20 @@ -165,7 +158,7 @@ static netdev_tx_t nsim_start_xmit(struct sk_buff *skb,= struct net_device *dev) =20 skb_tx_timestamp(skb); if (unlikely(nsim_forward_skb(dev, peer_dev, - skb, rq, psp_ext) =3D=3D NET_RX_DROP)) + skb, rq) =3D=3D NET_RX_DROP)) goto out_drop_cnt; =20 if (!hrtimer_active(&rq->napi_timer)) @@ -379,6 +372,9 @@ static int nsim_rcv(struct nsim_rq *rq, int budget) =20 skb =3D skb_dequeue(&rq->skb_queue); =20 + if (nsim_psp_handle_rx(ns, skb)) + continue; + if (xdp_prog) { /* skb might be freed directly by XDP, save the len */ skblen =3D skb->len; diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netd= evsim.h index d909c4160ea1..dcea76429bac 100644 --- a/drivers/net/netdevsim/netdevsim.h +++ b/drivers/net/netdevsim/netdevsim.h @@ -451,22 +451,22 @@ static inline void nsim_macsec_teardown(struct netdev= sim *ns) #if IS_ENABLED(CONFIG_INET_PSP) int nsim_psp_init(struct netdevsim *ns); void nsim_psp_uninit(struct netdevsim *ns); -void nsim_psp_handle_ext(struct sk_buff *skb, struct skb_ext *psp_ext); enum skb_drop_reason -nsim_do_psp(struct sk_buff *skb, struct netdevsim *ns, - struct netdevsim *peer_ns, struct skb_ext **psp_ext); +nsim_psp_handle_tx(struct sk_buff *skb, struct netdevsim *ns); +bool nsim_psp_handle_rx(struct netdevsim *ns, struct sk_buff *skb); #else static inline int nsim_psp_init(struct netdevsim *ns) { return 0; } static inline void nsim_psp_uninit(struct netdevsim *ns) {} static inline enum skb_drop_reason -nsim_do_psp(struct sk_buff *skb, struct netdevsim *ns, - struct netdevsim *peer_ns, struct skb_ext **psp_ext) +nsim_psp_handle_tx(struct sk_buff *skb, struct netdevsim *ns) { return 0; } =20 -static inline void -nsim_psp_handle_ext(struct sk_buff *skb, struct skb_ext *psp_ext) {} +static inline bool nsim_psp_handle_rx(struct netdevsim *ns, struct sk_buff= *skb) +{ + return false; +} #endif =20 int nsim_setup_tc(struct net_device *dev, enum tc_setup_type type, diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c index 75740e2a731f..e8831d4bf394 100644 --- a/drivers/net/netdevsim/psp.c +++ b/drivers/net/netdevsim/psp.c @@ -6,18 +6,10 @@ =20 #include "netdevsim.h" =20 -void nsim_psp_handle_ext(struct sk_buff *skb, struct skb_ext *psp_ext) -{ - if (psp_ext) - __skb_ext_set(skb, SKB_EXT_PSP, psp_ext); -} - enum skb_drop_reason -nsim_do_psp(struct sk_buff *skb, struct netdevsim *ns, - struct netdevsim *peer_ns, struct skb_ext **psp_ext) +nsim_psp_handle_tx(struct sk_buff *skb, struct netdevsim *ns) { enum skb_drop_reason rc =3D 0; - struct psp_dev *peer_psd; struct psp_assoc *pas; struct net *net; void **ptr; @@ -46,47 +38,110 @@ nsim_do_psp(struct sk_buff *skb, struct netdevsim *ns, goto out_unlock; } =20 - /* Now pretend we just received this frame */ - peer_psd =3D rcu_dereference(peer_ns->psp.dev); - if (peer_psd && peer_psd->config.versions & (1 << pas->version)) { - bool strip_icv =3D false; - u8 generation; - - /* We cheat a bit and put the generation in the key. - * In real life if generation was too old, then decryption would - * fail. Here, we just make it so a bad key causes a bad - * generation too, and psp_sk_rx_policy_check() will fail. - */ - generation =3D pas->tx.key[0]; - - skb_ext_reset(skb); - skb->mac_len =3D ETH_HLEN; - if (psp_dev_rcv(skb, peer_psd->id, generation, strip_icv)) { - rc =3D SKB_DROP_REASON_PSP_OUTPUT; - goto out_unlock; - } - - *psp_ext =3D skb->extensions; - refcount_inc(&(*psp_ext)->refcnt); - skb->decrypted =3D 1; - - u64_stats_update_begin(&ns->psp.syncp); - u64_stats_inc(&ns->psp.tx_packets); - u64_stats_inc(&ns->psp.rx_packets); - u64_stats_add(&ns->psp.tx_bytes, - skb->len - skb_inner_transport_offset(skb)); - u64_stats_add(&ns->psp.rx_bytes, - skb->len - skb_inner_transport_offset(skb)); - u64_stats_update_end(&ns->psp.syncp); - } else { - skb->ip_summed =3D CHECKSUM_NONE; - } + skb->decrypted =3D 0; =20 + u64_stats_update_begin(&ns->psp.syncp); + u64_stats_inc(&ns->psp.tx_packets); + u64_stats_add(&ns->psp.tx_bytes, + skb->len - skb_inner_transport_offset(skb)); + u64_stats_update_end(&ns->psp.syncp); out_unlock: rcu_read_unlock(); return rc; } =20 +/* Returns true if skb was consumed, false otherwise. */ +bool nsim_psp_handle_rx(struct netdevsim *ns, struct sk_buff *skb) +{ + struct psp_dev *psd; + struct psphdr *psph; + struct udphdr *uh; + int payload_len; + u32 versions; + int psp_off; + bool is_udp; + int l3_hlen; + u8 version; + u32 psd_id; + int err; + + if (skb->protocol =3D=3D htons(ETH_P_IP)) { + struct iphdr *iph; + + if (!pskb_may_pull(skb, sizeof(struct iphdr))) + return false; + + iph =3D (struct iphdr *)skb->data; + if (iph->ihl < 5) + return false; + + is_udp =3D iph->protocol =3D=3D IPPROTO_UDP; + l3_hlen =3D iph->ihl * 4; + } else if (skb->protocol =3D=3D htons(ETH_P_IPV6)) { + struct ipv6hdr *ip6h; + + if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) + return false; + ip6h =3D (struct ipv6hdr *)skb->data; + is_udp =3D ip6h->nexthdr =3D=3D IPPROTO_UDP; + l3_hlen =3D sizeof(struct ipv6hdr); + } else { + return false; + } + + if (!is_udp) + return false; + + if (!pskb_may_pull(skb, l3_hlen + sizeof(struct udphdr) + PSP_HDR_SIZE)) + return false; + + uh =3D (struct udphdr *)(skb->data + l3_hlen); + if (uh->dest !=3D htons(PSP_DEFAULT_UDP_PORT)) + return false; + + psph =3D (struct psphdr *)(uh + 1); + version =3D FIELD_GET(PSPHDR_VERFL_VERSION, psph->verfl); + + rcu_read_lock(); + psd =3D rcu_dereference(ns->psp.dev); + if (psd) { + versions =3D READ_ONCE(psd->config.versions); + psd_id =3D psd->id; + } + rcu_read_unlock(); + + if (!psd || !(versions & (1 << version))) { + skb->ip_summed =3D CHECKSUM_NONE; + return false; + } + + psp_off =3D l3_hlen + sizeof(struct udphdr); + payload_len =3D skb->len - psp_off - PSP_HDR_SIZE - PSP_TRL_SIZE; + if (payload_len < 0) + goto drop; + + skb_push(skb, ETH_HLEN); + skb->mac_len =3D ETH_HLEN; + err =3D psp_dev_rcv(skb, psd_id, 0, false); + if (err) + goto drop; + + skb_reset_mac_header(skb); + skb_pull(skb, ETH_HLEN); + skb->decrypted =3D 1; + + u64_stats_update_begin(&ns->psp.syncp); + u64_stats_inc(&ns->psp.rx_packets); + u64_stats_add(&ns->psp.rx_bytes, payload_len); + u64_stats_update_end(&ns->psp.syncp); + + return false; + +drop: + kfree_skb_reason(skb, SKB_DROP_REASON_PSP_INPUT); + return true; +} + static int nsim_psp_set_config(struct psp_dev *psd, struct psp_dev_config *conf, struct netlink_ext_ack *extack) --=20 2.52.0 From nobody Sat Jun 13 07:50:59 2026 Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E21A93FB077 for ; Fri, 8 May 2026 14:54:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252045; cv=none; b=ij0mhbz4c8oM5QuHHrW7ujmUXgdQrlXVzDZNfl7EAHC0jI7441q4e4CuoO5kC66e9H25ZZriWiVOWBxjl5b0C69k7UZag4fysl4G9R3KjjaxKAlVU+7hMoKuq57b4P+2iyRp9iqOjJInAmgWTrZyXnE1yG4T4Hnhp5nBaZXEC2g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252045; c=relaxed/simple; bh=EicQdT3c6J+Vumm9/+ppdAXyUo5a0VPkbIng1VxcDLM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Xgh/mfrY1nCllgPYO6J3OWPdia4Q/mVp2+X8znT+A1L8yVslEZZlNTOlSwwoi5qvDCYKMiUeW0I8vvVlxamHtEqkBFJgOnSiAQaQMSoSq5SHg1bJJC/MisSSao9C8OZJmBwCnB5R0TdXgWlq/pIFnn87Sa6JikbhOHKwouLKpMI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=JX7Gf+7m; arc=none smtp.client-ip=209.85.167.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JX7Gf+7m" Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-47cbd444fd0so1273100b6e.2 for ; Fri, 08 May 2026 07:54:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778252043; x=1778856843; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=dbANzqSWAbJg10BPC4Wd4ggqpW76AexGUgGB0zbc/mU=; b=JX7Gf+7mxJ4nfAMcA9qOJ0vyg7Rgwbc91jnfBavfyh9embFSvvoa2DnvdywlAMmElh TlDlSdTDdKTssmaR0pN13I+7Pf4fph6kXWcKdVDRF3R8XBfCE5Wx93ObUeLi3Bh77Xpd If5tA3zpKiBDfck1mNkf+Byps5PEf2iCpJZAr9PR27a6shxdTRqunY3uVQ0fHe1DsdCx ukb5miRUAwwPKuBzZxcUUdeBS5xs7uG/ihslrR/HEfBxqIYCEf1nvqGx3IhfmwqEfJWW GQoDYWOFP8cL6Q6BDDj1FyEFXQN5hZ6lLNQTe7YOR0qQAfvcCr6/8LR3ZfNWWkOEh7E7 mVXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778252043; x=1778856843; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=dbANzqSWAbJg10BPC4Wd4ggqpW76AexGUgGB0zbc/mU=; b=shzmU9tUaoa/cbXZ7D/rTGSuWNzSFiKhYZtm/Gic5IgUTHH2OvzshwgtyZsbqOagkc Vv/0GHry78XooVmT12KtCz8RVx9kQKl6i4YQMaSOk4+4Mp2Is1pEJrTfB6Xdkq+ce878 NHnDds5mzAkhLY5RO7QMPTSFgFYlOyYRrC1Ss6Otjm8ZAQeVDyZZ2sySJvaVTCyk8sok JmuKmeFSj6Lw4A1/AGwKHZKNS6YRYt5ETSm+sgQAi5Z/RUGHLM/AsmVI+b7zWwiSbDnb GCkigSyVMSHh47k4jhQ7tLwNOB4hLAymR2Dvck1e/OMDUM+P02Czh6FsAZsDZ5alB4Cy 8bIw== X-Forwarded-Encrypted: i=1; AFNElJ+O+PaywU94NBA2ZnmJPxEX29hHtETACjrHbY28nByorLgh2wE3CFYRkw4WzuBqIPdph8KbGWyUI0aN3D0=@vger.kernel.org X-Gm-Message-State: AOJu0YwdkLa6m8nQJ02H1/c9LrksaPXZv3X8iJFSZbvoYkECbE9+vRPE CbNGAIWc81RQl/kD/V8TJyGswioMXYYUPLBebPoF5G0Kmh9Xs1ItH3wE X-Gm-Gg: AeBDiev/QtR6RyvgF8eQmMQspR2AudZjIY6X+gYN2qMBkxMzb7oxRRDD8+V4QMxskh0 cyeH6IsW2u/xH4GbSNO4/SmeKh0aHcVHHLx/QFwCwp/ctpzy6BSalyFpQ1PXxzVy6i6tju3HpbP sJGNPj10/6fO3XlCb/I1V/3NTUupESnYpKMZKwmMUEncGZimj7GSypM20UitQqJIgcNeZnS2Smr dOcr1QAqqs//8L5BN5wyNL5bVPKVKwLEdn0Z/An5tX62kSYaurA23zUt5egvWq6pENu71/K407i 54UBl3AyS8dxkjHYsnc1SxJ25Jixflt6DQpzmN3sfxqjmYbVv9YQGodvFxTHp/0Nmjkp1XBpcm+ AplE0Lb5FH9/+jybcDGAPik6ah7FD8fy/aXVk1YZI7iZqir8KHtUbx533AEY69q3UsbM9UQLNXn BPllMGlc392BpPi35atRq3PBXRDjYVol6XHsyeF/Ez9K+0ELVuzh0= X-Received: by 2002:a05:6808:6606:b0:479:dc28:b71d with SMTP id 5614622812f47-48042503b43mr8326241b6e.38.1778252042809; Fri, 08 May 2026 07:54:02 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:4::]) by smtp.gmail.com with ESMTPSA id 5614622812f47-47c76986404sm14617049b6e.15.2026.05.08.07.54.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 07:54:02 -0700 (PDT) From: Daniel Zahka Date: Fri, 08 May 2026 07:53:47 -0700 Subject: [PATCH net-next 4/6] netdevsim: psp: implement kdf from psp spec Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-nsim-psp-crypto-v1-4-4b50ed09b794@gmail.com> References: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> In-Reply-To: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> To: Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.13.0 Implement the PSP key derivation function (KDF) per the PSP Architecture Spec. The kdf is used to generate spi + session key pairs, and will also be used in the rx path to re-derive the tx key used by the peer. Also, remove support for psd->generation, as it is not needed for netdevsim after removing the fake authentication hack. Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Daniel Zahka --- drivers/net/Kconfig | 1 + drivers/net/netdevsim/netdevsim.h | 3 +++ drivers/net/netdevsim/psp.c | 55 +++++++++++++++++++++++++++++++++++= +--- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index ff79c466712d..44a220c05536 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -610,6 +610,7 @@ config NETDEVSIM select NET_DEVLINK select PAGE_POOL select NET_SHAPER + select CRYPTO_LIB_AES_CBC_MACS if INET_PSP help This driver is a developer testing tool and software model that can be used to test various control path networking APIs, especially diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netd= evsim.h index dcea76429bac..112fe1ee10bc 100644 --- a/drivers/net/netdevsim/netdevsim.h +++ b/drivers/net/netdevsim/netdevsim.h @@ -38,6 +38,7 @@ #define NSIM_IPSEC_VALID BIT(31) #define NSIM_UDP_TUNNEL_N_PORTS 4 =20 +#define NSIM_PSP_DEV_KEY_SIZE 32 #define NSIM_HDS_THRESHOLD_MAX 1024 =20 struct nsim_sa { @@ -123,6 +124,8 @@ struct netdevsim { struct psp_dev __rcu *dev; struct dentry *rereg; struct mutex rereg_lock; + spinlock_t dev_keys_lock; + u8 dev_keys[2][NSIM_PSP_DEV_KEY_SIZE]; u32 spi; u32 assoc_cnt; } psp; diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c index e8831d4bf394..8cdb88b1e232 100644 --- a/drivers/net/netdevsim/psp.c +++ b/drivers/net/netdevsim/psp.c @@ -1,11 +1,45 @@ // SPDX-License-Identifier: GPL-2.0 =20 +#include +#include #include +#include #include #include =20 #include "netdevsim.h" =20 +/* Session key derivation from device key per PSP Architecture Spec */ +static void nsim_psp_derive_key(const u8 *dev_key, __be32 spi, u32 version, + u8 *derived_key) +{ + unsigned int key_size =3D psp_key_size(version); + struct aes_cmac_key key; + u8 block[16]; + + aes_cmac_preparekey(&key, dev_key, NSIM_PSP_DEV_KEY_SIZE); + + block[0] =3D 0x00; + block[1] =3D 0x00; + block[2] =3D 0x00; + block[3] =3D 0x01; /* counter */ + block[4] =3D 0x50; /* 'P' */ + block[5] =3D 0x76; /* 'v' */ + block[6] =3D 0x30 | version; /* '0' + version */ + block[7] =3D 0x00; + memcpy(&block[8], &spi, sizeof(spi)); + put_unaligned_be32(key_size * 8, &block[12]); + + aes_cmac(&key, block, sizeof(block), derived_key); + + if (key_size > 16) { + block[3] =3D 0x02; + aes_cmac(&key, block, sizeof(block), derived_key + 16); + } + + memzero_explicit(&key, sizeof(key)); +} + enum skb_drop_reason nsim_psp_handle_tx(struct sk_buff *skb, struct netdevsim *ns) { @@ -155,7 +189,7 @@ nsim_rx_spi_alloc(struct psp_dev *psd, u32 version, struct netlink_ext_ack *extack) { struct netdevsim *ns =3D psd->drv_priv; - int i; + unsigned int phase; =20 if ((ns->psp.spi ^ (ns->psp.spi + 1)) & PSP_SPI_KEY_PHASE) { NL_SET_ERR_MSG(extack, "SPI space exhausted"); @@ -163,9 +197,11 @@ nsim_rx_spi_alloc(struct psp_dev *psd, u32 version, } =20 assoc->spi =3D cpu_to_be32(++ns->psp.spi); - assoc->key[0] =3D psd->generation; - for (i =3D 1; i < PSP_MAX_KEY; i++) - assoc->key[i] =3D ns->psp.spi + i; + phase =3D !!(ns->psp.spi & PSP_SPI_KEY_PHASE); + + /* dev_keys_lock not needed because of psd->lock */ + nsim_psp_derive_key(ns->psp.dev_keys[phase], assoc->spi, version, + assoc->key); =20 return 0; } @@ -186,8 +222,15 @@ 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 *ex= tack) { struct netdevsim *ns =3D psd->drv_priv; + unsigned int next_phase; =20 + psd->generation =3D 0; ns->psp.spi =3D (ns->psp.spi & PSP_SPI_KEY_PHASE) ^ PSP_SPI_KEY_PHASE; + next_phase =3D !!(ns->psp.spi & PSP_SPI_KEY_PHASE); + + spin_lock_bh(&ns->psp.dev_keys_lock); + get_random_bytes(ns->psp.dev_keys[next_phase], NSIM_PSP_DEV_KEY_SIZE); + spin_unlock_bh(&ns->psp.dev_keys_lock); =20 return 0; } @@ -295,6 +338,10 @@ int nsim_psp_init(struct netdevsim *ns) struct dentry *ddir =3D ns->nsim_dev_port->ddir; struct psp_dev *psd; =20 + spin_lock_init(&ns->psp.dev_keys_lock); + get_random_bytes(ns->psp.dev_keys[0], NSIM_PSP_DEV_KEY_SIZE); + get_random_bytes(ns->psp.dev_keys[1], NSIM_PSP_DEV_KEY_SIZE); + psd =3D psp_dev_create(ns->netdev, &nsim_psp_ops, &nsim_psp_caps, ns); if (IS_ERR(psd)) return PTR_ERR(psd); --=20 2.52.0 From nobody Sat Jun 13 07:50:59 2026 Received: from mail-oo1-f50.google.com (mail-oo1-f50.google.com [209.85.161.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B4833FB7E7 for ; Fri, 8 May 2026 14:54:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252046; cv=none; b=ZLqSQz3ftaTKkaguoULhBiEhjy7HWx2YRYxWsAW9TC5tHcjcEf14197VTyMgl8ejW4bhgYpMw2Hjph6XVYgfBsnptD9eHF9erPTYS0cYGF6EynHAupu5IjZMkCpYnP2tN7swce3GTE1h7kpGAsvKw5EvVQBkNV1RYmzw5NGm2Ac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252046; c=relaxed/simple; bh=Jie18w538Ct7x3CbVmimV1bnCHwry8E9OuWrmJ6cumQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UlZqp6/oD+O4Ik50CNv57mN8mKyjEd5J4tSWNX+GnYeeQncTKVtoPD38d9QPKgVpBPNJywZEU6xgHEvtzucnU8LT3RjRPs/6caepPevsrcCLG6/x3Kr1akYAG3k0clNjIvRb2YRJMb+14v2frZ7E5Qdu4L2TIjMBbqmmMjk2CDg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Y66C6sfo; arc=none smtp.client-ip=209.85.161.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y66C6sfo" Received: by mail-oo1-f50.google.com with SMTP id 006d021491bc7-6948fb494a0so1133629eaf.2 for ; Fri, 08 May 2026 07:54:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778252044; x=1778856844; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/pc5hm9zFh0GvB9s3uy8ydQwYAOR2n93oEpCRRyHbDs=; b=Y66C6sfoXs7fYH05OJUcRJvV1jKRTahMqbmBEEFc6pEwM+vnFILwFzy7oiJXwAHzJq 6McZilUcNdRmcBLdk8wUWGTDGi8xFdx5+vN5U8dMJzPWm7+J7IRSBj9Dj5DcL14iF9RV datUsrsz1sGfWsFhp8DI/u1SQCPSNebZsTKQgiRM0LA2VJciSkEzIq73hEsG7dSejPog 2qPxIpJaS6kJkpUxi7irYcXACruv6ugox/eDmjy1ulmESnQ6wJ+zAgzy63hMz67syz8q 2+V7KFNL9U/7MaTHkDQ9g8MAAp9iQJIrWgBmGBa/48n7HyUNPaBXGWui2NgQv936MSt+ cRmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778252044; x=1778856844; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/pc5hm9zFh0GvB9s3uy8ydQwYAOR2n93oEpCRRyHbDs=; b=shrNqW/krqXLtEc0nsV5bQ7ItIzDqRrGyV3oGV411E8hoG7PAUOjMBAB8bjtVczulH c5rM9oXnCVxq8hfwoIHR1tKxhxsqS1o6wpGhGglEp0Y1PA+BDnq/N2FPNZU264dlSAws Gsrj2VknMlhJgC5CXN6lvn7zBwge9uQVoxDOvB0cxYQQ6zdxheN0TMijNE4OmcK+t496 gSwc5ehZynYDv6eq6OXzFcOMAOJMdyUG/eeyjGh+blAN8KccqeKb/QzKIXrsBRDCZ8/C How7MpeqbyVazJ2UQM8Kog4Ebe6j/Gv9kNf3miBZARum+piyPWe628aruvqWtRNFIdIx MrEg== X-Forwarded-Encrypted: i=1; AFNElJ8n2juLM6Orltkvbnh+BDRNJIBiDbklMX7oLcmO7r6irSStwuFBfY9LHZ6YAehL6DZ9ZSMuu/MsKH0C6FQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzelFfHTXH9Vy1Mam3iaLjcQ9Q4YjMymrKMM/TWsJVb1GnYlU6j 8JmUmQgXNkiW5eulpdbdn5+ItIfQMLokCyGzo+9kNmomQP6kT3uXiMmC X-Gm-Gg: AeBDiev5Fcj1UxlPkkT8I4uwTn+URhPyB99ymaUwalZ7HxyFEC2M0PXCQS85/GFcG9L 7O073RAkGPuekLcDd3/k4bfJm7160tdFw3oHj36Xtny8als83u0cPLTKRTwB/Y7WitcB2QG3yJY CzhzOb64AV6bgij66GaKKq8QB32O4IpeVJLSX86JQaJf8aBN1lwfn7UPXfyCmEaMopGYRutqMR9 +pLgMhgp36Zuz6PhgR3VXvchfSYN4RP9L7+Cz6MVuPv1dFZzNZwR0OaFILi4225s3v26Ir/CGYj NUaCL3TIGdjnNxEPyWkSGyvxL/t90+tJj19ZogPxzHhGp6nmwJjSaV6565oU64MHou8qlVytcIg WtSE2sxh5Q+6na3IJ4EGZ0jOV/c7SF5yJndgO4vl5ibrW0qDZIfU/5kDsMhmUrg2Jm47cjq0wSL dGIJTAWVgKd7fSZavJtx8S9OzSqm6kv2RfKaon9s8FP0vwxdpZ5VL+wvOCPyQ3q9WC0xgwfA558 A== X-Received: by 2002:a05:6820:1c92:b0:694:a17f:759d with SMTP id 006d021491bc7-69998d1d6damr7091353eaf.28.1778252044172; Fri, 08 May 2026 07:54:04 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:4f::]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-69b25e0dbb5sm1108003eaf.13.2026.05.08.07.54.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 07:54:03 -0700 (PDT) From: Daniel Zahka Date: Fri, 08 May 2026 07:53:48 -0700 Subject: [PATCH net-next 5/6] netdevsim: psp: add real aes-gcm encryption and decryption Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-nsim-psp-crypto-v1-5-4b50ed09b794@gmail.com> References: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> In-Reply-To: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> To: Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.13.0 Implement real AES-GCM-128/256 encryption and decryption for PSP packets in the netdevsim driver, and remove gmac from supported versions. We now have to add and remove the PSP ICV trailer from packets. We linearize skb's because the aesgcm crypto library does not work on non-linear buffers. Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Daniel Zahka Reviewed-by: Willem de Bruijn --- drivers/net/Kconfig | 1 + drivers/net/netdevsim/psp.c | 98 +++++++++++++++++++++++++++++++++++++++++= +--- 2 files changed, 93 insertions(+), 6 deletions(-) diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 44a220c05536..2d21ba13de15 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -611,6 +611,7 @@ config NETDEVSIM select PAGE_POOL select NET_SHAPER select CRYPTO_LIB_AES_CBC_MACS if INET_PSP + select CRYPTO_LIB_AESGCM if INET_PSP help This driver is a developer testing tool and software model that can be used to test various control path networking APIs, especially diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c index 8cdb88b1e232..4945973d523d 100644 --- a/drivers/net/netdevsim/psp.c +++ b/drivers/net/netdevsim/psp.c @@ -1,8 +1,11 @@ // SPDX-License-Identifier: GPL-2.0 =20 #include +#include +#include #include #include +#include #include #include #include @@ -44,9 +47,17 @@ enum skb_drop_reason nsim_psp_handle_tx(struct sk_buff *skb, struct netdevsim *ns) { enum skb_drop_reason rc =3D 0; + u8 iv[GCM_AES_IV_SIZE]; + struct aesgcm_ctx ctx; struct psp_assoc *pas; + unsigned int key_size; + struct psphdr *psph; + int payload_len; struct net *net; + u8 *authtag; + int psp_off; void **ptr; + int err; =20 rcu_read_lock(); pas =3D psp_skb_get_assoc_rcu(skb); @@ -72,12 +83,52 @@ nsim_psp_handle_tx(struct sk_buff *skb, struct netdevsi= m *ns) goto out_unlock; } =20 + key_size =3D psp_key_size(pas->version); + err =3D aesgcm_expandkey(&ctx, pas->tx.key, key_size, PSP_TRL_SIZE); + if (err) { + rc =3D SKB_DROP_REASON_PSP_OUTPUT; + goto out_unlock; + } + + if (skb_linearize_cow(skb) || + (skb_tailroom(skb) < PSP_TRL_SIZE && + pskb_expand_head(skb, 0, PSP_TRL_SIZE, GFP_ATOMIC))) { + rc =3D SKB_DROP_REASON_PSP_OUTPUT; + goto out_unlock; + } + skb_put(skb, PSP_TRL_SIZE); + + if (skb->protocol =3D=3D htons(ETH_P_IP)) { + be16_add_cpu(&ip_hdr(skb)->tot_len, PSP_TRL_SIZE); + ip_send_check(ip_hdr(skb)); + } else if (skb->protocol =3D=3D htons(ETH_P_IPV6)) { + be16_add_cpu(&ipv6_hdr(skb)->payload_len, PSP_TRL_SIZE); + } + be16_add_cpu(&udp_hdr(skb)->len, PSP_TRL_SIZE); + + psph =3D (struct psphdr *)(skb_transport_header(skb) + + sizeof(struct udphdr)); + + /* Real impl needs to guarantee IV isn't reused on the same key */ + psph->iv =3D cpu_to_be64(ktime_get_mono_fast_ns()); + memcpy(iv, &psph->spi, sizeof(psph->spi)); + memcpy(iv + sizeof(psph->spi), &psph->iv, sizeof(psph->iv)); + psp_off =3D skb_transport_offset(skb) + sizeof(struct udphdr); + payload_len =3D skb->len - psp_off - PSP_HDR_SIZE - PSP_TRL_SIZE; + authtag =3D skb->data + skb->len - PSP_TRL_SIZE; + + aesgcm_encrypt(&ctx, + skb->data + psp_off + PSP_HDR_SIZE, + skb->data + psp_off + PSP_HDR_SIZE, + payload_len, (u8 *)psph, PSP_HDR_SIZE, + iv, authtag); + memzero_explicit(&ctx, sizeof(ctx)); + skb->decrypted =3D 0; =20 u64_stats_update_begin(&ns->psp.syncp); u64_stats_inc(&ns->psp.tx_packets); - u64_stats_add(&ns->psp.tx_bytes, - skb->len - skb_inner_transport_offset(skb)); + u64_stats_add(&ns->psp.tx_bytes, payload_len); u64_stats_update_end(&ns->psp.syncp); out_unlock: rcu_read_unlock(); @@ -87,12 +138,17 @@ nsim_psp_handle_tx(struct sk_buff *skb, struct netdevs= im *ns) /* Returns true if skb was consumed, false otherwise. */ bool nsim_psp_handle_rx(struct netdevsim *ns, struct sk_buff *skb) { + u8 iv[GCM_AES_IV_SIZE]; + struct aesgcm_ctx ctx; struct psp_dev *psd; + u8 key[PSP_MAX_KEY]; struct psphdr *psph; + unsigned int phase; struct udphdr *uh; int payload_len; u32 versions; int psp_off; + u8 *authtag; bool is_udp; int l3_hlen; u8 version; @@ -154,9 +210,41 @@ bool nsim_psp_handle_rx(struct netdevsim *ns, struct s= k_buff *skb) if (payload_len < 0) goto drop; =20 + if (FIELD_GET(PSPHDR_CRYPT_OFFSET, psph->crypt_offset)) + goto drop; + + if (skb_linearize_cow(skb)) + goto drop; + + psph =3D (struct psphdr *)(skb->data + psp_off); + phase =3D !!(ntohl(psph->spi) & PSP_SPI_KEY_PHASE); + + spin_lock_bh(&ns->psp.dev_keys_lock); + nsim_psp_derive_key(ns->psp.dev_keys[phase], psph->spi, version, key); + spin_unlock_bh(&ns->psp.dev_keys_lock); + + err =3D aesgcm_expandkey(&ctx, key, psp_key_size(version), PSP_TRL_SIZE); + memzero_explicit(key, sizeof(key)); + if (err) + goto drop; + + memcpy(iv, &psph->spi, sizeof(psph->spi)); + memcpy(iv + sizeof(psph->spi), &psph->iv, sizeof(psph->iv)); + authtag =3D skb->data + skb->len - PSP_TRL_SIZE; + + if (!aesgcm_decrypt(&ctx, + skb->data + psp_off + PSP_HDR_SIZE, + skb->data + psp_off + PSP_HDR_SIZE, + payload_len, (u8 *)psph, PSP_HDR_SIZE, + iv, authtag)) { + memzero_explicit(&ctx, sizeof(ctx)); + goto drop; + } + memzero_explicit(&ctx, sizeof(ctx)); + skb_push(skb, ETH_HLEN); skb->mac_len =3D ETH_HLEN; - err =3D psp_dev_rcv(skb, psd_id, 0, false); + err =3D psp_dev_rcv(skb, psd_id, 0, true); if (err) goto drop; =20 @@ -274,9 +362,7 @@ static struct psp_dev_ops nsim_psp_ops =3D { =20 static struct psp_dev_caps nsim_psp_caps =3D { .versions =3D 1 << PSP_VERSION_HDR0_AES_GCM_128 | - 1 << PSP_VERSION_HDR0_AES_GMAC_128 | - 1 << PSP_VERSION_HDR0_AES_GCM_256 | - 1 << PSP_VERSION_HDR0_AES_GMAC_256, + 1 << PSP_VERSION_HDR0_AES_GCM_256, .assoc_drv_spc =3D sizeof(void *), }; =20 --=20 2.52.0 From nobody Sat Jun 13 07:50:59 2026 Received: from mail-ot1-f51.google.com (mail-ot1-f51.google.com [209.85.210.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 866CB3FBEDD for ; Fri, 8 May 2026 14:54:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252048; cv=none; b=JMuHIAlQzXvrUMKE/V53oeIwiVKPL5YJnINaSVeuxyPVEdzO+uoCSalcMJBE4iZXa9uyodgZ3xZe3C5+dw2pbyPqVGESv/ORKuprC/yocQwLtvcyymw4pzynFoCjwXZGQooXg9wTpFR5VUzzxJJDeqkFX93kLVRoBM0F3MCR/mo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778252048; c=relaxed/simple; bh=36DgZFE5cWQ/2I06imy7s6CW61tBQ1NllxQ2tZYBFhs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MUnAs5bZ9FeepL39AMfz/7ETJh432NG6Sb0GrRdS/wdtO93hbefKpHNYnnV0jmZ+1abvY+bve9PKsuOPby9fWgh2HF6WW0wbx9zcQoU61CfCgQh1w8f4SAmUxbTerYD0n3KmhCZ/6XIUwsyXhD2433GH2IKGbatWSOpVrqob2AY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eBcSVAhu; arc=none smtp.client-ip=209.85.210.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eBcSVAhu" Received: by mail-ot1-f51.google.com with SMTP id 46e09a7af769-7e36bb16a92so281325a34.2 for ; Fri, 08 May 2026 07:54:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778252045; x=1778856845; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=RHL1wJQG1EIug8Z16j66mJo+lKQHRHLvWtIK615c/6Y=; b=eBcSVAhui0dnRIpBkoAxEI+H+frOMTDPxFMo7GarVpT7ZTW1UfuynJ6w68J8KHKiLD EcVbm0GJxepUWcNQSZQ631emacVQ5QvFGi6CMZMnoCkChgPSgqKYEu/dmthR5/jXWf5E SvQP4PjnsseCTU2v4CrgRWYoYJ7quG5itsWq2JLbR79BkDMRuuxwJLKvXjlNJKan5xKC 0/cVkEbwcwAEEV1sEiGWZcgaOc7xA8QOVuDhl3TJ7KQ7hXY/F864Ac86MspnB6EqP0UK +P98XP7s303GRlUhtnR4dVnQWGVKKSUmCa7mXFOcF7F8kGuIssDGvgkSkt4DYxLyTMRe L8Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778252045; x=1778856845; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=RHL1wJQG1EIug8Z16j66mJo+lKQHRHLvWtIK615c/6Y=; b=S3iJsDsFbvf3FsCyRTWz3mCugtM6hB4Or1eRa+n6TXMZ6wOefl02BWAcKpO3ZHbw5k RsKkZkBJ907M/RJVNZj7i2E2zfpaNLEKGlhvo6mdjEd4bceEo3nWnW2cjbAJKGD0odsL t3rZKs66YoOc78+xlsFZjfvUWP3f9VryZJqwgmja+7ntFNjUI92xPK2qsjpIyIf/fC2F f3lF8wS/kmaGatCeb8vQwXa82uam9duKEQe1eVaUNAUNr1WjIz22cslg8jKuGRQRtDY6 nW5S/4GOMi3bfqK+8ZbkoYLFSonJzU8RavlphCjsdxiCTiIXUc8FmcLdF6zLk95eTLqh KG3A== X-Forwarded-Encrypted: i=1; AFNElJ+zxkcCFgfRWm3QwvOaL1SJBhw0l/jvkaVSECGyW8Ny7Bswc0HItjcmGjZSw9ruRJeENG3QhUaq5WCTybQ=@vger.kernel.org X-Gm-Message-State: AOJu0YweQWtsOPuioQqYkJPTtajZ+3QtwLV6t1pFmyPbnIT08HBqb5mM b9QkclGKaliQtM7QvRSkC4TgrCqG475TkWZ0qd7fhwL+cqhQK6952Ymn X-Gm-Gg: AeBDieuENwOo46SmrzO8j/7WFKKmkTLUiaTaDupr851FGsA/jF2UsMqHcv1nyRXBZXK TVHCAQM9xW4sWE33c1+vwX+y7nX7Kbk/ntS+SWBiGZtDGHKc8rz6x5YFPwBvS5PbP+8wYYUEAW9 NQrz1aiW3PDAmm2aVh9Px4KHKZC3FpNTkSdMfyOEAf6YrDdyUgubUzlSqFtbyKOlMDkmbO0aMkS RX8wjpCxqDgm0K8cvSj8ZCRvYXe1cVA4ioZ0M0WIwlvskqccXpi6XAb+TO2X3oPFslcoQJcXFad 4/v0YHr/7AcRcBGG53iN3rJsqquiZ1U/aY0Ba3I+23+oyVwURumps68oE0KqiebAoW2gnjqJ/68 sWylnoif3iUMBsFZ1IY2qIn3G/h5XsErilhFCqoisx+x333FRl+gDwQNPGJtWHRIzrVgp9bL1ab fGENFw7JyD3SdOgtjO0k5WmMfupmMS73wd00WBos/+ToOLBILxP4l1GEb8vJ/Jx3M= X-Received: by 2002:a05:6830:d8d:b0:7de:a2cc:9dde with SMTP id 46e09a7af769-7e1df04e894mr8115894a34.15.1778252045438; Fri, 08 May 2026 07:54:05 -0700 (PDT) Received: from localhost ([2a03:2880:10ff:4e::]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7e367c056desm1190872a34.10.2026.05.08.07.54.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 May 2026 07:54:04 -0700 (PDT) From: Daniel Zahka Date: Fri, 08 May 2026 07:53:49 -0700 Subject: [PATCH net-next 6/6] netdevsim: psp: count rx authentication and length errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260508-nsim-psp-crypto-v1-6-4b50ed09b794@gmail.com> References: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> In-Reply-To: <20260508-nsim-psp-crypto-v1-0-4b50ed09b794@gmail.com> To: Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.13.0 Now that netdevsim does psp parsing and aes-gcm decryption in rx, we can report authentication and length errors in the psp stats api. Assisted-by: Claude:claude-opus-4.7 Signed-off-by: Daniel Zahka Reviewed-by: Willem de Bruijn --- drivers/net/netdevsim/netdevsim.h | 2 ++ drivers/net/netdevsim/psp.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netd= evsim.h index 112fe1ee10bc..5f0f638ee893 100644 --- a/drivers/net/netdevsim/netdevsim.h +++ b/drivers/net/netdevsim/netdevsim.h @@ -118,6 +118,8 @@ struct netdevsim { struct { u64_stats_t rx_packets; u64_stats_t rx_bytes; + u64_stats_t rx_auth_fail; + u64_stats_t rx_error; u64_stats_t tx_packets; u64_stats_t tx_bytes; struct u64_stats_sync syncp; diff --git a/drivers/net/netdevsim/psp.c b/drivers/net/netdevsim/psp.c index 4945973d523d..053c01cc310d 100644 --- a/drivers/net/netdevsim/psp.c +++ b/drivers/net/netdevsim/psp.c @@ -207,8 +207,12 @@ bool nsim_psp_handle_rx(struct netdevsim *ns, struct s= k_buff *skb) =20 psp_off =3D l3_hlen + sizeof(struct udphdr); payload_len =3D skb->len - psp_off - PSP_HDR_SIZE - PSP_TRL_SIZE; - if (payload_len < 0) + if (payload_len < 0) { + u64_stats_update_begin(&ns->psp.syncp); + u64_stats_inc(&ns->psp.rx_error); + u64_stats_update_end(&ns->psp.syncp); goto drop; + } =20 if (FIELD_GET(PSPHDR_CRYPT_OFFSET, psph->crypt_offset)) goto drop; @@ -238,6 +242,9 @@ bool nsim_psp_handle_rx(struct netdevsim *ns, struct sk= _buff *skb) payload_len, (u8 *)psph, PSP_HDR_SIZE, iv, authtag)) { memzero_explicit(&ctx, sizeof(ctx)); + u64_stats_update_begin(&ns->psp.syncp); + u64_stats_inc(&ns->psp.rx_auth_fail); + u64_stats_update_end(&ns->psp.syncp); goto drop; } memzero_explicit(&ctx, sizeof(ctx)); @@ -346,6 +353,8 @@ static void nsim_get_stats(struct psp_dev *psd, struct = psp_dev_stats *stats) start =3D u64_stats_fetch_begin(&ns->psp.syncp); stats->rx_bytes =3D u64_stats_read(&ns->psp.rx_bytes); stats->rx_packets =3D u64_stats_read(&ns->psp.rx_packets); + stats->rx_auth_fail =3D u64_stats_read(&ns->psp.rx_auth_fail); + stats->rx_error =3D u64_stats_read(&ns->psp.rx_error); stats->tx_bytes =3D u64_stats_read(&ns->psp.tx_bytes); stats->tx_packets =3D u64_stats_read(&ns->psp.tx_packets); } while (u64_stats_fetch_retry(&ns->psp.syncp, start)); --=20 2.52.0