]> git.ipfire.org Git - thirdparty/shairport-sync.git/commitdiff
make OpenSSL routines un-cancellable, in case there is a possible memory leak
authorMike Brady <mikebrady@eircom.net>
Fri, 18 Jan 2019 16:31:36 +0000 (16:31 +0000)
committerMike Brady <mikebrady@eircom.net>
Fri, 18 Jan 2019 16:31:36 +0000 (16:31 +0000)
common.c

index 729bcacdfcdc12a9ee40d09d802052d75843d681..a13546215c6ed5da5c54dd3ddb1cdf6d1ffdfa31 100644 (file)
--- a/common.c
+++ b/common.c
@@ -394,6 +394,8 @@ uint8_t *base64_dec(char *input, int *outlen) {
 
 #ifdef CONFIG_OPENSSL
 char *base64_enc(uint8_t *input, int length) {
+       int oldState;
+  pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
   BIO *bmem, *b64;
   BUF_MEM *bptr;
   b64 = BIO_new(BIO_f_base64());
@@ -414,10 +416,13 @@ char *base64_enc(uint8_t *input, int length) {
 
   BIO_free_all(bmem);
 
+  pthread_setcancelstate(oldState, NULL);
   return buf;
 }
 
 uint8_t *base64_dec(char *input, int *outlen) {
+       int oldState;
+  pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
   BIO *bmem, *b64;
   int inlen = strlen(input);
 
@@ -442,6 +447,7 @@ uint8_t *base64_dec(char *input, int *outlen) {
   BIO_free_all(b64);
 
   *outlen = nread;
+  pthread_setcancelstate(oldState, NULL);
   return buf;
 }
 #endif
@@ -473,6 +479,8 @@ static char super_secret_key[] =
 
 #ifdef CONFIG_OPENSSL
 uint8_t *rsa_apply(uint8_t *input, int inlen, int *outlen, int mode) {
+       int oldState;
+  pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldState);
   RSA *rsa = NULL;
   if (!rsa) {
     BIO *bmem = BIO_new_mem_buf(super_secret_key, -1);
@@ -491,6 +499,7 @@ uint8_t *rsa_apply(uint8_t *input, int inlen, int *outlen, int mode) {
   default:
     die("bad rsa mode");
   }
+  pthread_setcancelstate(oldState, NULL);
   return out;
 }
 #endif