From: Subbaraya Sundeep <sbhatta@marvell.com>
To: <carlos.fernandez@technica-engineering.de>
Cc: <andreu.montiel@technica-enginnering.de>,
Andreu Montiel <Andreu.Montiel@technica-engineering.de>,
Sabrina Dubroca <sd@queasysnail.net>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Hannes Frederic Sowa <hannes@stressinduktion.org>,
<netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH net v3] macsec: MACsec SCI assignment for ES = 0
Date: Thu, 5 Jun 2025 05:23:32 +0000 [thread overview]
Message-ID: <aEEp1IOlVY9BrXVY@4c2d361be676> (raw)
In-Reply-To: <20250604123407.2795263-1-carlos.fernandez@technica-engineering.de>
On 2025-06-04 at 12:33:55, carlos.fernandez@technica-engineering.de (carlos.fernandez@technica-engineering.de) wrote:
> From: Carlos Fernandez <carlos.fernandez@technica-engineering.de>
>
> According to 802.1AE standard, when ES and SC flags in TCI are zero,
> used SCI should be the current active SC_RX. Current code uses the
> header MAC address. Without this patch, when ES flag is 0 (using a
> bridge or switch), header MAC will not fit the SCI and MACSec frames
> will be discarted.
>
> Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
> Co-developed-by: Andreu Montiel <Andreu.Montiel@technica-engineering.de>
> Signed-off-by: Andreu Montiel <Andreu.Montiel@technica-engineering.de>
> Signed-off-by: Carlos Fernandez <carlos.fernandez@technica-engineering.de>
Reviewed-by: Subbaraya Sundeep <sbhatta@marvell.com>
Also please let me know how to test this single secy and single
RXSC for my understanding.
Thanks,
Sundeep
> ---
> v3:
> * Wrong drop frame afer macsec_frame_sci
> * Wrong Fixes tag in message
>
> v2: https://patchwork.kernel.org/project/netdevbpf/patch/20250604113213.2595524-1-carlos.fernandez@technica-engineering.de/
> * Active sci lookup logic in a separate helper.
> * Unnecessary loops avoided.
> * Check RXSC is exactly one for lower device.
> * Drops frame in case of error.
>
>
> v1: https://patchwork.kernel.org/project/netdevbpf/patch/20250529124455.2761783-1-carlos.fernandez@technica-engineering.de/
>
> drivers/net/macsec.c | 40 ++++++++++++++++++++++++++++++++++------
> 1 file changed, 34 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
> index 3d315e30ee47..7edbe76b5455 100644
> --- a/drivers/net/macsec.c
> +++ b/drivers/net/macsec.c
> @@ -247,15 +247,39 @@ static sci_t make_sci(const u8 *addr, __be16 port)
> return sci;
> }
>
> -static sci_t macsec_frame_sci(struct macsec_eth_header *hdr, bool sci_present)
> +static sci_t macsec_active_sci(struct macsec_secy *secy)
> {
> - sci_t sci;
> + struct macsec_rx_sc *rx_sc = rcu_dereference_bh(secy->rx_sc);
> +
> + /* Case single RX SC */
> + if (rx_sc && !rcu_dereference_bh(rx_sc->next))
> + return (rx_sc->active) ? rx_sc->sci : 0;
> + /* Case no RX SC or multiple */
> + else
> + return 0;
> +}
> +
> +static sci_t macsec_frame_sci(struct macsec_eth_header *hdr, bool sci_present,
> + struct macsec_rxh_data *rxd)
> +{
> + struct macsec_dev *macsec;
> + sci_t sci = 0;
>
> - if (sci_present)
> + /* SC = 1 */
> + if (sci_present) {
> memcpy(&sci, hdr->secure_channel_id,
> sizeof(hdr->secure_channel_id));
> - else
> + /* SC = 0; ES = 0 */
> + } else if ((!(hdr->tci_an & (MACSEC_TCI_ES | MACSEC_TCI_SC))) &&
> + (list_is_singular(&rxd->secys))) {
> + /* Only one SECY should exist on this scenario */
> + macsec = list_first_or_null_rcu(&rxd->secys, struct macsec_dev,
> + secys);
> + if (macsec)
> + return macsec_active_sci(&macsec->secy);
> + } else {
> sci = make_sci(hdr->eth.h_source, MACSEC_PORT_ES);
> + }
>
> return sci;
> }
> @@ -1109,7 +1133,7 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)
> struct macsec_rxh_data *rxd;
> struct macsec_dev *macsec;
> unsigned int len;
> - sci_t sci;
> + sci_t sci = 0;
> u32 hdr_pn;
> bool cbit;
> struct pcpu_rx_sc_stats *rxsc_stats;
> @@ -1156,11 +1180,14 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)
>
> macsec_skb_cb(skb)->has_sci = !!(hdr->tci_an & MACSEC_TCI_SC);
> macsec_skb_cb(skb)->assoc_num = hdr->tci_an & MACSEC_AN_MASK;
> - sci = macsec_frame_sci(hdr, macsec_skb_cb(skb)->has_sci);
>
> rcu_read_lock();
> rxd = macsec_data_rcu(skb->dev);
>
> + sci = macsec_frame_sci(hdr, macsec_skb_cb(skb)->has_sci, rxd);
> + if (!sci)
> + goto drop_nosc;
> +
> list_for_each_entry_rcu(macsec, &rxd->secys, secys) {
> struct macsec_rx_sc *sc = find_rx_sc(&macsec->secy, sci);
>
> @@ -1283,6 +1310,7 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)
> macsec_rxsa_put(rx_sa);
> drop_nosa:
> macsec_rxsc_put(rx_sc);
> +drop_nosc:
> rcu_read_unlock();
> drop_direct:
> kfree_skb(skb);
> --
> 2.43.0
>
next prev parent reply other threads:[~2025-06-05 5:24 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-04 12:33 [PATCH net v3] macsec: MACsec SCI assignment for ES = 0 carlos.fernandez
2025-06-05 5:23 ` Subbaraya Sundeep [this message]
2025-06-05 13:17 ` [PATCH net] " Carlos Fernandez
2025-06-05 13:21 ` [PATCH net v3] " Carlos Fernandez
2025-06-06 7:20 ` Subbaraya Sundeep
2025-06-06 13:14 ` Simon Horman
2025-06-09 6:53 ` Carlos Fernandez
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=aEEp1IOlVY9BrXVY@4c2d361be676 \
--to=sbhatta@marvell.com \
--cc=Andreu.Montiel@technica-engineering.de \
--cc=andreu.montiel@technica-enginnering.de \
--cc=andrew+netdev@lunn.ch \
--cc=carlos.fernandez@technica-engineering.de \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hannes@stressinduktion.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sd@queasysnail.net \
/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.