Skip to content

Commit 169a5df

Browse files
committed
Fix mqtt broker force zero definition
1 parent dd89fa2 commit 169a5df

3 files changed

Lines changed: 27 additions & 35 deletions

File tree

src/mqtt_broker.c

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
#ifdef WOLFMQTT_BROKER
3737

38+
#define BROKER_FORCE_ZERO(mem, len) Mqtt_ForceZero(mem, (word32)(len))
3839

3940
/* -------------------------------------------------------------------------- */
4041
/* Platform includes */
@@ -171,7 +172,7 @@ static void BrokerStore_StringSensitive(char* dst, int max_len,
171172
const char* src, word16 src_len)
172173
{
173174
/* Wipe old value before overwriting */
174-
WOLFMQTT_FORCE_ZERO(dst, max_len);
175+
BROKER_FORCE_ZERO(dst, max_len);
175176
if (src_len >= (word16)max_len) {
176177
src_len = (word16)(max_len - 1);
177178
}
@@ -184,7 +185,7 @@ static void BrokerStore_String(char** dst_ptr,
184185
{
185186
if (*dst_ptr != NULL) {
186187
if (sensitive) {
187-
WOLFMQTT_FORCE_ZERO(*dst_ptr, XSTRLEN(*dst_ptr) + 1);
188+
BROKER_FORCE_ZERO(*dst_ptr, XSTRLEN(*dst_ptr) + 1);
188189
}
189190
WOLFMQTT_FREE(*dst_ptr);
190191
*dst_ptr = NULL;
@@ -1220,21 +1221,21 @@ static void BrokerClient_Free(BrokerClient* bc)
12201221
}
12211222
#ifdef WOLFMQTT_BROKER_AUTH
12221223
if (bc->username) {
1223-
WOLFMQTT_FORCE_ZERO(bc->username, XSTRLEN(bc->username) + 1);
1224+
BROKER_FORCE_ZERO(bc->username, XSTRLEN(bc->username) + 1);
12241225
WOLFMQTT_FREE(bc->username);
12251226
}
12261227
if (bc->password) {
1227-
WOLFMQTT_FORCE_ZERO(bc->password, XSTRLEN(bc->password) + 1);
1228+
BROKER_FORCE_ZERO(bc->password, XSTRLEN(bc->password) + 1);
12281229
WOLFMQTT_FREE(bc->password);
12291230
}
12301231
#endif
12311232
#ifdef WOLFMQTT_BROKER_WILL
12321233
if (bc->will_topic) {
1233-
WOLFMQTT_FORCE_ZERO(bc->will_topic, XSTRLEN(bc->will_topic) + 1);
1234+
BROKER_FORCE_ZERO(bc->will_topic, XSTRLEN(bc->will_topic) + 1);
12341235
WOLFMQTT_FREE(bc->will_topic);
12351236
}
12361237
if (bc->will_payload) {
1237-
WOLFMQTT_FORCE_ZERO(bc->will_payload, bc->will_payload_len);
1238+
BROKER_FORCE_ZERO(bc->will_payload, bc->will_payload_len);
12381239
WOLFMQTT_FREE(bc->will_payload);
12391240
}
12401241
#endif
@@ -2014,12 +2015,12 @@ static void BrokerClient_ClearWill(BrokerClient* bc)
20142015
bc->will_topic[0] = '\0';
20152016
#else
20162017
if (bc->will_topic) {
2017-
WOLFMQTT_FORCE_ZERO(bc->will_topic, XSTRLEN(bc->will_topic) + 1);
2018+
BROKER_FORCE_ZERO(bc->will_topic, XSTRLEN(bc->will_topic) + 1);
20182019
WOLFMQTT_FREE(bc->will_topic);
20192020
bc->will_topic = NULL;
20202021
}
20212022
if (bc->will_payload) {
2022-
WOLFMQTT_FORCE_ZERO(bc->will_payload, bc->will_payload_len);
2023+
BROKER_FORCE_ZERO(bc->will_payload, bc->will_payload_len);
20232024
WOLFMQTT_FREE(bc->will_payload);
20242025
bc->will_payload = NULL;
20252026
}
@@ -2119,14 +2120,14 @@ static int BrokerPendingWill_Add(MqttBroker* broker, BrokerClient* bc)
21192120
}
21202121
else if (pw != NULL) {
21212122
if (pw->topic) {
2122-
WOLFMQTT_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
2123+
BROKER_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
21232124
WOLFMQTT_FREE(pw->topic);
21242125
}
21252126
if (pw->client_id) {
21262127
WOLFMQTT_FREE(pw->client_id);
21272128
}
21282129
if (pw->payload) {
2129-
WOLFMQTT_FORCE_ZERO(pw->payload, pw->payload_len);
2130+
BROKER_FORCE_ZERO(pw->payload, pw->payload_len);
21302131
WOLFMQTT_FREE(pw->payload);
21312132
}
21322133
WOLFMQTT_FREE(pw);
@@ -2180,11 +2181,11 @@ static void BrokerPendingWill_Cancel(MqttBroker* broker,
21802181
}
21812182
WOLFMQTT_FREE(pw->client_id);
21822183
if (pw->topic) {
2183-
WOLFMQTT_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
2184+
BROKER_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
21842185
WOLFMQTT_FREE(pw->topic);
21852186
}
21862187
if (pw->payload) {
2187-
WOLFMQTT_FORCE_ZERO(pw->payload, pw->payload_len);
2188+
BROKER_FORCE_ZERO(pw->payload, pw->payload_len);
21882189
WOLFMQTT_FREE(pw->payload);
21892190
}
21902191
WOLFMQTT_FREE(pw);
@@ -2211,11 +2212,11 @@ static void BrokerPendingWill_FreeAll(MqttBroker* broker)
22112212
BrokerPendingWill* next = pw->next;
22122213
if (pw->client_id) WOLFMQTT_FREE(pw->client_id);
22132214
if (pw->topic) {
2214-
WOLFMQTT_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
2215+
BROKER_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
22152216
WOLFMQTT_FREE(pw->topic);
22162217
}
22172218
if (pw->payload) {
2218-
WOLFMQTT_FORCE_ZERO(pw->payload, pw->payload_len);
2219+
BROKER_FORCE_ZERO(pw->payload, pw->payload_len);
22192220
WOLFMQTT_FREE(pw->payload);
22202221
}
22212222
WOLFMQTT_FREE(pw);
@@ -2279,11 +2280,11 @@ static int BrokerPendingWill_Process(MqttBroker* broker)
22792280
}
22802281
if (pw->client_id) WOLFMQTT_FREE(pw->client_id);
22812282
if (pw->topic) {
2282-
WOLFMQTT_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
2283+
BROKER_FORCE_ZERO(pw->topic, XSTRLEN(pw->topic) + 1);
22832284
WOLFMQTT_FREE(pw->topic);
22842285
}
22852286
if (pw->payload) {
2286-
WOLFMQTT_FORCE_ZERO(pw->payload, pw->payload_len);
2287+
BROKER_FORCE_ZERO(pw->payload, pw->payload_len);
22872288
WOLFMQTT_FREE(pw->payload);
22882289
}
22892290
WOLFMQTT_FREE(pw);

src/mqtt_client.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
#include "wolfmqtt/mqtt_client.h"
2828

29+
#define CLIENT_FORCE_ZERO(mem, len) Mqtt_ForceZero(mem, (word32)(len))
30+
2931
/* DOCUMENTED BUILD OPTIONS:
3032
*
3133
* WOLFMQTT_MULTITHREAD: Enables multi-thread support with mutex protection on
@@ -1731,7 +1733,7 @@ int MqttClient_Connect(MqttClient *client, MqttConnect *mc_connect)
17311733

17321734
/* Clear tx_buf to remove any plaintext credentials from memory.
17331735
* Use xfer (saved before MqttWriteStop zeroes client->write) */
1734-
WOLFMQTT_FORCE_ZERO(client->tx_buf, xfer);
1736+
CLIENT_FORCE_ZERO(client->tx_buf, xfer);
17351737

17361738
if (rc != xfer) {
17371739
MqttClient_CancelMessage(client, (MqttObject*)mc_connect);

wolfmqtt/mqtt_types.h

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -358,24 +358,13 @@ enum MqttPacketResponseCodes {
358358
#define WOLFMQTT_NORETURN
359359
#endif
360360

361-
/* Secure memory zeroing - prevents compiler dead-store elimination */
362-
#ifndef WOLFMQTT_FORCE_ZERO
363-
#ifdef ENABLE_MQTT_TLS
364-
#include <wolfssl/wolfcrypt/memory.h>
365-
#define WOLFMQTT_FORCE_ZERO(mem, len) wc_ForceZero(mem, (word32)(len))
366-
#else
367-
static INLINE void wolfmqtt_force_zero(void* mem, word32 len)
368-
{
369-
volatile byte* p = (volatile byte*)mem;
370-
word32 i;
371-
for (i = 0; i < len; i++) {
372-
p[i] = 0;
373-
}
374-
}
375-
#define WOLFMQTT_FORCE_ZERO(mem, len) \
376-
wolfmqtt_force_zero(mem, (word32)(len))
377-
#endif
378-
#endif
361+
/* Secure memory zeroing - uses volatile pointer to prevent compiler
362+
* from optimizing away the stores (dead-store elimination). */
363+
static INLINE void Mqtt_ForceZero(void* mem, word32 len)
364+
{
365+
volatile byte* z = (volatile byte*)mem;
366+
while (len--) *z++ = 0;
367+
}
379368

380369
/* Logging / Tracing */
381370
#ifdef WOLFMQTT_NO_STDIO

0 commit comments

Comments
 (0)