]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: macsec: indicate next pn update when offloading
authorRadu Pirea (NXP OSS) <radu-nicolae.pirea@oss.nxp.com>
Thu, 5 Oct 2023 18:06:33 +0000 (21:06 +0300)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 10 Oct 2023 08:30:30 +0000 (10:30 +0200)
Indicate next PN update using update_pn flag in macsec_context.
Offloaded MACsec implementations does not know whether or not the
MACSEC_SA_ATTR_PN attribute was passed for an SA update and assume
that next PN should always updated, but this is not always true.

The PN can be reset to its initial value using the following command:
$ ip macsec set macsec0 tx sa 0 off #octeontx2-pf case

Or, the update PN command will succeed even if the driver does not support
PN updates.
$ ip macsec set macsec0 tx sa 0 pn 1 on #mscc phy driver case

Comparing the initial PN with the new PN value is not a solution. When
the user updates the PN using its initial value the command will
succeed, even if the driver does not support it. Like this:
$ ip macsec add macsec0 tx sa 0 pn 1 on key 00 \
ead3664f508eb06c40ac7104cdae4ce5
$ ip macsec set macsec0 tx sa 0 pn 1 on #mlx5 case

Signed-off-by: Radu Pirea (NXP OSS) <radu-nicolae.pirea@oss.nxp.com>
Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/macsec.c
include/net/macsec.h

index b7e151439c4886f851ba87e27a34e33cd834069a..c5cd4551c67ca38590ec1c7af9bbe3b9596b6490 100644 (file)
@@ -2383,6 +2383,7 @@ static int macsec_upd_txsa(struct sk_buff *skb, struct genl_info *info)
 
                ctx.sa.assoc_num = assoc_num;
                ctx.sa.tx_sa = tx_sa;
+               ctx.sa.update_pn = !!prev_pn.full64;
                ctx.secy = secy;
 
                ret = macsec_offload(ops->mdo_upd_txsa, &ctx);
@@ -2476,6 +2477,7 @@ static int macsec_upd_rxsa(struct sk_buff *skb, struct genl_info *info)
 
                ctx.sa.assoc_num = assoc_num;
                ctx.sa.rx_sa = rx_sa;
+               ctx.sa.update_pn = !!prev_pn.full64;
                ctx.secy = secy;
 
                ret = macsec_offload(ops->mdo_upd_rxsa, &ctx);
index 75a6f4863c837a5ba825466e477432854af865e7..ebf9bc54036a5f2a24828ce0959b92c3be17a178 100644 (file)
@@ -258,6 +258,7 @@ struct macsec_context {
        struct macsec_secy *secy;
        struct macsec_rx_sc *rx_sc;
        struct {
+               bool update_pn;
                unsigned char assoc_num;
                u8 key[MACSEC_MAX_KEY_LEN];
                union {