Thread (42 messages) flat view 42 messages, 4 authors, 2025-06-27

Re: [PATCH v2 08/17] net: psp: add socket security association code

From: Daniel Zahka <daniel.zahka@gmail.com>
Date: 2025-06-26 12:37:39


On 6/25/25 10:12 PM, Willem de Bruijn wrote:
Daniel Zahka wrote:
quoted
From: Jakub Kicinski <kuba@kernel.org>

Add the ability to install PSP Rx and Tx crypto keys on TCP
connections. Netlink ops are provided for both operations.
Rx side combines allocating a new Rx key and installing it
on the socket. Theoretically these are separate actions,
but in practice they will always be used one after the
other. We can add distinct "alloc" and "install" ops later.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
Co-developed-by: Daniel Zahka <daniel.zahka@gmail.com>
  /**
   * struct psp_dev_ops - netdev driver facing PSP callbacks
   */
@@ -109,6 +145,28 @@ struct psp_dev_ops {
  	 * @key_rotate: rotate the device key
  	 */
  	int (*key_rotate)(struct psp_dev *psd, struct netlink_ext_ack *extack);
+
+	/**
+	 * @rx_spi_alloc: allocate an Rx SPI+key pair
+	 * Allocate an Rx SPI and resulting derived key.
+	 * This key should remain valid until key rotation.
+	 */
+	int (*rx_spi_alloc)(struct psp_dev *psd, u32 version,
+			    struct psp_key_parsed *assoc,
+			    struct netlink_ext_ack *extack);
+
+	/**
+	 * @tx_key_add: add a Tx key to the device
+	 * Install an association in the device. Core will allocate space
+	 * for the driver to use at drv_data.
+	 */
+	int (*tx_key_add)(struct psp_dev *psd, struct psp_assoc *pas,
+			  struct netlink_ext_ack *extack);
+	/**
+	 * @tx_key_del: remove a Tx key from the device
+	 * Remove an association from the device.
+	 */
+	void (*tx_key_del)(struct psp_dev *psd, struct psp_assoc *pas);
  };
This Tx driver API is necessary for devices that store keys in an
on-device key database.

The preferred device model for PSP is keys-in-descriptor, in line with
the protocol design goal of O(1) device state.

In that case, can the driver leave these callbacks NULL? And, in the
driver tx datapath, access the tx key from psp_sk_assoc().
As it is now, psp_dev_create() will complain if the tx key management 
functions are NULL, but that should be changed. From the driver tx 
datapath, psp_skb_get_assoc_rcu() should be used for both 
keys-in-descriptors and SADB implementations. For SADB use, the SADB 
handle can be stashed in pas->drv_data. The mlx5 patches demonstrate this.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help