From: Loktionov, Aleksandr <[email protected]>
Date: Fri, 20 Mar 2026 06:05:18 +0100

> From: Katarzyna Wieczerzycka <[email protected]>
> 
> By default skb->mac_header is not set, so reset prevents access to an
> invalid pointer.
> 
> Call skb_reset_mac_header() before accessing the mac header from skb.
> 
> Signed-off-by: Katarzyna Wieczerzycka <[email protected]>
> Signed-off-by: Aleksandr Loktionov <[email protected]>
> ---
>  drivers/net/ethernet/intel/ice/ice_txrx.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c 
> b/drivers/net/ethernet/intel/ice/ice_txrx.c
> index a2cd4cf..374b17f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_txrx.c
> +++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
> @@ -2211,6 +2211,8 @@ ice_xmit_frame_ring(struct sk_buff *skb, struct 
> ice_tx_ring *tx_ring)
>               goto out_drop;
>  
>       /* allow CONTROL frames egress from main VSI if FW LLDP disabled */
> +     if (likely(!skb_mac_header_was_set(skb)))
> +             skb_reset_mac_header(skb);
>       eth = (struct ethhdr *)skb_mac_header(skb);
>  
>       if ((ice_is_switchdev_running(vsi->back) ||

Did you read my internal review? I've never faced a situation when the
kernel queues an skb to .ndo_start_xmit() without the header pointers
set up correctly.

I need a good repro to agree this is needed. `likely()` also doesn't fit
here (you basically slow down almost 100% of the traffic).

Thanks,
Olek

Reply via email to