diff mbox series

[v2] net: hsr: Use correct offset for HSR TLV values in supervisory HSR frames

Message ID 20240228085644.3618044-1-lukma@denx.de (mailing list archive)
State Accepted
Commit 51dd4ee0372228ffb0f7709fa7aa0678d4199d06
Delegated to: Netdev Maintainers
Headers show
Series [v2] net: hsr: Use correct offset for HSR TLV values in supervisory HSR frames | expand

Checks

Context Check Description
netdev/series_format warning Single patches do not need cover letters; Target tree name not specified in the subject
netdev/tree_selection success Guessed tree name to be net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 940 this patch: 940
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers fail 1 blamed authors not CCed: ennoerlangen@gmail.com; 3 maintainers not CCed: pabeni@redhat.com ennoerlangen@gmail.com dan.carpenter@linaro.org
netdev/build_clang success Errors and warnings before: 957 this patch: 957
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes fail Problems with Fixes tag: 1
netdev/build_allmodconfig_warn success Errors and warnings before: 957 this patch: 957
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 8 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-02-28--18-00 (tests: 882)

Commit Message

Lukasz Majewski Feb. 28, 2024, 8:56 a.m. UTC
Current HSR implementation uses following supervisory frame (even for
HSRv1 the HSR tag is not is not present):

00000000: 01 15 4e 00 01 2d XX YY ZZ 94 77 10 88 fb 00 01
00000010: 7e 1c 17 06 XX YY ZZ 94 77 10 1e 06 XX YY ZZ 94
00000020: 77 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030: 00 00 00 00 00 00 00 00 00 00 00 00

The current code adds extra two bytes (i.e. sizeof(struct hsr_sup_tlv))
when offset for skb_pull() is calculated.
This is wrong, as both 'struct hsrv1_ethhdr_sp' and 'hsrv0_ethhdr_sp'
already have 'struct hsr_sup_tag' defined in them, so there is no need
for adding extra two bytes.

This code was working correctly as with no RedBox support, the check for
HSR_TLV_EOT (0x00) was off by two bytes, which were corresponding to
zeroed padded bytes for minimal packet size.

Fixes: eafaa88b3eb7 ("net: hsr: Add support for redbox supervision frames")

Signed-off-by: Lukasz Majewski <lukma@denx.de>
---
Changes for v2:
- Update commit message to point to correct commit in "Fixes:"

---
 net/hsr/hsr_forward.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jiri Pirko Feb. 28, 2024, 12:31 p.m. UTC | #1
Wed, Feb 28, 2024 at 09:56:44AM CET, lukma@denx.de wrote:
>Current HSR implementation uses following supervisory frame (even for
>HSRv1 the HSR tag is not is not present):
>
>00000000: 01 15 4e 00 01 2d XX YY ZZ 94 77 10 88 fb 00 01
>00000010: 7e 1c 17 06 XX YY ZZ 94 77 10 1e 06 XX YY ZZ 94
>00000020: 77 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>00000030: 00 00 00 00 00 00 00 00 00 00 00 00
>
>The current code adds extra two bytes (i.e. sizeof(struct hsr_sup_tlv))
>when offset for skb_pull() is calculated.
>This is wrong, as both 'struct hsrv1_ethhdr_sp' and 'hsrv0_ethhdr_sp'
>already have 'struct hsr_sup_tag' defined in them, so there is no need
>for adding extra two bytes.
>
>This code was working correctly as with no RedBox support, the check for
>HSR_TLV_EOT (0x00) was off by two bytes, which were corresponding to
>zeroed padded bytes for minimal packet size.
>
>Fixes: eafaa88b3eb7 ("net: hsr: Add support for redbox supervision frames")
>

And yet the extra empty line is still here :/


>Signed-off-by: Lukasz Majewski <lukma@denx.de>

Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Paolo Abeni Feb. 29, 2024, 10:10 a.m. UTC | #2
On Wed, 2024-02-28 at 13:31 +0100, Jiri Pirko wrote:
> Wed, Feb 28, 2024 at 09:56:44AM CET, lukma@denx.de wrote:
> > Current HSR implementation uses following supervisory frame (even for
> > HSRv1 the HSR tag is not is not present):
> > 
> > 00000000: 01 15 4e 00 01 2d XX YY ZZ 94 77 10 88 fb 00 01
> > 00000010: 7e 1c 17 06 XX YY ZZ 94 77 10 1e 06 XX YY ZZ 94
> > 00000020: 77 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> > 00000030: 00 00 00 00 00 00 00 00 00 00 00 00
> > 
> > The current code adds extra two bytes (i.e. sizeof(struct hsr_sup_tlv))
> > when offset for skb_pull() is calculated.
> > This is wrong, as both 'struct hsrv1_ethhdr_sp' and 'hsrv0_ethhdr_sp'
> > already have 'struct hsr_sup_tag' defined in them, so there is no need
> > for adding extra two bytes.
> > 
> > This code was working correctly as with no RedBox support, the check for
> > HSR_TLV_EOT (0x00) was off by two bytes, which were corresponding to
> > zeroed padded bytes for minimal packet size.
> > 
> > Fixes: eafaa88b3eb7 ("net: hsr: Add support for redbox supervision frames")
> > 
> 
> And yet the extra empty line is still here :/

To avoid more back & forth on otherwise correct patch, I'll fix this
while applying the patch. I hope it's clear to everybody this is an
exception and not the new normal :)

> > Signed-off-by: Lukasz Majewski <lukma@denx.de>

Please have a better look to the Documentation before the next post,
and use the checkpatch script before the submission.

Thanks,

Paolo
patchwork-bot+netdevbpf@kernel.org Feb. 29, 2024, 10:20 a.m. UTC | #3
Hello:

This patch was applied to netdev/net.git (main)
by Paolo Abeni <pabeni@redhat.com>:

On Wed, 28 Feb 2024 09:56:44 +0100 you wrote:
> Current HSR implementation uses following supervisory frame (even for
> HSRv1 the HSR tag is not is not present):
> 
> 00000000: 01 15 4e 00 01 2d XX YY ZZ 94 77 10 88 fb 00 01
> 00000010: 7e 1c 17 06 XX YY ZZ 94 77 10 1e 06 XX YY ZZ 94
> 00000020: 77 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 00000030: 00 00 00 00 00 00 00 00 00 00 00 00
> 
> [...]

Here is the summary with links:
  - [v2] net: hsr: Use correct offset for HSR TLV values in supervisory HSR frames
    https://git.kernel.org/netdev/net/c/51dd4ee03722

You are awesome, thank you!
diff mbox series

Patch

diff --git a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c
index 2afe28712a7a..5d68cb181695 100644
--- a/net/hsr/hsr_forward.c
+++ b/net/hsr/hsr_forward.c
@@ -83,7 +83,7 @@  static bool is_supervision_frame(struct hsr_priv *hsr, struct sk_buff *skb)
 		return false;
 
 	/* Get next tlv */
-	total_length += sizeof(struct hsr_sup_tlv) + hsr_sup_tag->tlv.HSR_TLV_length;
+	total_length += hsr_sup_tag->tlv.HSR_TLV_length;
 	if (!pskb_may_pull(skb, total_length))
 		return false;
 	skb_pull(skb, total_length);