Commit 3ad285003e for openssl.org
commit 3ad285003e55e1600c7ed591fcd7e36d1208cae2
Author: Dr. David von Oheimb <dev@ddvo.net>
Date: Thu Oct 23 21:46:00 2025 +0200
OSSL_CMP_SRV_process_request(): fix wrong handling of aborted polling transaction
The check for acceptable response body types during polling
should only be done when we are in an active transaction.
Also fix missing parentheses in test/cmp_client_test.c, which had prevented reporting failure.
Reviewed-by: Andrew Dinh <andrewd@openssl.org>
Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
MergeDate: Thu Aug 27 07:25:02 2026
(Merged from https://github.com/openssl/openssl/pull/28988)
diff --git a/crypto/cmp/cmp_server.c b/crypto/cmp/cmp_server.c
index 41de2790ae..fcd506f30e 100644
--- a/crypto/cmp/cmp_server.c
+++ b/crypto/cmp/cmp_server.c
@@ -660,12 +660,6 @@ OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx,
if (!OSSL_CMP_CTX_set1_recipient(ctx, hdr->sender->d.directoryName))
goto err;
- if (srv_ctx->polling && req_type != OSSL_CMP_PKIBODY_POLLREQ
- && req_type != OSSL_CMP_PKIBODY_ERROR) {
- ERR_raise(ERR_LIB_CMP, CMP_R_EXPECTED_POLLREQ);
- goto err;
- }
-
if (assuming_new_transaction(ctx, req)) {
/*
* Start of a new transaction, resetting transactionID and senderNonce.
@@ -685,6 +679,11 @@ OSSL_CMP_MSG *OSSL_CMP_SRV_process_request(OSSL_CMP_SRV_CTX *srv_ctx,
goto err;
#endif
}
+ if (srv_ctx->polling && req_type != OSSL_CMP_PKIBODY_POLLREQ
+ && req_type != OSSL_CMP_PKIBODY_ERROR) {
+ ERR_raise(ERR_LIB_CMP, CMP_R_EXPECTED_POLLREQ);
+ goto err;
+ }
}
req_verified = ossl_cmp_msg_check_update(ctx, req, unprotected_exception,
diff --git a/test/cmp_client_test.c b/test/cmp_client_test.c
index cd51d3d0e7..a4a2842cd6 100644
--- a/test/cmp_client_test.c
+++ b/test/cmp_client_test.c
@@ -140,16 +140,18 @@ static int execute_exec_GENM_ses_test_single(CMP_SES_TEST_FIXTURE *fixture)
ASN1_OBJECT *type = OBJ_txt2obj("1.3.6.1.5.5.7.4.2", 1);
OSSL_CMP_ITAV *itav = OSSL_CMP_ITAV_create(type, NULL);
STACK_OF(OSSL_CMP_ITAV) *itavs;
+ int ret;
OSSL_CMP_CTX_push0_genm_ITAV(ctx, itav);
itavs = OSSL_CMP_exec_GENM_ses(ctx);
print_errors_PKIStatusInfo(ctx);
+ ret = TEST_int_eq(OSSL_CMP_CTX_get_status(ctx), fixture->expected)
+ && (fixture->expected == OSSL_CMP_PKISTATUS_accepted
+ ? TEST_ptr(itavs)
+ : TEST_ptr_null(itavs));
sk_OSSL_CMP_ITAV_pop_free(itavs, OSSL_CMP_ITAV_free);
- return TEST_int_eq(OSSL_CMP_CTX_get_status(ctx), fixture->expected)
- && fixture->expected == OSSL_CMP_PKISTATUS_accepted
- ? TEST_ptr(itavs)
- : TEST_ptr_null(itavs);
+ return ret;
}
static int execute_exec_GENM_ses_test(CMP_SES_TEST_FIXTURE *fixture)