From a81e886f0fef744a36ce70eca1d363d65e798e34 Mon Sep 17 00:00:00 2001 From: icex2 Date: Sun, 24 Jan 2021 12:11:23 +0100 Subject: [PATCH] prinet-proxy: Fix memory leak Incorrect encryption size for keepalive package. don't include macbytes in length. Tweak length afterwards with result of encryption function --- src/main/pumpnet/prinet-proxy/keepalive.c | 2 +- src/main/pumpnet/prinet-proxy/packet.c | 4 ++-- src/main/pumpnet/prinet-proxy/packet.h | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/pumpnet/prinet-proxy/keepalive.c b/src/main/pumpnet/prinet-proxy/keepalive.c index ad0c1c2..8be786d 100644 --- a/src/main/pumpnet/prinet-proxy/keepalive.c +++ b/src/main/pumpnet/prinet-proxy/keepalive.c @@ -41,7 +41,7 @@ static void* _pumpnet_prinet_proxy_keepalive_proc(void* ctx) keepalive_packet->nounce, sizeof(keepalive_packet->nounce), keepalive_packet->data, - pumpnet_prinet_proxy_packet_get_data_len(keepalive_packet), + PUMPNET_PRINET_PROXY_PACKET_KEEPALIVE_SIZE, keepalive_packet->data); keepalive_packet->length = pumpnet_prinet_proxy_packet_get_header_len() + enc_data_len; diff --git a/src/main/pumpnet/prinet-proxy/packet.c b/src/main/pumpnet/prinet-proxy/packet.c index 9c99bb9..54041e6 100644 --- a/src/main/pumpnet/prinet-proxy/packet.c +++ b/src/main/pumpnet/prinet-proxy/packet.c @@ -17,7 +17,7 @@ struct pumpnet_prinet_proxy_packet_data_keepalive { static const size_t HEADER_SIZE = sizeof(uint32_t) + sizeof(uint8_t) * SEC_PRINET_NOUNCE_LEN; static const uint32_t PACKET_KEEPALIVE_ID = 0x3000000; -static const uint32_t PACKET_KEEPALIVE_SIZE = +const uint32_t PUMPNET_PRINET_PROXY_PACKET_KEEPALIVE_SIZE = sizeof(struct pumpnet_prinet_proxy_packet_data) + sizeof(struct pumpnet_prinet_proxy_packet_data_keepalive); @@ -61,7 +61,7 @@ struct pumpnet_prinet_proxy_packet* pumpnet_prinet_proxy_packet_create_keepalive struct pumpnet_prinet_proxy_packet* packet; struct pumpnet_prinet_proxy_packet_data* data; - packet = pumpnet_prinet_proxy_packet_alloc_response(PACKET_KEEPALIVE_SIZE); + packet = pumpnet_prinet_proxy_packet_alloc_response(PUMPNET_PRINET_PROXY_PACKET_KEEPALIVE_SIZE); util_rand_gen_bytes(packet->nounce, SEC_PRINET_NOUNCE_LEN); diff --git a/src/main/pumpnet/prinet-proxy/packet.h b/src/main/pumpnet/prinet-proxy/packet.h index 578fafc..63c53d3 100644 --- a/src/main/pumpnet/prinet-proxy/packet.h +++ b/src/main/pumpnet/prinet-proxy/packet.h @@ -11,6 +11,8 @@ struct pumpnet_prinet_proxy_packet { uint8_t data[]; } __attribute__((__packed__)); +extern const uint32_t PUMPNET_PRINET_PROXY_PACKET_KEEPALIVE_SIZE; + struct pumpnet_prinet_proxy_packet* pumpnet_prinet_proxy_packet_alloc(size_t data_len); struct pumpnet_prinet_proxy_packet* pumpnet_prinet_proxy_packet_alloc_response(size_t data_len);