Blame SOURCES/p11-kit-lower-libffi-priority.patch

593d6b
From 6e1046de2233fba7875d3d6a1b260192678dd0ad Mon Sep 17 00:00:00 2001
593d6b
From: Daiki Ueno <dueno@redhat.com>
593d6b
Date: Fri, 19 Oct 2018 10:21:36 +0200
593d6b
Subject: [PATCH] virtual: Prefer fixed closures to libffi closures
593d6b
593d6b
On some circumstances (such as when loading p11-kit-proxy from httpd),
593d6b
it is known that creation of libffi closure always fails, due to
593d6b
SELinux policy.  Although this is harmless, it pollutes the journal
593d6b
and gives wrong hints when troubleshooting.  This patch changes the
593d6b
order of preference of libffi vs pre-compiled closures to avoid that.
593d6b
---
593d6b
 p11-kit/virtual.c | 19 ++++++++++++++-----
593d6b
 1 file changed, 14 insertions(+), 5 deletions(-)
593d6b
593d6b
diff --git a/p11-kit/virtual.c b/p11-kit/virtual.c
593d6b
index 6abfe7a..338239f 100644
593d6b
--- a/p11-kit/virtual.c
593d6b
+++ b/p11-kit/virtual.c
593d6b
@@ -2832,9 +2832,14 @@ p11_virtual_wrap (p11_virtual *virt,
593d6b
                   p11_destroyer destroyer)
593d6b
 {
593d6b
 	Wrapper *wrapper;
593d6b
+	CK_FUNCTION_LIST *result;
593d6b
 
593d6b
 	return_val_if_fail (virt != NULL, NULL);
593d6b
 
593d6b
+	result = p11_virtual_wrap_fixed (virt, destroyer);
593d6b
+	if (result)
593d6b
+		return result;
593d6b
+
593d6b
 	wrapper = calloc (1, sizeof (Wrapper));
593d6b
 	return_val_if_fail (wrapper != NULL, NULL);
593d6b
 
593d6b
@@ -2844,8 +2849,10 @@ p11_virtual_wrap (p11_virtual *virt,
593d6b
 	wrapper->bound.version.minor = CRYPTOKI_VERSION_MINOR;
593d6b
 	wrapper->fixed_index = -1;
593d6b
 
593d6b
-	if (!init_wrapper_funcs (wrapper))
593d6b
-		return p11_virtual_wrap_fixed (virt, destroyer);
593d6b
+	if (!init_wrapper_funcs (wrapper)) {
593d6b
+		free (wrapper);
593d6b
+		return_val_if_reached (NULL);
593d6b
+	}
593d6b
 
593d6b
 	assert ((void *)wrapper == (void *)&wrapper->bound);
593d6b
 	assert (p11_virtual_is_wrapper (&wrapper->bound));
593d6b
@@ -2859,7 +2866,11 @@ CK_FUNCTION_LIST *
593d6b
 p11_virtual_wrap (p11_virtual *virt,
593d6b
                   p11_destroyer destroyer)
593d6b
 {
593d6b
-	return p11_virtual_wrap_fixed (virt, destroyer);
593d6b
+	CK_FUNCTION_LIST *result;
593d6b
+
593d6b
+	result = p11_virtual_wrap_fixed (virt, destroyer);
593d6b
+	return_val_if_fail (result != NULL, NULL);
593d6b
+	return result;
593d6b
 }
593d6b
 
593d6b
 #endif /* !FFI_CLOSURES */
593d6b
@@ -3068,8 +3079,6 @@ p11_virtual_wrap_fixed (p11_virtual *virt,
593d6b
 	}
593d6b
 	p11_mutex_unlock (&p11_virtual_mutex);
593d6b
 
593d6b
-	return_val_if_fail (result != NULL, NULL);
593d6b
-
593d6b
 	return result;
593d6b
 }
593d6b
 
593d6b
-- 
593d6b
2.17.2
593d6b