Reject authenticated INIT requests claiming another node identity

This commit is contained in:
evgeny committed 2026-10-23 23:17:01 +02:00
1 parent d9aede4138
commit 2f6ff9303e
1 file changed
+4 -1
+4 -1
View File
@@ -246,12 +246,15 @@ static void request_boundaries(unsigned established) {
unsigned rejected = 0, accepted = 0;
for (unsigned variant = 0; variant < 2; variant++) {
request.code = variant ? ETCP_INIT_REQUEST_NOINIT : ETCP_INIT_REQUEST;
for (unsigned length = 0; length < sizeof(request); length++) {
for (unsigned invalid = 0; invalid < sizeof(request) + sizeof(request.node_id); invalid++) {
unsigned length = invalid < sizeof(request) ? invalid : sizeof(request);
if (invalid >= sizeof(request)) request.node_id[invalid - sizeof(request)] ^= 1;
struct ETCP_CONN before_conn; struct ETCP_LINK before_link;
if (established) { memcpy(&before_conn, ep[1].conn, sizeof(before_conn)); memcpy(&before_link, first_link(1), sizeof(before_link)); }
int connections = ep[1].inst->connections->count, pool_free = ep[1].inst->pkt_pool->free_count;
size_t errors = ep[1].socket->pkt_format_errors;
send_init_request_body(&request, length, 0);
if (invalid >= sizeof(request)) request.node_id[invalid - sizeof(request)] ^= 1;
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "INIT_REQUEST boundary: established=%u code=%u body=%u errors=%zu->%zu",
established, request.code, length, errors, ep[1].socket->pkt_format_errors);
CHECK(ep[1].socket->pkt_format_errors == errors + 1 && ep[1].socket->errorcode != 0);