Skip to content

Commit fa6a3f5

Browse files
Multiple memory handling fixes
Based on valgrind reports running on unit tests following changes were introduced: * TLSSocketWrapper frees allocated cert buffer in case of errors from mbedtls, * nsapi_addr has a mem_init() function, initializing all of its memory during construction.
1 parent b241943 commit fa6a3f5

File tree

4 files changed

+21
-0
lines changed

4 files changed

+21
-0
lines changed

features/netsocket/InternetSocket.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ using namespace mbed;
2121

2222
InternetSocket::InternetSocket()
2323
: _stack(0), _socket(0), _timeout(osWaitForever),
24+
_remote_peer(),
2425
_readers(0), _writers(0),
2526
_factory_allocated(false)
2627
{

features/netsocket/SocketAddress.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,32 +26,43 @@
2626

2727
SocketAddress::SocketAddress(nsapi_addr_t addr, uint16_t port)
2828
{
29+
mem_init();
2930
_ip_address = NULL;
3031
set_addr(addr);
3132
set_port(port);
3233
}
3334

3435
SocketAddress::SocketAddress(const char *addr, uint16_t port)
3536
{
37+
mem_init();
3638
_ip_address = NULL;
3739
set_ip_address(addr);
3840
set_port(port);
3941
}
4042

4143
SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port)
4244
{
45+
mem_init();
4346
_ip_address = NULL;
4447
set_ip_bytes(bytes, version);
4548
set_port(port);
4649
}
4750

4851
SocketAddress::SocketAddress(const SocketAddress &addr)
4952
{
53+
mem_init();
5054
_ip_address = NULL;
5155
set_addr(addr.get_addr());
5256
set_port(addr.get_port());
5357
}
5458

59+
void SocketAddress::mem_init(void)
60+
{
61+
_addr.version = NSAPI_UNSPEC;
62+
memset(_addr.bytes, 0, NSAPI_IP_BYTES);
63+
_port = 0;
64+
}
65+
5566
bool SocketAddress::set_ip_address(const char *addr)
5667
{
5768
delete[] _ip_address;

features/netsocket/SocketAddress.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ class SocketAddress {
178178
private:
179179
void _SocketAddress(NetworkStack *iface, const char *host, uint16_t port);
180180

181+
/** Initialize memory */
182+
void mem_init(void);
183+
181184
mutable char *_ip_address;
182185
nsapi_addr_t _addr;
183186
uint16_t _port;

features/netsocket/TLSSocketWrapper.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ nsapi_error_t TLSSocketWrapper::set_root_ca_cert(const void *root_ca, size_t len
9999
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(root_ca),
100100
len)) != 0) {
101101
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
102+
mbedtls_x509_crt_free(crt);
103+
delete crt;
102104
return NSAPI_ERROR_PARAMETER;
103105
}
104106
set_ca_chain(crt);
@@ -130,12 +132,16 @@ nsapi_error_t TLSSocketWrapper::set_client_cert_key(const void *client_cert, siz
130132
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(client_cert),
131133
client_cert_len)) != 0) {
132134
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
135+
mbedtls_x509_crt_free(crt);
136+
delete crt;
133137
return NSAPI_ERROR_PARAMETER;
134138
}
135139
mbedtls_pk_init(&_pkctx);
136140
if ((ret = mbedtls_pk_parse_key(&_pkctx, static_cast<const unsigned char *>(client_private_key_pem),
137141
client_private_key_len, NULL, 0)) != 0) {
138142
print_mbedtls_error("mbedtls_pk_parse_key", ret);
143+
mbedtls_x509_crt_free(crt);
144+
delete crt;
139145
return NSAPI_ERROR_PARAMETER;
140146
}
141147
set_own_cert(crt);

0 commit comments

Comments
 (0)