Skip to content

Commit 4b21cf3

Browse files
Add fencing to ClientSessionToSession()
Prevent memory access before clientSession->serverRow and clientSession->serverIdx are sanitized. Fixes ZD17219 Co-authored-by: Daniele Lacamera <dan@danielinux.net>
1 parent b8392ef commit 4b21cf3

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

src/ssl.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14469,6 +14469,9 @@ WOLFSSL_SESSION* ClientSessionToSession(const WOLFSSL_SESSION* session)
1446914469
WOLFSSL_MSG("Client cache serverRow or serverIdx invalid");
1447014470
error = -1;
1447114471
}
14472+
/* Prevent memory access before clientSession->serverRow and
14473+
* clientSession->serverIdx are sanitized. */
14474+
XFENCE();
1447214475
if (error == 0) {
1447314476
/* Lock row */
1447414477
sessRow = &SessionCache[clientSession->serverRow];

wolfssl/wolfcrypt/wc_port.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,6 +1180,22 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void);
11801180
#endif
11811181
#endif
11821182

1183+
#ifndef WOLFSSL_NO_FENCE
1184+
#if defined (__i386__) || defined(__x86_64__)
1185+
#define XFENCE() asm volatile("lfence")
1186+
#elif defined (__arm__) || defined(__aarch64__)
1187+
#define XFENCE() asm volatile("isb")
1188+
#elif defined(__riscv)
1189+
#define XFENCE() asm volatile("fence")
1190+
#elif defined(__PPC__)
1191+
#define XFENCE() asm volatile("isync; sync")
1192+
#else
1193+
#define XFENCE() do{}while(0)
1194+
#endif
1195+
#else
1196+
#define XFENCE() do{}while(0)
1197+
#endif
1198+
11831199

11841200
/* AFTER user_settings.h is loaded,
11851201
** determine if POSIX multi-threaded: HAVE_PTHREAD */

0 commit comments

Comments
 (0)