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

Reply via email to