On Mon, Nov 02, 2026 at 10:37:00AM +0000, Christopher Staite wrote:
> Subject: [PATCH] BUG/MEDIUM: ssl/cli: reset the ongoing transaction when 
> "commit ssl cert" is interrupted
> "commit ssl cert" builds the new instances in several calls of its I/O
> handler: it yields every 10 instances, and whenever the output buffer is
> full. If the applet is released in between, for example because the CLI
> client closed the connection, cli_release_commit_cert() frees the new
> ckch_store of the transaction, but ckchs_transaction.new_ckchs,
> ckchs_transaction.old_ckchs and ckchs_transaction.path still reference
> it. The next "set ssl cert", "commit ssl cert", "abort ssl cert" or
> "show ssl cert" on this certificate then uses the freed store, which may
> crash the process or corrupt memory.
> 
> Only an admin of the CLI can trigger it, but it doesn't take much: a
> certificate used by more than 10 instances (e.g. in a crt-list loaded by
> several bind lines) and a client which doesn't wait for the end of the
> commit are enough.
> 
> The release function is only called with a new store still attached when
> the transaction is being abandoned, the success path having consumed it
> in CERT_ST_INSERT, so the transaction is reset there. On the error path,
> CERT_ST_FIN already reset it and doing it again is harmless.
> 
> "commit ssl ca-file" and "commit ssl crl-file" seem to follow the same
> pattern in cli_release_commit_cafile() and cli_release_commit_crlfile(),
> this will be addressed separately.
> 
> This should be backported to all stable branches. Before 3.4, the release
> function is the same but frees ctx->new_ckchs itself instead of calling
> ckch_store_update_cleanup().

Thanks, merged as well.


-- 
William Lallemand


Reply via email to