Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VPP-1962] vpp crashes when vxlan4-input decap-next-index set to ethernet-input #3424

Open
vvalderrv opened this issue Feb 2, 2025 · 2 comments

Comments

@vvalderrv
Copy link
Contributor

Description

Attempting to set the vxlan decap-next-index to ethernet-input using:

 

{{add_node_next node vxlan4-input next ethernet-input }}

vxlan_add_del_tunnel src 10.0.4.1 dst 10.0.6.1 decap-next 3 vni 9832580 instance -1

 

results in vpp crashing on the first packet received over the vxlan interface.

 

The resulting decoded backtrace is:

#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50

#1 0x00007f7ec0f9a859 in __GI_abort () at abort.c:79

#2 0x0000555a8f691d9e in os_exit (code=code@entry=1) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vpp/vnet/main.c:395

#3 0x00007f7ec12e4736 in unix_signal_handler (signum=11, si=, uc=) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/unix/main.c:187

#4

#5 0x00007f7ec1418a49 in ethernet_input_inline (variant=ETHERNET_INPUT_VARIANT_ETHERNET, n_packets=, from=0x7f7e81923294, node=0x7f7e82638f00, vm=0x7f7ec1300540 <vlib_global_main>)

{{ at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vnet/ethernet/node.c:1581}}

#6 ethernet_input_node_fn_hsw (vm=0x7f7ec1300540 <vlib_global_main>, node=0x7f7e82638f00, frame=) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vnet/ethernet/node.c:1725

{{#7 0x00007f7ec129c28b in dispatch_node (last_time_stamp=, frame=0x7f7e81923280, dispatch_state=VLIB_NODE_STATE_POLLING, type=VLIB_NODE_TYPE_INTERNAL, node=, }}

{{ vm=0x7f7ec1300540 <vlib_global_main>) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1194}}

#8 dispatch_pending_node (vm=vm@entry=0x7f7ec1300540 <vlib_global_main>, pending_frame_index=pending_frame_index@entry=14, last_time_stamp=)

{{ at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1353}}

#9 0x00007f7ec12a0eb7 in vlib_main_or_worker_loop (is_main=1, vm=0x7f7ec1300540 <vlib_global_main>) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1846

#10 vlib_main_loop (vm=0x7f7ec1300540 <vlib_global_main>) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:1974

#11 vlib_main (vm=, vm@entry=0x7f7ec1300540 <vlib_global_main>, input=input@entry=0x7f7e821b9fa0) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/main.c:2220

#12 0x00007f7ec12e370c in thread0 (arg=140182383756608) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/unix/main.c:660

#13 0x00007f7ec1191d90 in clib_calljmp () from /lib/x86_64-linux-gnu/libvppinfra.so.20.09

#14 0x00007fff4e7ba820 in ?? ()

#15 0x00007f7ec12e4c18 in vlib_unix_main (argc=, argv=) at /w/workspace/vpp-merge-2009-ubuntu2004-x86_64/src/vlib/unix/main.c:733

#16 0xba0f48028b4890f3 in ?? ()

#17 0xffea3ce9f47224e0 in ?? ()

#18 0x41660442b70f44ff in ?? ()

#19 0x0f200442f606e8c1 in ?? ()

#20 0x8f8b41fffff28185 in ?? ()

#21 0xffc2c74800000254 in ?? ()

Assignee

John Lo

Reporter

Ed Warnicke

Comments

  • hagbard (Thu, 14 Jan 2021 16:18:42 +0000): Could that be fixed?
  • sykazmi (Thu, 14 Jan 2021 14:14:32 +0000): Ed Warnicke I have reproduced the issue.

Ethernet-input node checks the interface Mac address in ethernet_input_inline_dmac_check(). MAC address is not set for vxlan-tunnel interface(s) in VPP.

 

Thread 3 "vpp_wk_0" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff54bfe700 (LWP 140168)]
0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, 
    dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695
695	  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
(gdb) bt
#0  0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, 
    dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695
#1  0x00007ffff6e4fa0c in ethernet_input_inline (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, from=0x7fffb8135c94, 
    n_packets=1, variant=ETHERNET_INPUT_VARIANT_ETHERNET) at /home/vpp/src/vnet/ethernet/node.c:1588
