From: Jakub Kicinski <kuba@kernel.org>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com,
andrew+netdev@lunn.ch, horms@kernel.org, petrm@nvidia.com,
willemb@google.com, shuah@kernel.org, daniel.zahka@gmail.com,
linux-kselftest@vger.kernel.org, Jakub Kicinski <kuba@kernel.org>
Subject: [PATCH net-next v3 6/8] selftests: drv-net: psp: add connection breaking tests
Date: Sat, 27 Sep 2025 15:54:18 -0700 [thread overview]
Message-ID: <20250927225420.1443468-7-kuba@kernel.org> (raw)
In-Reply-To: <20250927225420.1443468-1-kuba@kernel.org>
Add test checking conditions which lead to connections breaking.
Using bad key or connection gets stuck if device key is rotated
twice.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
---
tools/testing/selftests/drivers/net/psp.py | 92 +++++++++++++++++++++-
1 file changed, 91 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/drivers/net/psp.py b/tools/testing/selftests/drivers/net/psp.py
index c817553cc5e8..e8c80ebfa2f6 100755
--- a/tools/testing/selftests/drivers/net/psp.py
+++ b/tools/testing/selftests/drivers/net/psp.py
@@ -98,6 +98,16 @@ from lib.py import bkg, rand_port, wait_port_listen
time.sleep(0.01)
ksft_eq(read_len, exp_len)
+
+def _check_data_outq(s, exp_len, force_wait=False):
+ outq = 0
+ for _ in range(10):
+ outq = _get_outq(s)
+ if not force_wait and outq == exp_len:
+ break
+ time.sleep(0.01)
+ ksft_eq(outq, exp_len)
+
#
# Test case boiler plate
#
@@ -372,6 +382,85 @@ from lib.py import bkg, rand_port, wait_port_listen
_close_psp_conn(cfg, s)
+def __bad_xfer_do(cfg, s, tx, version='hdr0-aes-gcm-128'):
+ # Make sure we accept the ACK for the SPI before we seal with the bad assoc
+ _check_data_outq(s, 0)
+
+ cfg.pspnl.tx_assoc({"dev-id": cfg.psp_dev_id,
+ "version": version,
+ "tx-key": tx,
+ "sock-fd": s.fileno()})
+
+ data_len = _send_careful(cfg, s, 20)
+ _check_data_outq(s, data_len, force_wait=True)
+ _check_data_rx(cfg, 0)
+ _close_psp_conn(cfg, s)
+
+
+def data_send_bad_key(cfg):
+ """ Test send data with bad key """
+ _init_psp_dev(cfg)
+
+ s = _make_psp_conn(cfg)
+
+ rx_assoc = cfg.pspnl.rx_assoc({"version": 0,
+ "dev-id": cfg.psp_dev_id,
+ "sock-fd": s.fileno()})
+ rx = rx_assoc['rx-key']
+ tx = _spi_xchg(s, rx)
+ tx['key'] = (tx['key'][0] ^ 0xff).to_bytes(1, 'little') + tx['key'][1:]
+ __bad_xfer_do(cfg, s, tx)
+
+
+def data_send_disconnect(cfg):
+ """ Test socket close after sending data """
+ _init_psp_dev(cfg)
+
+ with _make_psp_conn(cfg) as s:
+ assoc = cfg.pspnl.rx_assoc({"version": 0,
+ "sock-fd": s.fileno()})
+ tx = _spi_xchg(s, assoc['rx-key'])
+ cfg.pspnl.tx_assoc({"version": 0,
+ "tx-key": tx,
+ "sock-fd": s.fileno()})
+
+ data_len = _send_careful(cfg, s, 100)
+ _check_data_rx(cfg, data_len)
+
+ s.shutdown(socket.SHUT_RDWR)
+ s.close()
+
+
+def data_stale_key(cfg):
+ """ Test send on a double-rotated key """
+ _init_psp_dev(cfg)
+
+ s = _make_psp_conn(cfg)
+ try:
+ rx_assoc = cfg.pspnl.rx_assoc({"version": 0,
+ "dev-id": cfg.psp_dev_id,
+ "sock-fd": s.fileno()})
+ rx = rx_assoc['rx-key']
+ tx = _spi_xchg(s, rx)
+
+ cfg.pspnl.tx_assoc({"dev-id": cfg.psp_dev_id,
+ "version": 0,
+ "tx-key": tx,
+ "sock-fd": s.fileno()})
+
+ data_len = _send_careful(cfg, s, 100)
+ _check_data_rx(cfg, data_len)
+ _check_data_outq(s, 0)
+
+ cfg.pspnl.key_rotate({"id": cfg.psp_dev_id})
+ cfg.pspnl.key_rotate({"id": cfg.psp_dev_id})
+
+ s.send(b'0123456789' * 200)
+ _check_data_outq(s, 2000, force_wait=True)
+ finally:
+ _close_psp_conn(cfg, s)
+
+
def psp_ip_ver_test_builder(name, test_func, psp_ver, ipver):
"""Build test cases for each combo of PSP version and IP version"""
def test_case(cfg):
@@ -410,7 +499,8 @@ from lib.py import bkg, rand_port, wait_port_listen
]
ksft_run(cases=cases, globs=globals(),
- case_pfx={"dev_", "assoc_"}, args=(cfg, ))
+ case_pfx={"dev_", "data_", "assoc_"},
+ args=(cfg, ))
cfg.comm_sock.send(b"exit\0")
cfg.comm_sock.close()
--
2.51.0
next prev parent reply other threads:[~2025-09-27 22:54 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-27 22:54 [PATCH net-next v3 0/8] psp: add a kselftest suite and netdevsim implementation Jakub Kicinski
2025-09-27 22:54 ` [PATCH net-next v3 1/8] netdevsim: a basic test PSP implementation Jakub Kicinski
2025-09-28 16:02 ` Willem de Bruijn
2025-09-27 22:54 ` [PATCH net-next v3 2/8] selftests: drv-net: base device access API test Jakub Kicinski
2025-09-30 13:16 ` Paolo Abeni
2025-09-30 13:32 ` Jakub Kicinski
2025-09-27 22:54 ` [PATCH net-next v3 3/8] selftests: drv-net: add PSP responder Jakub Kicinski
2025-09-28 16:05 ` Willem de Bruijn
2025-09-27 22:54 ` [PATCH net-next v3 4/8] selftests: drv-net: psp: add basic data transfer and key rotation tests Jakub Kicinski
2025-09-27 22:54 ` [PATCH net-next v3 5/8] selftests: drv-net: psp: add association tests Jakub Kicinski
2025-09-27 22:54 ` Jakub Kicinski [this message]
2025-09-27 22:54 ` [PATCH net-next v3 7/8] selftests: drv-net: psp: add test for auto-adjusting TCP MSS Jakub Kicinski
2025-09-27 22:54 ` [PATCH net-next v3 8/8] selftests: drv-net: psp: add tests for destroying devices Jakub Kicinski
2025-09-28 16:00 ` [PATCH net-next v3 0/8] psp: add a kselftest suite and netdevsim implementation Willem de Bruijn
2025-09-29 19:04 ` Jakub Kicinski
2025-09-29 19:58 ` Willem de Bruijn
2025-09-30 13:30 ` patchwork-bot+netdevbpf
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=20250927225420.1443468-7-kuba@kernel.org \
--to=kuba@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=daniel.zahka@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=petrm@nvidia.com \
--cc=shuah@kernel.org \
--cc=willemb@google.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.