From 868a14c25da4b5fcf0a1f4783202ad7800fe4682 Mon Sep 17 00:00:00 2001 From: Bryan Paxton Date: Sun, 26 Jul 2020 14:25:24 -0500 Subject: [PATCH] Ensure we never return 1 from sodium_init() onload sodium_init() will return 0 on success, -1 on failure, and 1 if sodium is already loaded and initialized (which is not an error). In the case where libsodium is already initialized and the system is restarted we may return 1 from onload nif function resulting in a crash. - change the call to sodium_init() to check for an error return (-1) and return -1 explicitly in this case, otherwise always return zero at the end of our onload function. --- c_src/enacl_nif.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/c_src/enacl_nif.c b/c_src/enacl_nif.c index 2af0b0a..db34ab8 100644 --- a/c_src/enacl_nif.c +++ b/c_src/enacl_nif.c @@ -36,7 +36,11 @@ int enif_crypto_load(ErlNifEnv *env, void **priv_data, ERL_NIF_TERM load_info) { return -1; } - return sodium_init(); + if (sodium_init() == -1) { + return -1; + } + + return 0; } /* Low-level functions (Hashing, String Equality, ...) */