Hi List, We have observed a crash recently w/ no-multi-seg configured for an virtio-based dpdk-interface.
The stack is: #0 0x00007f3e6ca47428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54 #1 0x00007f3e6ca4902a in __GI_abort () at abort.c:89 #2 0x0000000000406d99 in os_exit (code=code@entry=1) at /home/slucx/vedge/build-data/../src/vpp/vnet/main.c:284 #3 0x00007f3e6e0046fa in unix_signal_handler (signum=<optimized out>, si=<optimized out>, uc=<optimized out>) at /home/slucx/vedge/build-data/../src/vlib/unix/main.c:117 #4 <signal handler called> #5 clib_mov16 (src=<optimized out>, dst=<optimized out>) at /home/slucx/vedge/build-data/../src/vppinfra/memcpy_sse3.h:60 #6 clib_memcpy (n=16, src=<optimized out>, dst=<optimized out>) at /home/slucx/vedge/build-data/../src/vppinfra/memcpy_sse3.h:229 #7 vlib_buffer_init_for_free_list (fl=0x7f3e3041a500, dst=0x80) at /home/slucx/vedge/build-data/../src/vlib/buffer_funcs.h:792 #8 dpdk_process_subseq_segs (fl=0x7f3e3041a500, mb=0x7f3c34361e00, b=0x7f3c34361e80, vm=0x7f3e2c10f24c) at /home/slucx/vedge/build-data/../src/plugins/dpdk/device/node.c:216 #9 dpdk_device_input (maybe_multiseg=0, queue_id=0, cpu_index=<optimized out>, node=0x7f3e2d170a58, xd=0x7f3e30429440, dm=0x7f3e2c028a00 <dpdk_main>) at /home/slucx/vedge/build-data/../src/plugins/dpdk/device/node.c:541 #10 dpdk_input (vm=<optimized out>, node=0x7f3e2d170a58, f=<optimized out>) at /home/slucx/vedge/build-data/../src/plugins/dpdk/device/node.c:663 #11 0x00007f3e6dfcaf79 in dispatch_node (vm=0x7f3e2c10f24c, node=0x7f3e2d170a58, type=<optimized out>, dispatch_state=VLIB_NODE_STATE_POLLING, frame=<optimized out>, last_time_stamp=4703270402828137) at /home/slucx/vedge/build-data/../src/vlib/main.c:1000 #12 0x00007f3e6dfcb49f in vlib_main_or_worker_loop (is_main=0, vm=0x7f3e2c10f24c) at /home/slucx/vedge/build-data/../src/vlib/main.c:1510 #13 vlib_worker_loop (vm=0x7f3e2c10f24c) at /home/slucx/vedge/build-data/../src/vlib/main.c:1630 #14 0x00007f3e6d226c40 in clib_calljmp () at /home/slucx/vedge/build-data/../src/vppinfra/longjmp.S:110 #15 0x00007f3c5cf88db0 in ?? () #16 0x00007f3e2ba4dd6b in eal_thread_loop (arg=<optimized out>) at /home/slucx/vedge/build-root/build-vpp-native/dpdk/dpdk-17.02/lib/librte_eal/linuxapp/eal/eal_thread.c:184 #17 0x0000000000000000 in ?? () After analysis, I found that it seems caused by a multi-seg dpdk mbuf received though the reason why we got that packet is unknown (I checked the mbuf, it's only 143Byte long). However, in vpp's dpdk_device_input, dpdk_process_subseq_segs seems not always protected by the 'maybe_multiseg' parameter, I think if we add the check, this crash may be prevented. Should this being fixed or should I found the real reason for virtio pmd give us a packet with wrong ng_segs?
_______________________________________________ vpp-dev mailing list vpp-dev@lists.fd.io https://lists.fd.io/mailman/listinfo/vpp-dev