lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <1dcd305d-1968-4ec7-ba3d-df66f214e131@intel.com>
Date: Thu, 27 Feb 2025 06:16:23 +0100
From: Przemek Kitszel <przemyslaw.kitszel@...el.com>
To: Eric Dumazet <edumazet@...gle.com>, Tony Nguyen
	<anthony.l.nguyen@...el.com>
CC: "David S . Miller" <davem@...emloft.net>, Jakub Kicinski
	<kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>, Andrew Lunn
	<andrew+netdev@...n.ch>, Simon Horman <horms@...nel.org>,
	<netdev@...r.kernel.org>, <eric.dumazet@...il.com>, Joshua Hay
	<joshua.a.hay@...el.com>, Willem de Bruijn <willemb@...gle.com>,
	"intel-wired-lan@...ts.osuosl.org" <intel-wired-lan@...ts.osuosl.org>
Subject: Re: [PATCH net] idpf: fix checksums set in idpf_rx_rsc()

On 2/26/25 23:12, Eric Dumazet wrote:
> idpf_rx_rsc() uses skb_transport_offset(skb) while the transport header
> is not set yet.
> 
> This triggers the following warning for CONFIG_DEBUG_NET=y builds.
> 
> DEBUG_NET_WARN_ON_ONCE(!skb_transport_header_was_set(skb))
> 
> [   69.261620] WARNING: CPU: 7 PID: 0 at ./include/linux/skbuff.h:3020 idpf_vport_splitq_napi_poll (include/linux/skbuff.h:3020) idpf
> [   69.261629] Modules linked in: vfat fat dummy bridge intel_uncore_frequency_tpmi intel_uncore_frequency_common intel_vsec_tpmi idpf intel_vsec cdc_ncm cdc_eem cdc_ether usbnet mii xhci_pci xhci_hcd ehci_pci ehci_hcd libeth
> [   69.261644] CPU: 7 UID: 0 PID: 0 Comm: swapper/7 Tainted: G S      W          6.14.0-smp-DEV #1697
> [   69.261648] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN
> [   69.261650] RIP: 0010:idpf_vport_splitq_napi_poll (include/linux/skbuff.h:3020) idpf
> [   69.261677] ? __warn (kernel/panic.c:242 kernel/panic.c:748)
> [   69.261682] ? idpf_vport_splitq_napi_poll (include/linux/skbuff.h:3020) idpf
> [   69.261687] ? report_bug (lib/bug.c:?)
> [   69.261690] ? handle_bug (arch/x86/kernel/traps.c:285)
> [   69.261694] ? exc_invalid_op (arch/x86/kernel/traps.c:309)
> [   69.261697] ? asm_exc_invalid_op (arch/x86/include/asm/idtentry.h:621)
> [   69.261700] ? __pfx_idpf_vport_splitq_napi_poll (drivers/net/ethernet/intel/idpf/idpf_txrx.c:4011) idpf
> [   69.261704] ? idpf_vport_splitq_napi_poll (include/linux/skbuff.h:3020) idpf
> [   69.261708] ? idpf_vport_splitq_napi_poll (drivers/net/ethernet/intel/idpf/idpf_txrx.c:3072) idpf
> [   69.261712] __napi_poll (net/core/dev.c:7194)
> [   69.261716] net_rx_action (net/core/dev.c:7265)
> [   69.261718] ? __qdisc_run (net/sched/sch_generic.c:293)
> [   69.261721] ? sched_clock (arch/x86/include/asm/preempt.h:84 arch/x86/kernel/tsc.c:288)
> [   69.261726] handle_softirqs (kernel/softirq.c:561)
> 
> Fixes: 3a8845af66edb ("idpf: add RX splitq napi poll support")
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>

thank you for the fix,
Acked-by: Przemek Kitszel <przemyslaw.kitszel@...el.com>

> Cc: Alan Brady <alan.brady@...el.com>
> Cc: Joshua Hay <joshua.a.hay@...el.com>
> Cc: Willem de Bruijn <willemb@...gle.com>
> ---
>   drivers/net/ethernet/intel/idpf/idpf_txrx.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/intel/idpf/idpf_txrx.c b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
> index 9be6a6b59c4e1414f993de39698b00fffa7d2940..977741c4149805b13b3b77fdfb612c514e2530e6 100644
> --- a/drivers/net/ethernet/intel/idpf/idpf_txrx.c
> +++ b/drivers/net/ethernet/intel/idpf/idpf_txrx.c
> @@ -3013,7 +3013,6 @@ static int idpf_rx_rsc(struct idpf_rx_queue *rxq, struct sk_buff *skb,
>   	skb_shinfo(skb)->gso_size = rsc_seg_len;
>   
>   	skb_reset_network_header(skb);
> -	len = skb->len - skb_transport_offset(skb);
>   
>   	if (ipv4) {
>   		struct iphdr *ipv4h = ip_hdr(skb);
> @@ -3022,6 +3021,7 @@ static int idpf_rx_rsc(struct idpf_rx_queue *rxq, struct sk_buff *skb,
>   
>   		/* Reset and set transport header offset in skb */
>   		skb_set_transport_header(skb, sizeof(struct iphdr));
> +		len = skb->len - skb_transport_offset(skb);
>   
>   		/* Compute the TCP pseudo header checksum*/
>   		tcp_hdr(skb)->check =
> @@ -3031,6 +3031,7 @@ static int idpf_rx_rsc(struct idpf_rx_queue *rxq, struct sk_buff *skb,
>   
>   		skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
>   		skb_set_transport_header(skb, sizeof(struct ipv6hdr));
> +		len = skb->len - skb_transport_offset(skb);
>   		tcp_hdr(skb)->check =
>   			~tcp_v6_check(len, &ipv6h->saddr, &ipv6h->daddr, 0);
>   	}


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