• Paul Blakey's avatar
    openvswitch: Fix setting ipv6 fields causing hw csum failure · d9b5ae5c
    Paul Blakey authored
    Ipv6 ttl, label and tos fields are modified without first
    pulling/pushing the ipv6 header, which would have updated
    the hw csum (if available). This might cause csum validation
    when sending the packet to the stack, as can be seen in
    the trace below.
    
    Fix this by updating skb->csum if available.
    
    Trace resulted by ipv6 ttl dec and then sending packet
    to conntrack [actions: set(ipv6(hlimit=63)),ct(zone=99)]:
    [295241.900063] s_pf0vf2: hw csum failure
    [295241.923191] Call Trace:
    [295241.925728]  <IRQ>
    [295241.927836]  dump_stack+0x5c/0x80
    [295241.931240]  __skb_checksum_complete+0xac/0xc0
    [295241.935778]  nf_conntrack_tcp_packet+0x398/0xba0 [nf_conntrack]
    [295241.953030]  nf_conntrack_in+0x498/0x5e0 [nf_conntrack]
    [295241.958344]  __ovs_ct_lookup+0xac/0x860 [openvswitch]
    [295241.968532]  ovs_ct_execute+0x4a7/0x7c0 [openvswitch]
    [295241.979167]  do_execute_actions+0x54a/0xaa0 [openvswitch]
    [295242.001482]  ovs_execute_actions+0x48/0x100 [openvswitch]
    [295242.006966]  ovs_dp_process_packet+0x96/0x1d0 [openvswitch]
    [295242.012626]  ovs_vport_receive+0x6c/0xc0 [openvswitch]
    [295242.028763]  netdev_frame_hook+0xc0/0x180 [openvswitch]
    [295242.034074]  __netif_receive_skb_core+0x2ca/0xcb0
    [295242.047498]  netif_receive_skb_internal+0x3e/0xc0
    [295242.052291]  napi_gro_receive+0xba/0xe0
    [295242.056231]  mlx5e_handle_rx_cqe_mpwrq_rep+0x12b/0x250 [mlx5_core]
    [295242.062513]  mlx5e_poll_rx_cq+0xa0f/0xa30 [mlx5_core]
    [295242.067669]  mlx5e_napi_poll+0xe1/0x6b0 [mlx5_core]
    [295242.077958]  net_rx_action+0x149/0x3b0
    [295242.086762]  __do_softirq+0xd7/0x2d6
    [295242.090427]  irq_exit+0xf7/0x100
    [295242.093748]  do_IRQ+0x7f/0xd0
    [295242.096806]  common_interrupt+0xf/0xf
    [295242.100559]  </IRQ>
    [295242.102750] RIP: 0033:0x7f9022e88cbd
    [295242.125246] RSP: 002b:00007f9022282b20 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffda
    [295242.132900] RAX: 0000000000000005 RBX: 0000000000000010 RCX: 0000000000000000
    [295242.140120] RDX: 00007f9022282ba8 RSI: 00007f9022282a30 RDI: 00007f9014005c30
    [295242.147337] RBP: 00007f9014014d60 R08: 0000000000000020 R09: 00007f90254a8340
    [295242.154557] R10: 00007f9022282a28 R11: 0000000000000246 R12: 0000000000000000
    [295242.161775] R13: 00007f902308c000 R14: 000000000000002b R15: 00007f9022b71f40
    
    Fixes: 3fdbd1ce ("openvswitch: add ipv6 'set' action")
    Signed-off-by: default avatarPaul Blakey <paulb@nvidia.com>
    Link: https://lore.kernel.org/r/20220223163416.24096-1-paulb@nvidia.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    d9b5ae5c
checksum.h 4.84 KB