Skip to content

Commit

Permalink
Zstd: Don't leave errors behind if loading library failed.
Browse files Browse the repository at this point in the history
If zstd support is dynamic then it is loaded at runtime and may fail
if the library is not available. The library can be loaded even if the
user did not ask for it, for instance via SSL_CTX_new_ex() ->
ossl_comp_has_alg().
Leaving an error record can have other side effects if the user is
poping the stack and notices and aborts due it.

Use ERR_set_mark()/ ERR_pop_to_mark() to avoid leaving marks if library
loading failed. Use ERR_clear_last_mark() if loading succeeded.

Fixes: openssl#23558
Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
  • Loading branch information
sebastianas committed Feb 15, 2024
1 parent a461f91 commit 17ddad9
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions crypto/comp/c_zstd.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ DEFINE_RUN_ONCE_STATIC(ossl_comp_zstd_init)
# define LIBZSTD "zstd"
# endif

ERR_set_mark();
zstd_dso = DSO_load(NULL, LIBZSTD, NULL, 0);
if (zstd_dso != NULL) {
p_createCStream = (createCStream_ft)DSO_bind_func(zstd_dso, "ZSTD_createCStream");
Expand Down Expand Up @@ -394,8 +395,10 @@ DEFINE_RUN_ONCE_STATIC(ossl_comp_zstd_init)
|| p_isError == NULL || p_getErrorName == NULL || p_DStreamInSize == NULL
|| p_CStreamInSize == NULL) {
ossl_comp_zstd_cleanup();
ERR_pop_to_mark();
return 0;
}
ERR_clear_last_mark();
# endif
return 1;
}
Expand Down

0 comments on commit 17ddad9

Please sign in to comment.