Fix build on i686: size_t vs CK_ULONG pointer incompatibility

opencryptoki-3.27.0 fails to build on i686 in %build:

  usr/lib/common/mech_openssl.c:2766:52: error: passing argument 5 of
    'EVP_PKEY_get_octet_string_param' from incompatible pointer type
    expected 'size_t *' {aka 'unsigned int *'} but argument is of type
    'CK_ULONG *' {aka 'long unsigned int *'}
  usr/lib/common/mech_openssl.c:2780:56: error: (likewise)
  usr/lib/common/mech_openssl.c:7051:36: error: passing argument 4 of
    'openssl_get_key_from_pkey' from incompatible pointer type

CK_ULONG is 'unsigned long' while size_t on ILP32 is 'unsigned int', so
only 32-bit builds break; on LP64 the types coincide. Since GCC 14
-Wincompatible-pointer-types is an error by default.

Both patches are post-v3.27.0 upstream commits (v3.27.0 was tagged
2026-05-13, the fixes landed in June/July 2026), so they are absent from
the 3.27.0-1.el10 import. RHEL 10 does not build i686 and never hit this.

  0001 -> 627d27514e7494d36d3d7924e03e4e23ac76bec3
  0002 -> ca1ac6235b9d6231578a8487dc441d1ca2a3dfd9
This commit is contained in:
eabdullin 2026-08-11 12:25:09 +03:00
commit f2618fd0a9
3 changed files with 135 additions and 0 deletions

18
config.yaml Normal file
View File

@ -0,0 +1,18 @@
actions:
- modify_release:
- suffix: ".alma.1"
enabled: true
- changelog_entry:
- name: "Eduard Abdullin"
email: "eabdullin@almalinux.org"
line:
- "Fix build on i686: size_t vs CK_ULONG pointer incompatibility"
- add_files:
- type: "patch"
name: "0001-Fix-build-error-on-32-bit-systems-size_t-vs-CK_ULONG.patch"
number: 1001
- type: "patch"
name: "0002-Fix-unused-variable-d_size-Werror-unused-variable-wi.patch"
number: 1002

View File

@ -0,0 +1,80 @@
From 627d27514e7494d36d3d7924e03e4e23ac76bec3 Mon Sep 17 00:00:00 2001
From: Andreas Tille <tille@debian.org>
Date: Tue, 23 Jun 2026 14:30:32 +0200
Subject: [PATCH] Fix build error on 32 bit systems: size_t vs CK_ULONG pointer
incompatibility
On i386, size_t is 'unsigned int' while CK_ULONG is 'unsigned long'.
Signed-off-by: Andreas Tille <tille@debian.org>
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
---
usr/lib/common/mech_openssl.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/usr/lib/common/mech_openssl.c b/usr/lib/common/mech_openssl.c
index 6a27c660f..85d7d49ae 100644
--- a/usr/lib/common/mech_openssl.c
+++ b/usr/lib/common/mech_openssl.c
@@ -2567,7 +2567,7 @@ CK_RV openssl_specific_ec_generate_keypair(STDLL_TokData_t *tokdata,
#endif
CK_BYTE *ecpoint = NULL, *enc_ecpoint = NULL, *d = NULL;
CK_ULONG enc_ecpoint_len, d_len;
- size_t ecpoint_len;
+ size_t ecpoint_len, d_size;
EVP_PKEY_CTX *ctx = NULL;
EVP_PKEY *ec_pkey = NULL;
int nid, pkey_type;
@@ -2762,12 +2762,14 @@ CK_RV openssl_specific_ec_generate_keypair(STDLL_TokData_t *tokdata,
BN_bn2binpad(bn_d, d, d_len);
} else {
/* Edwards/Montgomery: private key is a octet string */
+ d_size = 0;
if (!EVP_PKEY_get_octet_string_param(ec_pkey, OSSL_PKEY_PARAM_PRIV_KEY,
- d, 0, &d_len)) {
+ d, 0, &d_size)) {
TRACE_ERROR("EVP_PKEY_get_octet_string_param failed\n");
rc = CKR_FUNCTION_FAILED;
goto out;
}
+ d_len = d_size;
d = OPENSSL_zalloc(d_len);
if (d == NULL) {
@@ -2777,11 +2779,12 @@ CK_RV openssl_specific_ec_generate_keypair(STDLL_TokData_t *tokdata,
}
if (!EVP_PKEY_get_octet_string_param(ec_pkey, OSSL_PKEY_PARAM_PRIV_KEY,
- d, d_len, &d_len)) {
+ d, d_size, &d_size)) {
TRACE_ERROR("EVP_PKEY_get_octet_string_param failed\n");
rc = CKR_FUNCTION_FAILED;
goto out;
}
+ d_len = d_size;
}
#endif
@@ -7030,6 +7033,7 @@ CK_RV openssl_specific_pqc_get_pub_key_from_priv_key(TEMPLATE *priv_tmpl,
const char *alg_name;
EVP_PKEY *pkey = NULL;
CK_RV rc;
+ size_t pub_value_len;
alg_name = openssl_get_pqc_oid_name(oid);
if (alg_name == NULL) {
@@ -7048,12 +7052,13 @@ CK_RV openssl_specific_pqc_get_pub_key_from_priv_key(TEMPLATE *priv_tmpl,
rc = openssl_get_key_from_pkey(pkey, OSSL_PKEY_PARAM_PUB_KEY,
(CK_BYTE **)&pub_value->pValue,
- &pub_value->ulValueLen,
+ &pub_value_len,
FALSE);
if (rc != CKR_OK) {
TRACE_ERROR("get_key_from_pkey failed for pub key\n");
goto out;
}
+ pub_value->ulValueLen = pub_value_len;
pub_value->type = CKA_VALUE;

View File

@ -0,0 +1,37 @@
From ca1ac6235b9d6231578a8487dc441d1ca2a3dfd9 Mon Sep 17 00:00:00 2001
From: Ingo Franzki <ifranzki@linux.ibm.com>
Date: Fri, 3 Jul 2026 08:51:49 +0200
Subject: [PATCH] =?UTF-8?q?Fix=20unused=20variable=20=E2=80=98d=5Fsize?=
=?UTF-8?q?=E2=80=99=20[-Werror=3Dunused-variable]=20with=20OpenSSL=201.1.?=
=?UTF-8?q?1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Move the variable declaration of 'd_size' into the >= OpenSSL 3.0.0 block,
it is only used when building with OpenSSL >= 3.0.0.
Fixes: https://github.com/opencryptoki/opencryptoki/commit/627d27514e7494d36d3d7924e03e4e23ac76bec3
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
---
usr/lib/common/mech_openssl.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/usr/lib/common/mech_openssl.c b/usr/lib/common/mech_openssl.c
index 85d7d49ae..b1b70a160 100644
--- a/usr/lib/common/mech_openssl.c
+++ b/usr/lib/common/mech_openssl.c
@@ -2564,10 +2564,11 @@ CK_RV openssl_specific_ec_generate_keypair(STDLL_TokData_t *tokdata,
#else
BIGNUM *bn_d = NULL;
int len;
+ size_t d_size;
#endif
CK_BYTE *ecpoint = NULL, *enc_ecpoint = NULL, *d = NULL;
CK_ULONG enc_ecpoint_len, d_len;
- size_t ecpoint_len, d_size;
+ size_t ecpoint_len;
EVP_PKEY_CTX *ctx = NULL;
EVP_PKEY *ec_pkey = NULL;
int nid, pkey_type;