From e49759025fcc7a422d4b96f6cecf12ab445d4bc3 Mon Sep 17 00:00:00 2001 From: lax1dude Date: Thu, 8 Aug 2024 18:19:20 +1000 Subject: [PATCH] #3716, #3707: Fix native-cipher segfault when using musl libc --- native/compile-native.sh | 4 ++- native/src/main/c/NativeCipherImpl.c | 6 ++++ native/src/main/c/mbedtls_custom_config.h | 31 +++++++++++++++++++++ native/src/main/resources/native-cipher.so | Bin 40016 -> 48648 bytes 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 native/src/main/c/mbedtls_custom_config.h diff --git a/native/compile-native.sh b/native/compile-native.sh index 5b6e54c4..b5c011d8 100755 --- a/native/compile-native.sh +++ b/native/compile-native.sh @@ -2,8 +2,10 @@ set -eu +CWD=$(pwd) + echo "Compiling mbedtls" -(cd mbedtls && make no_test) +(cd mbedtls && CFLAGS="-fPIC -I$CWD/src/main/c -DMBEDTLS_USER_CONFIG_FILE=''" make no_test) echo "Compiling zlib" (cd zlib && CFLAGS=-fPIC ./configure --static && make) diff --git a/native/src/main/c/NativeCipherImpl.c b/native/src/main/c/NativeCipherImpl.c index 727a2f1f..020aaa1d 100644 --- a/native/src/main/c/NativeCipherImpl.c +++ b/native/src/main/c/NativeCipherImpl.c @@ -5,11 +5,15 @@ #include "shared.h" #include "net_md_5_bungee_jni_cipher_NativeCipherImpl.h" +// Hack to keep the compiler from optimizing the memset away +static void *(*const volatile memset_func)(void *, int, size_t) = memset; + typedef unsigned char byte; typedef struct crypto_context { int mode; mbedtls_aes_context cipher; + int keyLen; byte key[]; } crypto_context; @@ -22,6 +26,7 @@ jlong JNICALL Java_net_md_15_bungee_jni_cipher_NativeCipherImpl_init(JNIEnv* env return 0; } + crypto->keyLen = (int) keyLen; (*env)->GetByteArrayRegion(env, key, 0, keyLen, (jbyte*) &crypto->key); mbedtls_aes_init(&crypto->cipher); @@ -36,6 +41,7 @@ void Java_net_md_15_bungee_jni_cipher_NativeCipherImpl_free(JNIEnv* env, jobject crypto_context *crypto = (crypto_context*) ctx; mbedtls_aes_free(&crypto->cipher); + memset_func(crypto->key, 0, (size_t) crypto->keyLen); free(crypto); } diff --git a/native/src/main/c/mbedtls_custom_config.h b/native/src/main/c/mbedtls_custom_config.h new file mode 100644 index 00000000..a32df887 --- /dev/null +++ b/native/src/main/c/mbedtls_custom_config.h @@ -0,0 +1,31 @@ + +// This is a hack to deal with a glitch that happens when mbedtls is compiled against glibc +// but then run on a linux distro that uses musl libc. This implementation of the zeroize +// is compatible with both glibc and musl without requiring the library to be recompiled. + +// I checked with a disassembler and for BungeeCord's usage of the library, implementing +// this function as a static function only resulted in 2 different subroutines referencing +// different versions of memset_func, so we might as well keep things simple and use a +// static function here instead of requiring the mbedtls makefile to be modified to add +// additional source files. + +#ifndef _INCLUDE_MBEDTLS_CUSTOM_CONFIG_H +#define _INCLUDE_MBEDTLS_CUSTOM_CONFIG_H + +#include + +#define MBEDTLS_PLATFORM_ZEROIZE_ALT + +#define mbedtls_platform_zeroize mbedtls_platform_zeroize_impl + +// hack to prevent compilers from optimizing the memset away +static void *(*const volatile memset_func)(void *, int, size_t) = memset; + +static void mbedtls_platform_zeroize_impl(void *buf, size_t len) { + if (len > 0) { + memset_func(buf, 0, len); + } +} + +#endif // _INCLUDE_MBEDTLS_CUSTOM_CONFIG_H + diff --git a/native/src/main/resources/native-cipher.so b/native/src/main/resources/native-cipher.so index 87cc1756fed8437a69adc88fae7f1d9da625760d..45afa5f87ab684fdbcf4d75acc5d60862d7df837 100755 GIT binary patch literal 48648 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 Zqy6$MJA3G<{hEiB8uXK&+7Oo&{tw~_u0#L;