]> git.ipfire.org Git - thirdparty/shairport-sync.git/commitdiff
Start using libgcrypt again, as there appears to be a memory leak in openssl when...
authorMike Brady <4265913+mikebrady@users.noreply.github.com>
Fri, 7 Oct 2022 15:17:42 +0000 (16:17 +0100)
committerMike Brady <4265913+mikebrady@users.noreply.github.com>
Fri, 7 Oct 2022 15:17:42 +0000 (16:17 +0100)
Makefile.am
configure.ac
shairport.c

index 1dc654cc8f6288485945a199d5f313031941e84f..bc6710d8cbbc43c32d07c06054d5ee04dc1e4192 100644 (file)
@@ -1,7 +1,7 @@
 SUBDIRS = man
 ARFLAGS = cr
 
-lib_pair_ap_a_CFLAGS = -Wall -g -DCONFIG_OPENSSL -pthread
+lib_pair_ap_a_CFLAGS = -Wall -g -DCONFIG_GCRYPT -pthread
 lib_tinyhttp_a_CFLAGS = -pthread
 lib_dbus_interface_a_CFLAGS = -pthread
 lib_mpris_interface_a_CFLAGS = -pthread
index fd233952f45bbe6f7745c2d103a1521cdf972354..b0f53cd9f99e3467a586111677ef3362cc123851 100644 (file)
@@ -412,6 +412,11 @@ if test "x$with_airplay_2" = "xyes" ; then
     ])
   ])
   PKG_CHECK_MODULES([libsodium], [libsodium],[CFLAGS="${libsodium_CFLAGS} ${CFLAGS}" LIBS="${libsodium_LIBS} ${LIBS}"],[AC_MSG_ERROR(AirPlay 2 support requires libsodium -- libsodium-dev suggested)])
+  PKG_CHECK_MODULES([libgcrypt], [libgcrypt],[CFLAGS="${libgcrypt_CFLAGS} ${CFLAGS}" LIBS="${libgcrypt_LIBS} ${LIBS}"],[
+    AC_CHECK_LIB([gcrypt], [gcry_control], [], [
+      AC_MSG_ERROR([Airplay 2 support requires libgcrypt -- libgcrypt-dev suggested])
+    ])
+  ])
   PKG_CHECK_MODULES([libavutil], [libavutil],[CFLAGS="${libavutil_CFLAGS} ${CFLAGS}" LIBS="${libavutil_LIBS} ${LIBS}"],[
       AC_MSG_ERROR(AirPlay 2 support requires libavutil -- libavutil-dev suggested)])
   PKG_CHECK_MODULES([libavcodec], [libavcodec],[CFLAGS="${libavcodec_CFLAGS} ${CFLAGS}" LIBS="${libavcodec_LIBS} ${LIBS}"],[
index aec61bc74b8966b82d40298a5ab022319d8a4fbc..9d1657f0d6b6f409248209497b8a9bcadce04b33 100644 (file)
@@ -45,6 +45,7 @@
 
 #ifdef CONFIG_AIRPLAY_2
 #include "ptp-utilities.h"
+#include <gcrypt.h>
 #include <libavcodec/avcodec.h>
 #include <sodium.h>
 #include <uuid/uuid.h>
@@ -2103,6 +2104,28 @@ int main(int argc, char **argv) {
     debug(1, "libsodium initialised.");
   }
 
+  // this code is based on
+  // https://www.gnupg.org/documentation/manuals/gcrypt/Initializing-the-library.html
+
+  /* Version check should be the very first call because it
+    makes sure that important subsystems are initialized.
+    #define NEED_LIBGCRYPT_VERSION to the minimum required version. */
+
+#define NEED_LIBGCRYPT_VERSION "1.5.4"
+
+  if (!gcry_check_version(NEED_LIBGCRYPT_VERSION)) {
+    die("libgcrypt is too old (need %s, have %s).", NEED_LIBGCRYPT_VERSION,
+        gcry_check_version(NULL));
+  }
+
+  /* Disable secure memory.  */
+  gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
+
+  /* ... If required, other initialization goes here.  */
+
+  /* Tell Libgcrypt that initialization has completed. */
+  gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
+
 #endif
 
   /* Mess around with the latency options */