diff --git a/src/proxy/tcp_proxy_server.c b/src/proxy/tcp_proxy_server.c index 4fc237eb..6c488adb 100644 --- a/src/proxy/tcp_proxy_server.c +++ b/src/proxy/tcp_proxy_server.c @@ -325,6 +325,11 @@ int tcp_proxy_server_handle_data(struct UTUN_INSTANCE* inst, struct ETCP_CONN* c } size_t data_len = entry->len - TCP_PROXY_HDR_SIZE; if (data_len > 0) { + if (data_len > rc->tc->data_pool->object_size) { + DEBUG_ERROR(DEBUG_CATEGORY_SOCKET, "tcp_proxy_server: data_len=%zu > pool_sz=%zu, dropping sid=%08x", + data_len, rc->tc->data_pool->object_size, stream_id); + queue_dgram_free(entry); queue_entry_free(entry); return -1; + } struct ll_entry* e = queue_entry_new_from_pool(rc->tc->entry_pool); uint8_t* buf = memory_pool_alloc(rc->tc->data_pool); if (e && buf) {