diff --git a/res/res_stir_shaken/stir_shaken.c b/res/res_stir_shaken/stir_shaken.c
index b580773c31e271eab3673fbec79ef46778795f38..6bc07ea4d94dc6aa627c04a7f75bba3be32740a3 100644
--- a/res/res_stir_shaken/stir_shaken.c
+++ b/res/res_stir_shaken/stir_shaken.c
@@ -144,6 +144,7 @@ char *stir_shaken_get_serial_number_x509(const char *path)
 	ASN1_INTEGER *serial;
 	BIGNUM *bignum;
 	char *serial_hex;
+	char *ret;
 
 	fp = fopen(path, "r");
 	if (!fp) {
@@ -188,5 +189,12 @@ char *stir_shaken_get_serial_number_x509(const char *path)
 		return NULL;
 	}
 
-	return serial_hex;
+	ret = ast_strdup(serial_hex);
+	OPENSSL_free(serial_hex);
+	if (!ret) {
+		ast_log(LOG_ERROR, "Failed to dup serial from openssl for certificate %s\n", path);
+		return NULL;
+	}
+
+	return ret;
 }