#2  0x00007ffff6e4de9e in ethernet_input_node_fn_skx (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, frame=0x7fffb8135c80)
    at /home/vpp/src/vnet/ethernet/node.c:1725
#3  0x00007ffff6b59536 in dispatch_node (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, type=VLIB_NODE_TYPE_INTERNAL, 
    dispatch_state=VLIB_NODE_STATE_POLLING, frame=0x7fffb8135c80, last_time_stamp=13267928507756)
    at /home/vpp/src/vlib/main.c:1194
#4  0x00007ffff6b5a027 in dispatch_pending_node (vm=0x7fffb7f40b00, pending_frame_index=6, 
    last_time_stamp=13267928507756) at /home/vpp/src/vlib/main.c:1353
#5  0x00007ffff6b53bf0 in vlib_main_or_worker_loop (vm=0x7fffb7f40b00, is_main=0) at /home/vpp/src/vlib/main.c:1846
#6  0x00007ffff6b52f57 in vlib_worker_loop (vm=0x7fffb7f40b00) at /home/vpp/src/vlib/main.c:1980
#7  0x00007ffff6baaada in vlib_worker_thread_fn (arg=0x7fffb90af540) at /home/vpp/src/vlib/threads.c:1861
#8  0x00007ffff699ae64 in clib_calljmp () at /home/vpp/src/vppinfra/longjmp.S:123
#9  0x00007fff54bfdcd0 in ?? ()
#10 0x00007ffff6ba2c73 in vlib_worker_thread_bootstrap_fn (arg=0x7fffb90af540) at /home/vpp/src/vlib/threads.c:585
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) f 0
#0  0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, 
    dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695
695	  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
(gdb) l
690	ethernet_input_inline_dmac_check (vnet_hw_interface_t * hi,
691					  u64 * dmacs, u8 * dmacs_bad,
692					  u32 n_packets, ethernet_interface_t * ei,
693					  u8 have_sec_dmac)
694	{
695	  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
696	  u8 bad = 0;
697	
698	  dmacs_bad[0] = is_dmac_bad (dmacs[0], hwaddr);
699	  dmacs_bad[1] = ((n_packets > 1) & is_dmac_bad (dmacs[1], hwaddr));
(gdb) p hi
$1 = (vnet_hw_interface_t *) 0x7fffb8132cc0
(gdb) p *hi
$2 = {cacheline0 = 0x7fffb8132cc0 "\220\353\025\270\377\177", name = 0x7fffb815eb90 "vxlan_tunnel0", 
  flags = VNET_HW_INTERFACE_FLAG_LINK_UP, link_speed = 0, hw_address = 0x0, output_node_index = 615, 
  tx_node_index = 0, dev_class_index = 30, dev_instance = 0, hw_class_index = 23, hw_instance = 0, hw_if_index = 3, 
  sw_if_index = 3, output_node_next_index = 3, max_rate_bits_per_sec = 0, min_supported_packet_bytes = 0, 
  max_supported_packet_bytes = 0, min_packet_bytes = 0, max_packet_bytes = 0, sub_interface_sw_if_index_by_id = 0x0, 
  l2_if_count = 1, l3_if_count = 0, bond_info = 0x0, input_node_index = 0, input_node_thread_index_by_queue = 0x0, 
  rx_mode_by_queue = 0x0, default_rx_mode = VNET_HW_INTERFACE_RX_MODE_POLLING, dq_runtime_index_by_queue = 0x0, 
  numa_node = 0 '\000', rss_queues = 0x0, n_trace = 0, trace_classify_table_index = 4294967295}
(gdb) p hi->hw_address
$3 = (u8 *) 0x0

Original issue: https://jira.fd.io/browse/VPP-1962

@vvalderrv
Copy link
Contributor Author

Could that be fixed?

@vvalderrv
Copy link
Contributor Author

Ed Warnicke I have reproduced the issue.

Ethernet-input node checks the interface Mac address in ethernet_input_inline_dmac_check(). MAC address is not set for vxlan-tunnel interface(s) in VPP.

 

Thread 3 "vpp_wk_0" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff54bfe700 (LWP 140168)]
0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, 
    dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695
695	  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
(gdb) bt
#0  0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, 
    dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695
