Netdev List
 help / color / mirror / Atom feed
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: netdev-bot+sashiko@kernel.org
Cc: netdev@vger.kernel.org, j-rameshbabu@ti.com,
	andrew+netdev@lunn.ch, c-vankar@ti.com, danishanwar@ti.com,
	d-qiu@ti.com, davem@davemloft.net, edumazet@google.com,
	fmaurer@redhat.com, kuba@kernel.org, neelima@ti.com,
	pabeni@redhat.com, praneeth@ti.com, pratheesh@ti.com,
	richardcochran@gmail.com, horms@kernel.org, vigneshr@ti.com,
	willemdebruijn.kernel@gmail.com
Subject: Re: [PATCH net-next v8 8/8] selftests: hsr: Add test for the inline PTP header on HSR
Date: Mon, 12 Oct 2026 17:56:16 +0200	[thread overview]
Message-ID: <20261012155616.4XXTteGo@linutronix.de> (raw)
In-Reply-To: <179129708214.434549.3458194670714306366@kernel.org>

On 2026-10-06 14:31:22 [+0000], netdev-bot+sashiko@kernel.org wrote:
> > +	if (memcmp(hsr_hdr->dst, p2p_dst_mac, MAC_LEN))
> > +		goto again;
> > +
> > +	if (hsr_hdr->type != htons(ETH_P_HSR)) {
> > +		printf("Error: Unexpected ether type: 0x%x\n", ntohs(hsr_hdr->type));
> > +		return -1;
> > +	}
> > +
> > +	if (hsr_hdr->encap_type != htons(ETH_P_1588)) {
> > +		printf("Error: Unexpected encapsulated type: 0x%x\n",
> > +		       htons(hsr_hdr->encap_type));
> > +		return -1;
> > +	}
> > +
> > +	if (cnt < sizeof(struct hsr_hdr) + sample_len) {
> > +		printf("Error: Packet %d is too small for data check\n", cnt);
> > +		return -1;
> > +	}
> > +
> > +	if (!memcmp(&buf[sizeof(struct hsr_hdr)], sample, sample_len))
> > +		return 1;
> 
> [Severity: Low]
> Do the "PortA, hsr-header" and "PortB, hsr-header" cases check that the
> kernel keeps the HSR header supplied by the caller?
> 
> pkt_send() fills the foreign header with values that would identify it:
> 
> 	hdr->hsr_hdr.src[3] ^= 0x21;
> 	...
> 	hdr->hsr_hdr.sequence_nr = htons(hsr_seq++);
> 	...
> 	pathid_size |= (port - 1) << 12;
> 
> raw_recv() only checks dst, type, encap_type and the payload. It never
> compares src, sequence_nr or pathid_and_LSDU_size with the values that
> were sent.

It does not check the HSR header details, true. It expects a reasonable
HSR header followed by the payload. The payload is checked but it is not
modified during the individual transfers. It is however checked that the
packet arrives only on one of the two ports and the "inline header" must
not exist. That should be enough.

> On the kernel side, you can only see the foreign header handling on the
> wire through these two paths in net/hsr/hsr_forward.c:
> 
> hsr_xmit() {
> 	if (frame->port_rcv->type == HSR_PT_MASTER && !frame->has_foreign_header) {
> 		hsr_addr_subst_dest(frame->node_src, skb, port);
> 		...
> 		ether_addr_copy(eth_hdr(skb)->h_source, port->dev->dev_addr);
> 	}
> 	...
> }
> 
> hsr_forward_do() {
> 	...
> 		if (frame->has_foreign_header && frame->skb_std) {
> 			skb = skb_clone(frame->skb_std, GFP_ATOMIC);
> 	...
> }
> 
> Suppose the !frame->has_foreign_header check in hsr_xmit() were dropped.
> The source MAC would then be rewritten to the slave's address, and
> hsr_addr_subst_dest() returns early for the multicast 01:80:c2:00:00:0e
> destination. Would every check in raw_recv() still pass in that case?
> 
> Could raw_recv() also compare the source MAC, sequence_nr and path id
> against the values pkt_send() used for the hsr-header cases?

That could be added. But a if you remove the "has_foreign_header" check
then we should end up with two HSR header at which point we don't have
the expected payload after the HSR header.

> Also, the file header comment says the interface needs to "accept a
> foreign HSR header and prepend its own header". Is that accurate?
> hsr_forward_do() seems to keep the supplied header ("PTP TX packets may
> already have a HSR header which needs to be preserved") and does not
> prepend a new one.

It is accurate. The interface either uses the "foreign HSR header" _or_
"prepend its own header". Both things are checked.

Sebastian

  reply	other threads:[~2026-10-12 15:56 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-02 13:01 [PATCH net-next v8 0/8] hsr: Add additional info to send/ receive skbs Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 1/8] hsr: Add header_ops::parse_protocol Sebastian Andrzej Siewior
2026-10-06 14:31   ` netdev-bot+sashiko
2026-10-12 13:13     ` Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 2/8] hsr: Use skb_clone() while adding the HSR header Sebastian Andrzej Siewior
2026-10-06 14:31   ` netdev-bot+sashiko
2026-10-12 16:00     ` Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 3/8] hsr: Add a magic header for sending PTP packets Sebastian Andrzej Siewior
2026-10-06 14:31   ` netdev-bot+sashiko
2026-10-12 14:40     ` Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 4/8] hsr: Drop received " Sebastian Andrzej Siewior
2026-10-06 14:31   ` netdev-bot+sashiko
2026-10-12 14:49     ` Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 5/8] hsr: Use the port and header information in hsr_forward_skb() Sebastian Andrzej Siewior
2026-10-06 14:31   ` netdev-bot+sashiko
2026-10-12 15:03     ` Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 6/8] hsr: Assign a socket for cloned skbs Sebastian Andrzej Siewior
2026-10-06 14:31   ` netdev-bot+sashiko
2026-10-12 15:33     ` Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 7/8] hsr: Move struct hsr_ethhdr to a global header Sebastian Andrzej Siewior
2026-10-02 13:01 ` [PATCH net-next v8 8/8] selftests: hsr: Add test for the inline PTP header on HSR Sebastian Andrzej Siewior
2026-10-06 14:31   ` netdev-bot+sashiko
2026-10-12 15:56     ` Sebastian Andrzej Siewior [this message]
2026-10-05 12:16 ` [PATCH net-next v8 0/8] hsr: Add additional info to send/ receive skbs Daniel Machon
2026-10-12 12:52   ` Sebastian Andrzej Siewior

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=20261012155616.4XXTteGo@linutronix.de \
    --to=bigeasy@linutronix.de \
    --cc=andrew+netdev@lunn.ch \
    --cc=c-vankar@ti.com \
    --cc=d-qiu@ti.com \
    --cc=danishanwar@ti.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=fmaurer@redhat.com \
    --cc=horms@kernel.org \
    --cc=j-rameshbabu@ti.com \
    --cc=kuba@kernel.org \
    --cc=neelima@ti.com \
    --cc=netdev-bot+sashiko@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=praneeth@ti.com \
    --cc=pratheesh@ti.com \
    --cc=richardcochran@gmail.com \
    --cc=vigneshr@ti.com \
    --cc=willemdebruijn.kernel@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox