* [PATCH v13 nf-next 0/3] conntrack: bridge: add double vlan, pppoe and pppoe-in-q
@ 2025-07-04 19:11 Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader Eric Woudstra
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Eric Woudstra @ 2025-07-04 19:11 UTC (permalink / raw)
To: Pablo Neira Ayuso, Jozsef Kadlecsik, Nikolay Aleksandrov,
Ido Schimmel, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: netfilter-devel, bridge, netdev, Eric Woudstra
Conntrack bridge only tracks untagged and 802.1q.
To make the bridge-fastpath experience more similar to the
forward-fastpath experience, add double vlan, pppoe and pppoe-in-q
tagged packets to bridge conntrack and to bridge filter chain.
Changes in v13:
- Do not use pull/push before/after calling nf_conntrack_in() or
nft_do_chain().
- Add patch to correct calculating checksum when skb->data !=
skb_network_header(skb).
Changes in v12:
- Only allow tracking this traffic when a conntrack zone is set.
- nf_ct_bridge_pre(): skb pull/push without touching the checksum,
because the pull is always restored with push.
- nft_do_chain_bridge(): handle the extra header similar to
nf_ct_bridge_pre(), using pull/push.
Changes in v11:
- nft_do_chain_bridge(): Proper readout of encapsulated proto.
- nft_do_chain_bridge(): Use skb_set_network_header() instead of thoff.
- removed test script, it is now in separate patch.
v10 split from patch-set: bridge-fastpath and related improvements v9
Eric Woudstra (3):
netfilter: utils: nf_checksum(_partial) correct data!=networkheader
netfilter: bridge: Add conntrack double vlan and pppoe
netfilter: nft_chain_filter: Add bridge double vlan and pppoe
net/bridge/netfilter/nf_conntrack_bridge.c | 88 ++++++++++++++++++----
net/netfilter/nft_chain_filter.c | 52 ++++++++++++-
net/netfilter/utils.c | 22 ++++--
3 files changed, 139 insertions(+), 23 deletions(-)
--
2.47.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
2025-07-04 19:11 [PATCH v13 nf-next 0/3] conntrack: bridge: add double vlan, pppoe and pppoe-in-q Eric Woudstra
@ 2025-07-04 19:11 ` Eric Woudstra
2025-07-04 19:39 ` Florian Westphal
` (2 more replies)
2025-07-04 19:11 ` [PATCH v13 nf-next 2/3] netfilter: bridge: Add conntrack double vlan and pppoe Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 3/3] netfilter: nft_chain_filter: Add bridge " Eric Woudstra
2 siblings, 3 replies; 9+ messages in thread
From: Eric Woudstra @ 2025-07-04 19:11 UTC (permalink / raw)
To: Pablo Neira Ayuso, Jozsef Kadlecsik, Nikolay Aleksandrov,
Ido Schimmel, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: netfilter-devel, bridge, netdev, Eric Woudstra
In the conntrack hook it may not always be the case that:
skb_network_header(skb) == skb->data.
This is problematic when L4 function nf_conntrack_handle_packet()
is accessing L3 data. This function uses thoff and ip_hdr()
to finds it's data. But it also calculates the checksum.
nf_checksum() and nf_checksum_partial() both use lower skb-checksum
functions that are based on using skb->data.
When skb_network_header(skb) != skb->data, adjust accordingly,
so that the checksum is calculated correctly.
Signed-off-by: Eric Woudstra <ericwouds@gmail.com>
---
net/netfilter/utils.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/net/netfilter/utils.c b/net/netfilter/utils.c
index 008419db815a..daee035c25b8 100644
--- a/net/netfilter/utils.c
+++ b/net/netfilter/utils.c
@@ -124,16 +124,21 @@ __sum16 nf_checksum(struct sk_buff *skb, unsigned int hook,
unsigned int dataoff, u8 protocol,
unsigned short family)
{
+ unsigned int nhpull = skb_network_header(skb) - skb->data;
__sum16 csum = 0;
+ if (!pskb_may_pull(skb, nhpull))
+ return -ENOMEM;
+ __skb_pull(skb, nhpull);
switch (family) {
case AF_INET:
- csum = nf_ip_checksum(skb, hook, dataoff, protocol);
+ csum = nf_ip_checksum(skb, hook, dataoff - nhpull, protocol);
break;
case AF_INET6:
- csum = nf_ip6_checksum(skb, hook, dataoff, protocol);
+ csum = nf_ip6_checksum(skb, hook, dataoff - nhpull, protocol);
break;
}
+ __skb_push(skb, nhpull);
return csum;
}
@@ -143,18 +148,23 @@ __sum16 nf_checksum_partial(struct sk_buff *skb, unsigned int hook,
unsigned int dataoff, unsigned int len,
u8 protocol, unsigned short family)
{
+ unsigned int nhpull = skb_network_header(skb) - skb->data;
__sum16 csum = 0;
+ if (!pskb_may_pull(skb, nhpull))
+ return -ENOMEM;
+ __skb_pull(skb, nhpull);
switch (family) {
case AF_INET:
- csum = nf_ip_checksum_partial(skb, hook, dataoff, len,
- protocol);
+ csum = nf_ip_checksum_partial(skb, hook, dataoff - nhpull,
+ len, protocol);
break;
case AF_INET6:
- csum = nf_ip6_checksum_partial(skb, hook, dataoff, len,
- protocol);
+ csum = nf_ip6_checksum_partial(skb, hook, dataoff - nhpull,
+ len, protocol);
break;
}
+ __skb_push(skb, nhpull);
return csum;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v13 nf-next 2/3] netfilter: bridge: Add conntrack double vlan and pppoe
2025-07-04 19:11 [PATCH v13 nf-next 0/3] conntrack: bridge: add double vlan, pppoe and pppoe-in-q Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader Eric Woudstra
@ 2025-07-04 19:11 ` Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 3/3] netfilter: nft_chain_filter: Add bridge " Eric Woudstra
2 siblings, 0 replies; 9+ messages in thread
From: Eric Woudstra @ 2025-07-04 19:11 UTC (permalink / raw)
To: Pablo Neira Ayuso, Jozsef Kadlecsik, Nikolay Aleksandrov,
Ido Schimmel, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: netfilter-devel, bridge, netdev, Eric Woudstra
This adds the capability to conntrack 802.1ad, QinQ, PPPoE and PPPoE-in-Q
packets that are passing a bridge, only when a conntrack zone is set.
Signed-off-by: Eric Woudstra <ericwouds@gmail.com>
---
net/bridge/netfilter/nf_conntrack_bridge.c | 88 ++++++++++++++++++----
1 file changed, 72 insertions(+), 16 deletions(-)
diff --git a/net/bridge/netfilter/nf_conntrack_bridge.c b/net/bridge/netfilter/nf_conntrack_bridge.c
index 6482de4d8750..5fcb1bdf2e31 100644
--- a/net/bridge/netfilter/nf_conntrack_bridge.c
+++ b/net/bridge/netfilter/nf_conntrack_bridge.c
@@ -242,53 +242,109 @@ static unsigned int nf_ct_bridge_pre(void *priv, struct sk_buff *skb,
{
struct nf_hook_state bridge_state = *state;
enum ip_conntrack_info ctinfo;
+ u32 len, data_len = U32_MAX;
+ int ret, offset = 0;
struct nf_conn *ct;
- u32 len;
- int ret;
+ __be16 outer_proto;
ct = nf_ct_get(skb, &ctinfo);
if ((ct && !nf_ct_is_template(ct)) ||
ctinfo == IP_CT_UNTRACKED)
return NF_ACCEPT;
+ if (ct && nf_ct_zone_id(nf_ct_zone(ct), CTINFO2DIR(ctinfo)) !=
+ NF_CT_DEFAULT_ZONE_ID) {
+ switch (skb->protocol) {
+ case htons(ETH_P_PPP_SES): {
+ struct ppp_hdr {
+ struct pppoe_hdr hdr;
+ __be16 proto;
+ } *ph;
+
+ offset = PPPOE_SES_HLEN;
+ if (!pskb_may_pull(skb, offset))
+ return NF_ACCEPT;
+ outer_proto = skb->protocol;
+ ph = (struct ppp_hdr *)(skb->data);
+ switch (ph->proto) {
+ case htons(PPP_IP):
+ skb->protocol = htons(ETH_P_IP);
+ break;
+ case htons(PPP_IPV6):
+ skb->protocol = htons(ETH_P_IPV6);
+ break;
+ default:
+ nf_ct_set(skb, NULL, IP_CT_UNTRACKED);
+ return NF_ACCEPT;
+ }
+ data_len = ntohs(ph->hdr.length) - 2;
+ skb_set_network_header(skb, offset);
+ break;
+ }
+ case htons(ETH_P_8021Q): {
+ struct vlan_hdr *vhdr;
+
+ offset = VLAN_HLEN;
+ if (!pskb_may_pull(skb, offset))
+ return NF_ACCEPT;
+ outer_proto = skb->protocol;
+ vhdr = (struct vlan_hdr *)(skb->data);
+ skb->protocol = vhdr->h_vlan_encapsulated_proto;
+ data_len = U32_MAX;
+ skb_set_network_header(skb, offset);
+ break;
+ }
+ }
+ }
+
+ ret = NF_ACCEPT;
switch (skb->protocol) {
case htons(ETH_P_IP):
- if (!pskb_may_pull(skb, sizeof(struct iphdr)))
- return NF_ACCEPT;
+ if (!pskb_may_pull(skb, offset + sizeof(struct iphdr)))
+ goto do_not_track;
len = skb_ip_totlen(skb);
- if (pskb_trim_rcsum(skb, len))
- return NF_ACCEPT;
+ if (data_len < len)
+ len = data_len;
+ if (pskb_trim_rcsum(skb, len + offset))
+ goto do_not_track;
if (nf_ct_br_ip_check(skb))
- return NF_ACCEPT;
+ goto do_not_track;
bridge_state.pf = NFPROTO_IPV4;
ret = nf_ct_br_defrag4(skb, &bridge_state);
break;
case htons(ETH_P_IPV6):
- if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
- return NF_ACCEPT;
+ if (!pskb_may_pull(skb, offset + sizeof(struct ipv6hdr)))
+ goto do_not_track;
len = sizeof(struct ipv6hdr) + ntohs(ipv6_hdr(skb)->payload_len);
- if (pskb_trim_rcsum(skb, len))
- return NF_ACCEPT;
+ if (data_len < len)
+ len = data_len;
+ if (pskb_trim_rcsum(skb, len + offset))
+ goto do_not_track;
if (nf_ct_br_ipv6_check(skb))
- return NF_ACCEPT;
+ goto do_not_track;
bridge_state.pf = NFPROTO_IPV6;
ret = nf_ct_br_defrag6(skb, &bridge_state);
break;
default:
nf_ct_set(skb, NULL, IP_CT_UNTRACKED);
- return NF_ACCEPT;
+ goto do_not_track;
}
- if (ret != NF_ACCEPT)
- return ret;
+ if (ret == NF_ACCEPT)
+ ret = nf_conntrack_in(skb, &bridge_state);
- return nf_conntrack_in(skb, &bridge_state);
+do_not_track:
+ if (offset) {
+ skb_reset_network_header(skb);
+ skb->protocol = outer_proto;
+ }
+ return ret;
}
static unsigned int nf_ct_bridge_in(void *priv, struct sk_buff *skb,
--
2.47.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v13 nf-next 3/3] netfilter: nft_chain_filter: Add bridge double vlan and pppoe
2025-07-04 19:11 [PATCH v13 nf-next 0/3] conntrack: bridge: add double vlan, pppoe and pppoe-in-q Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 2/3] netfilter: bridge: Add conntrack double vlan and pppoe Eric Woudstra
@ 2025-07-04 19:11 ` Eric Woudstra
2025-07-04 20:02 ` Florian Westphal
2 siblings, 1 reply; 9+ messages in thread
From: Eric Woudstra @ 2025-07-04 19:11 UTC (permalink / raw)
To: Pablo Neira Ayuso, Jozsef Kadlecsik, Nikolay Aleksandrov,
Ido Schimmel, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: netfilter-devel, bridge, netdev, Eric Woudstra
This adds the capability to evaluate 802.1ad, QinQ, PPPoE and PPPoE-in-Q
packets in the bridge filter chain.
Signed-off-by: Eric Woudstra <ericwouds@gmail.com>
---
net/netfilter/nft_chain_filter.c | 52 +++++++++++++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/net/netfilter/nft_chain_filter.c b/net/netfilter/nft_chain_filter.c
index 19a553550c76..8445ddfb9cea 100644
--- a/net/netfilter/nft_chain_filter.c
+++ b/net/netfilter/nft_chain_filter.c
@@ -232,11 +232,55 @@ nft_do_chain_bridge(void *priv,
struct sk_buff *skb,
const struct nf_hook_state *state)
{
+ __be16 outer_proto, proto = 0;
struct nft_pktinfo pkt;
+ int ret, offset = 0;
nft_set_pktinfo(&pkt, skb, state);
switch (eth_hdr(skb)->h_proto) {
+ case htons(ETH_P_PPP_SES): {
+ struct ppp_hdr {
+ struct pppoe_hdr hdr;
+ __be16 proto;
+ } *ph;
+
+ if (!pskb_may_pull(skb, PPPOE_SES_HLEN))
+ break;
+ offset = PPPOE_SES_HLEN;
+ outer_proto = skb->protocol;
+ ph = (struct ppp_hdr *)(skb->data);
+ switch (ph->proto) {
+ case htons(PPP_IP):
+ proto = htons(ETH_P_IP);
+ break;
+ case htons(PPP_IPV6):
+ proto = htons(ETH_P_IPV6);
+ break;
+ }
+ skb_set_network_header(skb, offset);
+ skb->protocol = proto;
+ break;
+ }
+ case htons(ETH_P_8021Q): {
+ struct vlan_hdr *vhdr;
+
+ if (!pskb_may_pull(skb, VLAN_HLEN))
+ break;
+ offset = VLAN_HLEN;
+ outer_proto = skb->protocol;
+ vhdr = (struct vlan_hdr *)(skb->data);
+ proto = vhdr->h_vlan_encapsulated_proto;
+ skb_set_network_header(skb, offset);
+ skb->protocol = proto;
+ break;
+ }
+ default:
+ proto = eth_hdr(skb)->h_proto;
+ break;
+ }
+
+ switch (proto) {
case htons(ETH_P_IP):
nft_set_pktinfo_ipv4_validate(&pkt);
break;
@@ -248,7 +292,13 @@ nft_do_chain_bridge(void *priv,
break;
}
- return nft_do_chain(&pkt, priv);
+ ret = nft_do_chain(&pkt, priv);
+
+ if (offset) {
+ skb_reset_network_header(skb);
+ skb->protocol = outer_proto;
+ }
+ return ret;
}
static const struct nft_chain_type nft_chain_filter_bridge = {
--
2.47.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
2025-07-04 19:11 ` [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader Eric Woudstra
@ 2025-07-04 19:39 ` Florian Westphal
2025-07-05 17:33 ` kernel test robot
2025-07-14 19:06 ` Dan Carpenter
2 siblings, 0 replies; 9+ messages in thread
From: Florian Westphal @ 2025-07-04 19:39 UTC (permalink / raw)
To: Eric Woudstra
Cc: Pablo Neira Ayuso, Jozsef Kadlecsik, Nikolay Aleksandrov,
Ido Schimmel, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman, netfilter-devel, bridge, netdev
Eric Woudstra <ericwouds@gmail.com> wrote:
> In the conntrack hook it may not always be the case that:
> skb_network_header(skb) == skb->data.
>
> This is problematic when L4 function nf_conntrack_handle_packet()
> is accessing L3 data. This function uses thoff and ip_hdr()
> to finds it's data. But it also calculates the checksum.
> nf_checksum() and nf_checksum_partial() both use lower skb-checksum
> functions that are based on using skb->data.
>
> When skb_network_header(skb) != skb->data, adjust accordingly,
> so that the checksum is calculated correctly.
>
> Signed-off-by: Eric Woudstra <ericwouds@gmail.com>
> ---
> net/netfilter/utils.c | 22 ++++++++++++++++------
> 1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/net/netfilter/utils.c b/net/netfilter/utils.c
> index 008419db815a..daee035c25b8 100644
> --- a/net/netfilter/utils.c
> +++ b/net/netfilter/utils.c
> @@ -124,16 +124,21 @@ __sum16 nf_checksum(struct sk_buff *skb, unsigned int hook,
> unsigned int dataoff, u8 protocol,
> unsigned short family)
> {
> + unsigned int nhpull = skb_network_header(skb) - skb->data;
> __sum16 csum = 0;
>
> + if (!pskb_may_pull(skb, nhpull))
> + return -ENOMEM;
Hmm. Not sure about this. We should really audit all conntrack users
to make sure the network header is in the linear area, i.e.
ip_hdr() and friends return the right value, even though skb->data !=
skb_network_header().
Such may_pull, in case of skb->head reallocation, invalidate a pointer
to e.g. ethernet header in the caller.
No idea if we have callers that do this, I did not check, but such
"hidden" pulls tend to cause hard to spot bugs.
Maybe use
if (WARN_ON_ONCE(skb_pointer_if_linear())
return 0;
instead? That allows to track down any offenders. Given conntrack
takes presence of the l3 header in the linear area for granted, I don't
see how this can ever trigger. You could also use
DEBUG_NET_WARN_ON_ONCE if you prefer, given this condition should never
be true anyway.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v13 nf-next 3/3] netfilter: nft_chain_filter: Add bridge double vlan and pppoe
2025-07-04 19:11 ` [PATCH v13 nf-next 3/3] netfilter: nft_chain_filter: Add bridge " Eric Woudstra
@ 2025-07-04 20:02 ` Florian Westphal
0 siblings, 0 replies; 9+ messages in thread
From: Florian Westphal @ 2025-07-04 20:02 UTC (permalink / raw)
To: Eric Woudstra
Cc: Pablo Neira Ayuso, Jozsef Kadlecsik, Nikolay Aleksandrov,
Ido Schimmel, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman, netfilter-devel, bridge, netdev
Eric Woudstra <ericwouds@gmail.com> wrote:
> This adds the capability to evaluate 802.1ad, QinQ, PPPoE and PPPoE-in-Q
> packets in the bridge filter chain.
>
> Signed-off-by: Eric Woudstra <ericwouds@gmail.com>
> ---
> net/netfilter/nft_chain_filter.c | 52 +++++++++++++++++++++++++++++++-
> 1 file changed, 51 insertions(+), 1 deletion(-)
>
> diff --git a/net/netfilter/nft_chain_filter.c b/net/netfilter/nft_chain_filter.c
> index 19a553550c76..8445ddfb9cea 100644
> --- a/net/netfilter/nft_chain_filter.c
> +++ b/net/netfilter/nft_chain_filter.c
> @@ -232,11 +232,55 @@ nft_do_chain_bridge(void *priv,
> struct sk_buff *skb,
> const struct nf_hook_state *state)
> {
> + __be16 outer_proto, proto = 0;
> struct nft_pktinfo pkt;
> + int ret, offset = 0;
>
> nft_set_pktinfo(&pkt, skb, state);
>
> switch (eth_hdr(skb)->h_proto) {
> + case htons(ETH_P_PPP_SES): {
> + struct ppp_hdr {
> + struct pppoe_hdr hdr;
> + __be16 proto;
> + } *ph;
> +
> + if (!pskb_may_pull(skb, PPPOE_SES_HLEN))
> + break;
> + offset = PPPOE_SES_HLEN;
> + outer_proto = skb->protocol;
> + ph = (struct ppp_hdr *)(skb->data);
> + switch (ph->proto) {
> + case htons(PPP_IP):
> + proto = htons(ETH_P_IP);
> + break;
> + case htons(PPP_IPV6):
> + proto = htons(ETH_P_IPV6);
> + break;
> + }
What if ph->proto is neither ipv4 nor ipv6? I don't think
we should clobber skb->protocol or set a new network header in that
case.
> + ret = nft_do_chain(&pkt, priv);
> +
> + if (offset) {
> + skb_reset_network_header(skb);
if ret == NF_STOLEN, skb has already been free'd or is queued
elsewhere and must not be modified anymore.
I would restrict this to ret == NF_ACCEPT.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
2025-07-04 19:11 ` [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader Eric Woudstra
2025-07-04 19:39 ` Florian Westphal
@ 2025-07-05 17:33 ` kernel test robot
2025-07-14 19:06 ` Dan Carpenter
2 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2025-07-05 17:33 UTC (permalink / raw)
To: Eric Woudstra, Pablo Neira Ayuso, Jozsef Kadlecsik,
Nikolay Aleksandrov, Ido Schimmel, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman
Cc: oe-kbuild-all, netdev, netfilter-devel, bridge, Eric Woudstra
Hi Eric,
kernel test robot noticed the following build warnings:
[auto build test WARNING on netfilter-nf/main]
[also build test WARNING on horms-ipvs/master linus/master v6.16-rc4 next-20250704]
[cannot apply to nf-next/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Eric-Woudstra/netfilter-utils-nf_checksum-_partial-correct-data-networkheader/20250705-031418
base: https://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git main
patch link: https://lore.kernel.org/r/20250704191135.1815969-2-ericwouds%40gmail.com
patch subject: [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
config: x86_64-randconfig-121-20250705 (https://download.01.org/0day-ci/archive/20250706/202507060106.A5xgr1Rs-lkp@intel.com/config)
compiler: clang version 20.1.7 (https://github.com/llvm/llvm-project 6146a88f60492b520a36f8f8f3231e15f3cc6082)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250706/202507060106.A5xgr1Rs-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507060106.A5xgr1Rs-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> net/netfilter/utils.c:131:24: sparse: sparse: incorrect type in return expression (different base types) @@ expected restricted __sum16 @@ got int @@
net/netfilter/utils.c:131:24: sparse: expected restricted __sum16
net/netfilter/utils.c:131:24: sparse: got int
net/netfilter/utils.c:155:24: sparse: sparse: incorrect type in return expression (different base types) @@ expected restricted __sum16 @@ got int @@
net/netfilter/utils.c:155:24: sparse: expected restricted __sum16
net/netfilter/utils.c:155:24: sparse: got int
vim +131 net/netfilter/utils.c
122
123 __sum16 nf_checksum(struct sk_buff *skb, unsigned int hook,
124 unsigned int dataoff, u8 protocol,
125 unsigned short family)
126 {
127 unsigned int nhpull = skb_network_header(skb) - skb->data;
128 __sum16 csum = 0;
129
130 if (!pskb_may_pull(skb, nhpull))
> 131 return -ENOMEM;
132 __skb_pull(skb, nhpull);
133 switch (family) {
134 case AF_INET:
135 csum = nf_ip_checksum(skb, hook, dataoff - nhpull, protocol);
136 break;
137 case AF_INET6:
138 csum = nf_ip6_checksum(skb, hook, dataoff - nhpull, protocol);
139 break;
140 }
141 __skb_push(skb, nhpull);
142
143 return csum;
144 }
145 EXPORT_SYMBOL_GPL(nf_checksum);
146
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
@ 2025-07-06 9:17 kernel test robot
0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2025-07-06 9:17 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20250704191135.1815969-2-ericwouds@gmail.com>
References: <20250704191135.1815969-2-ericwouds@gmail.com>
TO: Eric Woudstra <ericwouds@gmail.com>
TO: Pablo Neira Ayuso <pablo@netfilter.org>
TO: Jozsef Kadlecsik <kadlec@netfilter.org>
TO: Nikolay Aleksandrov <razor@blackwall.org>
TO: Ido Schimmel <idosch@nvidia.com>
TO: "David S. Miller" <davem@davemloft.net>
CC: netdev@vger.kernel.org
TO: Eric Dumazet <edumazet@google.com>
TO: Jakub Kicinski <kuba@kernel.org>
TO: Paolo Abeni <pabeni@redhat.com>
TO: Simon Horman <horms@kernel.org>
CC: netfilter-devel@vger.kernel.org
CC: bridge@lists.linux.dev
CC: Eric Woudstra <ericwouds@gmail.com>
Hi Eric,
kernel test robot noticed the following build warnings:
[auto build test WARNING on netfilter-nf/main]
[also build test WARNING on horms-ipvs/master linus/master v6.16-rc4 next-20250704]
[cannot apply to nf-next/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Eric-Woudstra/netfilter-utils-nf_checksum-_partial-correct-data-networkheader/20250705-031418
base: https://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git main
patch link: https://lore.kernel.org/r/20250704191135.1815969-2-ericwouds%40gmail.com
patch subject: [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: x86_64-randconfig-r071-20250706 (https://download.01.org/0day-ci/archive/20250706/202507061710.RCwA4Kjw-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202507061710.RCwA4Kjw-lkp@intel.com/
smatch warnings:
net/netfilter/utils.c:131 nf_checksum() warn: signedness bug returning '(-12)'
net/netfilter/utils.c:155 nf_checksum_partial() warn: signedness bug returning '(-12)'
vim +131 net/netfilter/utils.c
ebee5a50d0b7cd Florian Westphal 2018-06-25 122
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 123 __sum16 nf_checksum(struct sk_buff *skb, unsigned int hook,
ebee5a50d0b7cd Florian Westphal 2018-06-25 124 unsigned int dataoff, u8 protocol,
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 125 unsigned short family)
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 126 {
39644744ee13d9 Eric Woudstra 2025-07-04 127 unsigned int nhpull = skb_network_header(skb) - skb->data;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 128 __sum16 csum = 0;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 129
39644744ee13d9 Eric Woudstra 2025-07-04 130 if (!pskb_may_pull(skb, nhpull))
39644744ee13d9 Eric Woudstra 2025-07-04 @131 return -ENOMEM;
39644744ee13d9 Eric Woudstra 2025-07-04 132 __skb_pull(skb, nhpull);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 133 switch (family) {
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 134 case AF_INET:
39644744ee13d9 Eric Woudstra 2025-07-04 135 csum = nf_ip_checksum(skb, hook, dataoff - nhpull, protocol);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 136 break;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 137 case AF_INET6:
39644744ee13d9 Eric Woudstra 2025-07-04 138 csum = nf_ip6_checksum(skb, hook, dataoff - nhpull, protocol);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 139 break;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 140 }
39644744ee13d9 Eric Woudstra 2025-07-04 141 __skb_push(skb, nhpull);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 142
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 143 return csum;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 144 }
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 145 EXPORT_SYMBOL_GPL(nf_checksum);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 146
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 147 __sum16 nf_checksum_partial(struct sk_buff *skb, unsigned int hook,
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 148 unsigned int dataoff, unsigned int len,
ebee5a50d0b7cd Florian Westphal 2018-06-25 149 u8 protocol, unsigned short family)
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 150 {
39644744ee13d9 Eric Woudstra 2025-07-04 151 unsigned int nhpull = skb_network_header(skb) - skb->data;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 152 __sum16 csum = 0;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 153
39644744ee13d9 Eric Woudstra 2025-07-04 154 if (!pskb_may_pull(skb, nhpull))
39644744ee13d9 Eric Woudstra 2025-07-04 @155 return -ENOMEM;
39644744ee13d9 Eric Woudstra 2025-07-04 156 __skb_pull(skb, nhpull);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 157 switch (family) {
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 158 case AF_INET:
39644744ee13d9 Eric Woudstra 2025-07-04 159 csum = nf_ip_checksum_partial(skb, hook, dataoff - nhpull,
39644744ee13d9 Eric Woudstra 2025-07-04 160 len, protocol);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 161 break;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 162 case AF_INET6:
39644744ee13d9 Eric Woudstra 2025-07-04 163 csum = nf_ip6_checksum_partial(skb, hook, dataoff - nhpull,
39644744ee13d9 Eric Woudstra 2025-07-04 164 len, protocol);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 165 break;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 166 }
39644744ee13d9 Eric Woudstra 2025-07-04 167 __skb_push(skb, nhpull);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 168
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 169 return csum;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 170 }
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 171 EXPORT_SYMBOL_GPL(nf_checksum_partial);
3f87c08c615f56 Pablo Neira Ayuso 2017-11-27 172
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
2025-07-04 19:11 ` [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader Eric Woudstra
2025-07-04 19:39 ` Florian Westphal
2025-07-05 17:33 ` kernel test robot
@ 2025-07-14 19:06 ` Dan Carpenter
2 siblings, 0 replies; 9+ messages in thread
From: Dan Carpenter @ 2025-07-14 19:06 UTC (permalink / raw)
To: oe-kbuild, Eric Woudstra, Pablo Neira Ayuso, Jozsef Kadlecsik,
Nikolay Aleksandrov, Ido Schimmel, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman
Cc: lkp, oe-kbuild-all, netdev, netfilter-devel, bridge,
Eric Woudstra
Hi Eric,
kernel test robot noticed the following build warnings:
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Eric-Woudstra/netfilter-utils-nf_checksum-_partial-correct-data-networkheader/20250705-031418
base: https://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git main
patch link: https://lore.kernel.org/r/20250704191135.1815969-2-ericwouds%40gmail.com
patch subject: [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader
config: x86_64-randconfig-r071-20250706 (https://download.01.org/0day-ci/archive/20250706/202507061710.RCwA4Kjw-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202507061710.RCwA4Kjw-lkp@intel.com/
smatch warnings:
net/netfilter/utils.c:131 nf_checksum() warn: signedness bug returning '(-12)'
net/netfilter/utils.c:155 nf_checksum_partial() warn: signedness bug returning '(-12)'
vim +131 net/netfilter/utils.c
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 123 __sum16 nf_checksum(struct sk_buff *skb, unsigned int hook,
^^^^^^^
ebee5a50d0b7cd Florian Westphal 2018-06-25 124 unsigned int dataoff, u8 protocol,
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 125 unsigned short family)
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 126 {
39644744ee13d9 Eric Woudstra 2025-07-04 127 unsigned int nhpull = skb_network_header(skb) - skb->data;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 128 __sum16 csum = 0;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 129
39644744ee13d9 Eric Woudstra 2025-07-04 130 if (!pskb_may_pull(skb, nhpull))
39644744ee13d9 Eric Woudstra 2025-07-04 @131 return -ENOMEM;
This -ENOMEM doesn't work because the return type is u16.
39644744ee13d9 Eric Woudstra 2025-07-04 132 __skb_pull(skb, nhpull);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 133 switch (family) {
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 134 case AF_INET:
39644744ee13d9 Eric Woudstra 2025-07-04 135 csum = nf_ip_checksum(skb, hook, dataoff - nhpull, protocol);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 136 break;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 137 case AF_INET6:
39644744ee13d9 Eric Woudstra 2025-07-04 138 csum = nf_ip6_checksum(skb, hook, dataoff - nhpull, protocol);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 139 break;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 140 }
39644744ee13d9 Eric Woudstra 2025-07-04 141 __skb_push(skb, nhpull);
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 142
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 143 return csum;
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 144 }
ef71fe27ec2f16 Pablo Neira Ayuso 2017-11-27 145 EXPORT_SYMBOL_GPL(nf_checksum);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 146
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 147 __sum16 nf_checksum_partial(struct sk_buff *skb, unsigned int hook,
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 148 unsigned int dataoff, unsigned int len,
ebee5a50d0b7cd Florian Westphal 2018-06-25 149 u8 protocol, unsigned short family)
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 150 {
39644744ee13d9 Eric Woudstra 2025-07-04 151 unsigned int nhpull = skb_network_header(skb) - skb->data;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 152 __sum16 csum = 0;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 153
39644744ee13d9 Eric Woudstra 2025-07-04 154 if (!pskb_may_pull(skb, nhpull))
39644744ee13d9 Eric Woudstra 2025-07-04 @155 return -ENOMEM;
Same.
39644744ee13d9 Eric Woudstra 2025-07-04 156 __skb_pull(skb, nhpull);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 157 switch (family) {
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 158 case AF_INET:
39644744ee13d9 Eric Woudstra 2025-07-04 159 csum = nf_ip_checksum_partial(skb, hook, dataoff - nhpull,
39644744ee13d9 Eric Woudstra 2025-07-04 160 len, protocol);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 161 break;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 162 case AF_INET6:
39644744ee13d9 Eric Woudstra 2025-07-04 163 csum = nf_ip6_checksum_partial(skb, hook, dataoff - nhpull,
39644744ee13d9 Eric Woudstra 2025-07-04 164 len, protocol);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 165 break;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 166 }
39644744ee13d9 Eric Woudstra 2025-07-04 167 __skb_push(skb, nhpull);
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 168
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 169 return csum;
f7dcbe2f36a660 Pablo Neira Ayuso 2017-12-20 170 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-07-14 19:06 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-04 19:11 [PATCH v13 nf-next 0/3] conntrack: bridge: add double vlan, pppoe and pppoe-in-q Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader Eric Woudstra
2025-07-04 19:39 ` Florian Westphal
2025-07-05 17:33 ` kernel test robot
2025-07-14 19:06 ` Dan Carpenter
2025-07-04 19:11 ` [PATCH v13 nf-next 2/3] netfilter: bridge: Add conntrack double vlan and pppoe Eric Woudstra
2025-07-04 19:11 ` [PATCH v13 nf-next 3/3] netfilter: nft_chain_filter: Add bridge " Eric Woudstra
2025-07-04 20:02 ` Florian Westphal
-- strict thread matches above, loose matches on Subject: below --
2025-07-06 9:17 [PATCH v13 nf-next 1/3] netfilter: utils: nf_checksum(_partial) correct data!=networkheader kernel test robot
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.