Hi list,
Recently I am testing my TCP application in a plugin, what I did is to
initiate a TCP client in my plugin, however, when I build the debug image
and test, the vpp
will crash and complaint about out of memory.
After doing some research, it seems the following code may cause the crash:
*always_inline session_t *ho_session_alloc (void){ session_t *s; ASSERT
(vlib_get_thread_index () == 0); s = session_alloc (0); s->session_state
= SESSION_STATE_CONNECTING; s->flags |= SESSION_F_HALF_OPEN; /* Not
ideal. Half-opens are only allocated from main with worker barrier * but
can be cleaned up, i.e., session_half_open_free, from main without * a
barrier. In debug images, the free_bitmap can grow while workers peek *
the sessions pool, e.g., session_half_open_migrate_notify, and as a *
result crash while validating the session. To avoid this, grow the bitmap
* now. */ if (CLIB_DEBUG) { session_t *sp =
session_main.wrk[0].sessions; clib_bitmap_validate (pool_header
(sp)->free_bitmap, s->session_index); } return s;}*
since the clib_bitmap_validate is defined as:
*/* Make sure that a bitmap is at least n_bits in size */#define
clib_bitmap_validate(v,n_bits) \ clib_bitmap_vec_validate ((v), ((n_bits)
- 1) / BITS (uword))*
The first half open session have a session_index with zero, so 0-1 will
make a overflow which cause it try to allocate (UINT64_MAX-1)/ 64 memory
which make
the vppinfra abort.
I think we should modify the code above with s->session_index + 1, if
that's correct, I will submit a patch later.
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#22064): https://lists.fd.io/g/vpp-dev/message/22064
Mute This Topic: https://lists.fd.io/mt/94529335/21656
Group Owner: [email protected]
Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/1480452/21656/631435203/xyzzy
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-