* [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation
@ 2026-05-13 18:26 luka.gejak
2026-05-13 18:26 ` [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV luka.gejak
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: luka.gejak @ 2026-05-13 18:26 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, fmaurer, luka.gejak
From: Luka Gejak <luka.gejak@linux.dev>
Changes in v6:
- Dropped capitalization comment changes per request of Jakub Kicinski
Changes in v5:
- Reverted TLV loop in Patch 1 to strict sequential parsing per IEC
62439-3.
- Retained pskb_may_pull() logic to ensure memory safety for TLV
headers.
- Dropped Reviewed-by from Patch 1 due to the logic evolving since
original review.
- Added Assisted-by tag for AI-aided translation and formatting to
both patches.
Changes in v4:
- Split from a 4-patch series into 'net' and 'net-next' as requested.
- Implemented a TLV walker in Patch 1 to correctly handle extension
TLVs and avoid regressions on paged frames/non-linearized skbs.
- Corrected pskb_may_pull() logic to include the TLV header size.
History of pre-separation series (v1-v3):
Changes in v3:
- addressed Felix review feedback in the VLAN add unwind fix
- removed the superfluous empty line
Changes in v2:
- picked up Reviewed-by tags on patches 1, 3 and 4
- changes in patch 2 per advice of Felix Maurer
Luka Gejak (2):
net: hsr: require valid EOT supervision TLV
net: hsr: reject unresolved interlink ifindex
net/hsr/hsr_forward.c | 6 +++---
net/hsr/hsr_netlink.c | 7 ++++++-
2 files changed, 9 insertions(+), 4 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV
2026-05-13 18:26 [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation luka.gejak
@ 2026-05-13 18:26 ` luka.gejak
2026-05-14 12:55 ` Fernando Fernandez Mancera
2026-05-16 0:33 ` Jakub Kicinski
2026-05-13 18:26 ` [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex luka.gejak
` (2 subsequent siblings)
3 siblings, 2 replies; 9+ messages in thread
From: luka.gejak @ 2026-05-13 18:26 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, fmaurer, luka.gejak
From: Luka Gejak <luka.gejak@linux.dev>
Supervision frames are only valid if terminated with a zero-length EOT
TLV. The current check fails to reject non-EOT entries as the terminal
TLV, potentially allowing malformed supervision traffic.
Fix this by strictly requiring the terminal TLV to be HSR_TLV_EOT
with a length of zero, and properly linearizing the TLV header before
access.
Assisted-by: Gemini:Gemini-3.1-flash
Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
---
net/hsr/hsr_forward.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c
index 0aca859c88cb..0774981a65c1 100644
--- a/net/hsr/hsr_forward.c
+++ b/net/hsr/hsr_forward.c
@@ -84,7 +84,7 @@ static bool is_supervision_frame(struct hsr_priv *hsr, struct sk_buff *skb)
/* Get next tlv */
total_length += hsr_sup_tag->tlv.HSR_TLV_length;
- if (!pskb_may_pull(skb, total_length))
+ if (!pskb_may_pull(skb, total_length + sizeof(struct hsr_sup_tlv)))
return false;
skb_pull(skb, total_length);
hsr_sup_tlv = (struct hsr_sup_tlv *)skb->data;
@@ -100,7 +100,7 @@ static bool is_supervision_frame(struct hsr_priv *hsr, struct sk_buff *skb)
/* make sure another tlv follows */
total_length += sizeof(struct hsr_sup_tlv) + hsr_sup_tlv->HSR_TLV_length;
- if (!pskb_may_pull(skb, total_length))
+ if (!pskb_may_pull(skb, total_length + sizeof(struct hsr_sup_tlv)))
return false;
/* get next tlv */
@@ -110,7 +110,7 @@ static bool is_supervision_frame(struct hsr_priv *hsr, struct sk_buff *skb)
}
/* end of tlvs must follow at the end */
- if (hsr_sup_tlv->HSR_TLV_type == HSR_TLV_EOT &&
+ if (hsr_sup_tlv->HSR_TLV_type != HSR_TLV_EOT ||
hsr_sup_tlv->HSR_TLV_length != 0)
return false;
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV
2026-05-13 18:26 ` [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV luka.gejak
@ 2026-05-14 12:55 ` Fernando Fernandez Mancera
2026-05-16 0:33 ` Jakub Kicinski
1 sibling, 0 replies; 9+ messages in thread
From: Fernando Fernandez Mancera @ 2026-05-14 12:55 UTC (permalink / raw)
To: luka.gejak, netdev; +Cc: davem, edumazet, kuba, pabeni, fmaurer
On 5/13/26 8:26 PM, luka.gejak@linux.dev wrote:
> From: Luka Gejak <luka.gejak@linux.dev>
>
> Supervision frames are only valid if terminated with a zero-length EOT
> TLV. The current check fails to reject non-EOT entries as the terminal
> TLV, potentially allowing malformed supervision traffic.
>
> Fix this by strictly requiring the terminal TLV to be HSR_TLV_EOT
> with a length of zero, and properly linearizing the TLV header before
> access.
>
> Assisted-by: Gemini:Gemini-3.1-flash
> Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV
2026-05-13 18:26 ` [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV luka.gejak
2026-05-14 12:55 ` Fernando Fernandez Mancera
@ 2026-05-16 0:33 ` Jakub Kicinski
1 sibling, 0 replies; 9+ messages in thread
From: Jakub Kicinski @ 2026-05-16 0:33 UTC (permalink / raw)
To: luka.gejak; +Cc: netdev, davem, edumazet, pabeni, fmaurer
On Wed, 13 May 2026 20:26:56 +0200 luka.gejak@linux.dev wrote:
> @@ -100,7 +100,7 @@ static bool is_supervision_frame(struct hsr_priv *hsr, struct sk_buff *skb)
>
> /* make sure another tlv follows */
> total_length += sizeof(struct hsr_sup_tlv) + hsr_sup_tlv->HSR_TLV_length;
> - if (!pskb_may_pull(skb, total_length))
> + if (!pskb_may_pull(skb, total_length + sizeof(struct hsr_sup_tlv)))
> return false;
pskb_may_pull() changes should go to net?
Someone sending truncated frame may cause an OOB access and crash?
> @@ -110,7 +110,7 @@ static bool is_supervision_frame(struct hsr_priv *hsr, struct sk_buff *skb)
> }
>
> /* end of tlvs must follow at the end */
> - if (hsr_sup_tlv->HSR_TLV_type == HSR_TLV_EOT &&
> + if (hsr_sup_tlv->HSR_TLV_type != HSR_TLV_EOT ||
> hsr_sup_tlv->HSR_TLV_length != 0)
> return false;
And this chunk can go to net-next.
I'll apply patch 2 already, looks uncontroversial
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex
2026-05-13 18:26 [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation luka.gejak
2026-05-13 18:26 ` [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV luka.gejak
@ 2026-05-13 18:26 ` luka.gejak
2026-05-14 12:55 ` Fernando Fernandez Mancera
2026-05-13 18:35 ` [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation Luka Gejak
2026-05-16 0:40 ` patchwork-bot+netdevbpf
3 siblings, 1 reply; 9+ messages in thread
From: luka.gejak @ 2026-05-13 18:26 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, fmaurer, luka.gejak
From: Luka Gejak <luka.gejak@linux.dev>
In hsr_newlink(), a provided but invalid IFLA_HSR_INTERLINK attribute
was silently ignored if __dev_get_by_index() returned NULL. This leads
to incorrect RedBox topology creation without notifying the user.
Fix this by returning -EINVAL and an extack message when the
interlink attribute is present but cannot be resolved.
Assisted-by: Gemini:Gemini-3.1-flash
Reviewed-by: Felix Maurer <fmaurer@redhat.com>
Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
---
net/hsr/hsr_netlink.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
index db0b0af7a692..f0ca23da3ab9 100644
--- a/net/hsr/hsr_netlink.c
+++ b/net/hsr/hsr_netlink.c
@@ -76,9 +76,14 @@ static int hsr_newlink(struct net_device *dev,
return -EINVAL;
}
- if (data[IFLA_HSR_INTERLINK])
+ if (data[IFLA_HSR_INTERLINK]) {
interlink = __dev_get_by_index(link_net,
nla_get_u32(data[IFLA_HSR_INTERLINK]));
+ if (!interlink) {
+ NL_SET_ERR_MSG_MOD(extack, "Interlink does not exist");
+ return -EINVAL;
+ }
+ }
if (interlink && interlink == link[0]) {
NL_SET_ERR_MSG_MOD(extack, "Interlink and Slave1 are the same");
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex
2026-05-13 18:26 ` [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex luka.gejak
@ 2026-05-14 12:55 ` Fernando Fernandez Mancera
0 siblings, 0 replies; 9+ messages in thread
From: Fernando Fernandez Mancera @ 2026-05-14 12:55 UTC (permalink / raw)
To: luka.gejak, netdev; +Cc: davem, edumazet, kuba, pabeni, fmaurer
On 5/13/26 8:26 PM, luka.gejak@linux.dev wrote:
> From: Luka Gejak <luka.gejak@linux.dev>
>
> In hsr_newlink(), a provided but invalid IFLA_HSR_INTERLINK attribute
> was silently ignored if __dev_get_by_index() returned NULL. This leads
> to incorrect RedBox topology creation without notifying the user.
>
> Fix this by returning -EINVAL and an extack message when the
> interlink attribute is present but cannot be resolved.
>
> Assisted-by: Gemini:Gemini-3.1-flash
> Reviewed-by: Felix Maurer <fmaurer@redhat.com>
> Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
Thanks!
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation
2026-05-13 18:26 [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation luka.gejak
2026-05-13 18:26 ` [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV luka.gejak
2026-05-13 18:26 ` [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex luka.gejak
@ 2026-05-13 18:35 ` Luka Gejak
2026-05-16 0:40 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 9+ messages in thread
From: Luka Gejak @ 2026-05-13 18:35 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, kuba, pabeni, fmaurer, luka.gejak
On May 13, 2026 8:26:55 PM GMT+02:00, luka.gejak@linux.dev wrote:
>From: Luka Gejak <luka.gejak@linux.dev>
>
...
>Luka Gejak (2):
> net: hsr: require valid EOT supervision TLV
> net: hsr: reject unresolved interlink ifindex
>
> net/hsr/hsr_forward.c | 6 +++---
> net/hsr/hsr_netlink.c | 7 ++++++-
> 2 files changed, 9 insertions(+), 4 deletions(-)
>
Just one note: This series has been resubmitted because it was never
merged due to window being closed and I was instructed by Felix to
resubmit it now. Link to old thread is [1].
Best regards,
Luka Gejak
[1]: https://lore.kernel.org/netdev/20260413103449.169913-1-luka.gejak@linux.dev/
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation
2026-05-13 18:26 [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation luka.gejak
` (2 preceding siblings ...)
2026-05-13 18:35 ` [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation Luka Gejak
@ 2026-05-16 0:40 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 9+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-05-16 0:40 UTC (permalink / raw)
To: Luka Gejak; +Cc: netdev, davem, edumazet, kuba, pabeni, fmaurer
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 13 May 2026 20:26:55 +0200 you wrote:
> From: Luka Gejak <luka.gejak@linux.dev>
>
> Changes in v6:
> - Dropped capitalization comment changes per request of Jakub Kicinski
>
> Changes in v5:
> - Reverted TLV loop in Patch 1 to strict sequential parsing per IEC
> 62439-3.
> - Retained pskb_may_pull() logic to ensure memory safety for TLV
> headers.
> - Dropped Reviewed-by from Patch 1 due to the logic evolving since
> original review.
> - Added Assisted-by tag for AI-aided translation and formatting to
> both patches.
>
> [...]
Here is the summary with links:
- [net-next,v6,1/2] net: hsr: require valid EOT supervision TLV
(no matching commit)
- [net-next,v6,2/2] net: hsr: reject unresolved interlink ifindex
https://git.kernel.org/netdev/net-next/c/85ee970039f8
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation
@ 2026-04-13 10:34 luka.gejak
2026-04-13 10:34 ` [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex luka.gejak
0 siblings, 1 reply; 9+ messages in thread
From: luka.gejak @ 2026-04-13 10:34 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni; +Cc: netdev, fmaurer, horms, Luka Gejak
From: Luka Gejak <luka.gejak@linux.dev>
Changes in v6:
- Dropped capitalization comment changes per request of Jakub Kicinski
Changes in v5:
- Reverted TLV loop in Patch 1 to strict sequential parsing per IEC
62439-3.
- Retained pskb_may_pull() logic to ensure memory safety for TLV
headers.
- Dropped Reviewed-by from Patch 1 due to the logic evolving since
original review.
- Added Assisted-by tag for AI-aided translation and formatting to
both patches.
Changes in v4:
- Split from a 4-patch series into 'net' and 'net-next' as requested.
- Implemented a TLV walker in Patch 1 to correctly handle extension
TLVs and avoid regressions on paged frames/non-linearized skbs.
- Corrected pskb_may_pull() logic to include the TLV header size.
History of pre-separation series (v1-v3):
Changes in v3:
- addressed Felix review feedback in the VLAN add unwind fix
- removed the superfluous empty line
Changes in v2:
- picked up Reviewed-by tags on patches 1, 3 and 4
- changes in patch 2 per advice of Felix Maurer
Luka Gejak (2):
net: hsr: require valid EOT supervision TLV
net: hsr: reject unresolved interlink ifindex
net/hsr/hsr_forward.c | 6 +++---
net/hsr/hsr_netlink.c | 7 ++++++-
2 files changed, 9 insertions(+), 4 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex
2026-04-13 10:34 luka.gejak
@ 2026-04-13 10:34 ` luka.gejak
0 siblings, 0 replies; 9+ messages in thread
From: luka.gejak @ 2026-04-13 10:34 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni; +Cc: netdev, fmaurer, horms, Luka Gejak
From: Luka Gejak <luka.gejak@linux.dev>
In hsr_newlink(), a provided but invalid IFLA_HSR_INTERLINK attribute
was silently ignored if __dev_get_by_index() returned NULL. This leads
to incorrect RedBox topology creation without notifying the user.
Fix this by returning -EINVAL and an extack message when the
interlink attribute is present but cannot be resolved.
Assisted-by: Gemini:Gemini-3.1-flash
Reviewed-by: Felix Maurer <fmaurer@redhat.com>
Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
---
net/hsr/hsr_netlink.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
index db0b0af7a692..f0ca23da3ab9 100644
--- a/net/hsr/hsr_netlink.c
+++ b/net/hsr/hsr_netlink.c
@@ -76,9 +76,14 @@ static int hsr_newlink(struct net_device *dev,
return -EINVAL;
}
- if (data[IFLA_HSR_INTERLINK])
+ if (data[IFLA_HSR_INTERLINK]) {
interlink = __dev_get_by_index(link_net,
nla_get_u32(data[IFLA_HSR_INTERLINK]));
+ if (!interlink) {
+ NL_SET_ERR_MSG_MOD(extack, "Interlink does not exist");
+ return -EINVAL;
+ }
+ }
if (interlink && interlink == link[0]) {
NL_SET_ERR_MSG_MOD(extack, "Interlink and Slave1 are the same");
--
2.53.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-05-16 0:39 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-13 18:26 [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation luka.gejak
2026-05-13 18:26 ` [PATCH net-next v6 1/2] net: hsr: require valid EOT supervision TLV luka.gejak
2026-05-14 12:55 ` Fernando Fernandez Mancera
2026-05-16 0:33 ` Jakub Kicinski
2026-05-13 18:26 ` [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex luka.gejak
2026-05-14 12:55 ` Fernando Fernandez Mancera
2026-05-13 18:35 ` [PATCH net-next v6 0/2] net: hsr: strict supervision TLV validation Luka Gejak
2026-05-16 0:40 ` patchwork-bot+netdevbpf
-- strict thread matches above, loose matches on Subject: below --
2026-04-13 10:34 luka.gejak
2026-04-13 10:34 ` [PATCH net-next v6 2/2] net: hsr: reject unresolved interlink ifindex luka.gejak
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.