]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: ssl: Destroy ckch instances before the store during deinit
authorRemi Tricot-Le Breton <rlebreton@haproxy.com>
Wed, 7 Feb 2024 15:38:44 +0000 (16:38 +0100)
committerWilliam Lallemand <wlallemand@haproxy.com>
Wed, 7 Feb 2024 16:10:31 +0000 (17:10 +0100)
The ckch_store's free'ing function might end up calling
'ssl_sock_free_ocsp' if the corresponding certificate had ocsp data.
This ocsp cleanup function expects for the 'refcount_instance' member of
the certificate_ocsp structure to be 0, meaning that no live
ckch instance kept a reference on this certificate_ocsp structure.
But since in ckch_store_free we were destroying the ckch_data before
destroying the linked instances, the BUG_ON would fail during a standard
deinit. Reversing the cleanup order fixes the problem.

Must be backported to 2.8.

src/ssl_ckch.c

index 1eef87ae2011d6cca222850d56fcc14f7b44f30e..f32e9b82824870eb611e386a537f324e09dd5a4f 100644 (file)
@@ -888,14 +888,14 @@ void ckch_store_free(struct ckch_store *store)
        if (!store)
                return;
 
-       ssl_sock_free_cert_key_and_chain_contents(store->data);
-
-       ha_free(&store->data);
-
        list_for_each_entry_safe(inst, inst_s, &store->ckch_inst, by_ckchs) {
                ckch_inst_free(inst);
        }
        ebmb_delete(&store->node);
+
+       ssl_sock_free_cert_key_and_chain_contents(store->data);
+       ha_free(&store->data);
+
        free(store);
 }