From 56c176a780f1739eda64c41c72a6de3a36bc822f Mon Sep 17 00:00:00 2001 From: Tim Duesterhus Date: Sat, 6 Mar 2021 20:06:51 +0100 Subject: [PATCH] CLEANUP: connection: Consistently use `struct ist` to process all TLV types Instead of directly poking around within the `struct tlv tlv_packet` the actual value will be consumed using a `struct ist`. --- src/connection.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/connection.c b/src/connection.c index 716de51f8..b1d643b9d 100644 --- a/src/connection.c +++ b/src/connection.c @@ -447,15 +447,15 @@ int conn_recv_proxy(struct connection *conn, int flag) /* TLV parsing */ while (tlv_offset < total_v2_len) { struct tlv *tlv_packet; - size_t tlv_len; + struct ist tlv; /* Verify that we have at least TLV_HEADER_SIZE bytes left */ if (tlv_offset + TLV_HEADER_SIZE > total_v2_len) goto bad_header; tlv_packet = (struct tlv *) &trash.area[tlv_offset]; - tlv_len = get_tlv_length(tlv_packet); - tlv_offset += tlv_len + TLV_HEADER_SIZE; + tlv = ist2((const char *)tlv_packet->value, get_tlv_length(tlv_packet)); + tlv_offset += istlen(tlv) + TLV_HEADER_SIZE; /* Verify that the TLV length does not exceed the total PROXYv2 length */ if (tlv_offset > total_v2_len) @@ -466,11 +466,11 @@ int conn_recv_proxy(struct connection *conn, int flag) uint32_t n_crc32c; /* Verify that this TLV is exactly 4 bytes long */ - if (tlv_len != 4) + if (istlen(tlv) != 4) goto bad_header; - n_crc32c = read_n32(tlv_packet->value); - write_n32(tlv_packet->value, 0); // compute with CRC==0 + n_crc32c = read_n32(istptr(tlv)); + write_n32(istptr(tlv), 0); // compute with CRC==0 if (hash_crc32c(trash.area, total_v2_len) != n_crc32c) goto bad_header; @@ -480,15 +480,13 @@ int conn_recv_proxy(struct connection *conn, int flag) case PP2_TYPE_NETNS: { const struct netns_entry *ns; - ns = netns_store_lookup((char*)tlv_packet->value, tlv_len); + ns = netns_store_lookup(istptr(tlv), istlen(tlv)); if (ns) conn->proxy_netns = ns; break; } #endif case PP2_TYPE_AUTHORITY: { - const struct ist tlv = ist2((const char *)tlv_packet->value, tlv_len); - if (istlen(tlv) > PP2_AUTHORITY_MAX) goto bad_header; conn->proxy_authority = ist2(pool_alloc(pool_head_authority), 0); @@ -503,8 +501,6 @@ int conn_recv_proxy(struct connection *conn, int flag) break; } case PP2_TYPE_UNIQUE_ID: { - const struct ist tlv = ist2((const char *)tlv_packet->value, tlv_len); - if (istlen(tlv) > UNIQUEID_LEN) goto bad_header; conn->proxy_unique_id = ist2(pool_alloc(pool_head_uniqueid), 0);