#1  0x00007ffff6e4fa0c in ethernet_input_inline (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, from=0x7fffb8135c94, 
    n_packets=1, variant=ETHERNET_INPUT_VARIANT_ETHERNET) at /home/vpp/src/vnet/ethernet/node.c:1588
#2  0x00007ffff6e4de9e in ethernet_input_node_fn_skx (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, frame=0x7fffb8135c80)
    at /home/vpp/src/vnet/ethernet/node.c:1725
#3  0x00007ffff6b59536 in dispatch_node (vm=0x7fffb7f40b00, node=0x7fffb9c80b40, type=VLIB_NODE_TYPE_INTERNAL, 
    dispatch_state=VLIB_NODE_STATE_POLLING, frame=0x7fffb8135c80, last_time_stamp=13267928507756)
    at /home/vpp/src/vlib/main.c:1194
#4  0x00007ffff6b5a027 in dispatch_pending_node (vm=0x7fffb7f40b00, pending_frame_index=6, 
    last_time_stamp=13267928507756) at /home/vpp/src/vlib/main.c:1353
#5  0x00007ffff6b53bf0 in vlib_main_or_worker_loop (vm=0x7fffb7f40b00, is_main=0) at /home/vpp/src/vlib/main.c:1846
#6  0x00007ffff6b52f57 in vlib_worker_loop (vm=0x7fffb7f40b00) at /home/vpp/src/vlib/main.c:1980
#7  0x00007ffff6baaada in vlib_worker_thread_fn (arg=0x7fffb90af540) at /home/vpp/src/vlib/threads.c:1861
#8  0x00007ffff699ae64 in clib_calljmp () at /home/vpp/src/vppinfra/longjmp.S:123
#9  0x00007fff54bfdcd0 in ?? ()
#10 0x00007ffff6ba2c73 in vlib_worker_thread_bootstrap_fn (arg=0x7fffb90af540) at /home/vpp/src/vlib/threads.c:585
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) f 0
#0  0x00007ffff6e56b7b in ethernet_input_inline_dmac_check (hi=0x7fffb8132cc0, dmacs=0x7fffb9c1ff40, 
    dmacs_bad=0x7fffb9c1ff3e "", n_packets=1, ei=0x0, have_sec_dmac=0 '\000') at /home/vpp/src/vnet/ethernet/node.c:695
695	  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
(gdb) l
690	ethernet_input_inline_dmac_check (vnet_hw_interface_t * hi,
691					  u64 * dmacs, u8 * dmacs_bad,
692					  u32 n_packets, ethernet_interface_t * ei,
693					  u8 have_sec_dmac)
694	{
695	  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
696	  u8 bad = 0;
697	
698	  dmacs_bad[0] = is_dmac_bad (dmacs[0], hwaddr);
699	  dmacs_bad[1] = ((n_packets > 1) & is_dmac_bad (dmacs[1], hwaddr));
(gdb) p hi
$1 = (vnet_hw_interface_t *) 0x7fffb8132cc0
(gdb) p *hi
$2 = {cacheline0 = 0x7fffb8132cc0 "\220\353\025\270\377\177", name = 0x7fffb815eb90 "vxlan_tunnel0", 
  flags = VNET_HW_INTERFACE_FLAG_LINK_UP, link_speed = 0, hw_address = 0x0, output_node_index = 615, 
  tx_node_index = 0, dev_class_index = 30, dev_instance = 0, hw_class_index = 23, hw_instance = 0, hw_if_index = 3, 
  sw_if_index = 3, output_node_next_index = 3, max_rate_bits_per_sec = 0, min_supported_packet_bytes = 0, 
  max_supported_packet_bytes = 0, min_packet_bytes = 0, max_packet_bytes = 0, sub_interface_sw_if_index_by_id = 0x0, 
  l2_if_count = 1, l3_if_count = 0, bond_info = 0x0, input_node_index = 0, input_node_thread_index_by_queue = 0x0, 
  rx_mode_by_queue = 0x0, default_rx_mode = VNET_HW_INTERFACE_RX_MODE_POLLING, dq_runtime_index_by_queue = 0x0, 
  numa_node = 0 '\000', rss_queues = 0x0, n_trace = 0, trace_classify_table_index = 4294967295}
(gdb) p hi->hw_address
$3 = (u8 *) 0x0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant