[Openvpn-devel,v1] crypto_epoch: wipe key material with secure_memzero()

Message ID 20261103124012.4642-1-gert@greenie.muc.de
State New
Headers
Series [Openvpn-devel,v1] crypto_epoch: wipe key material with secure_memzero() |

Commit Message

Gert Doering Nov. 3, 2026, 12:40 p.m. UTC
  From: Razvan Cojocaru <razvanc@mailbox.org>

CLEAR() is a plain memset(), which the compiler may drop for stack
variables that are not read afterwards. Use secure_memzero() for the
derived send/recv data keys and the epoch keys freed in
free_epoch_key_ctx().

Change-Id: Ic7ca54d4e2ec667532c0052f110aaf2e9ad5bf82
Signed-off-by: Razvan Cojocaru <razvanc@mailbox.org>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2103
---

This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.

Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/2103
This mail reflects revision 1 of this Change.

Acked-by according to Gerrit (reflected above):
Frank Lichtenheld <frank@lichtenheld.com>
  

Patch

diff --git a/src/openvpn/crypto_epoch.c b/src/openvpn/crypto_epoch.c
index 69a1852..35f9b55 100644
--- a/src/openvpn/crypto_epoch.c
+++ b/src/openvpn/crypto_epoch.c
@@ -181,7 +181,7 @@ 
 
     init_key_bi_ctx_send(&co->key_ctx_bi.encrypt, &send_key, &co->epoch_key_type, name);
     reset_packet_id_send(&co->packet_id.send);
-    CLEAR(send_key);
+    secure_memzero(&send_key, sizeof(send_key));
 }
 
 
@@ -196,7 +196,7 @@ 
     snprintf(name, sizeof(name), "Epoch Data key %" PRIu16, co->epoch_key_recv.epoch);
 
     init_key_bi_ctx_recv(ctx, &recv_key, &co->epoch_key_type, name);
-    CLEAR(recv_key);
+    secure_memzero(&recv_key, sizeof(recv_key));
 }
 
 void
@@ -346,8 +346,8 @@ 
     free(co->epoch_data_keys_future);
     free_key_ctx(&co->epoch_retiring_data_receive_key);
     free(co->epoch_retiring_key_pid_recv.seq_list);
-    CLEAR(co->epoch_key_recv);
-    CLEAR(co->epoch_key_send);
+    secure_memzero(&co->epoch_key_recv, sizeof(co->epoch_key_recv));
+    secure_memzero(&co->epoch_key_send, sizeof(co->epoch_key_send));
 }
 
 void