From 56e0e5b9afb9749e8c2a24d51add097f9d814a58 Mon Sep 17 00:00:00 2001 From: "L. Merino" Date: Sat, 19 Sep 2020 09:48:09 +0200 Subject: [PATCH 1/2] fix: return error when malloc fails in inplace_cb_register_wrapped() --- dynlibmod/dynlibmod.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index f9751d8c6..2bd4a28c1 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -242,6 +242,8 @@ int inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbarg, struct module_env* env, int id) { struct cb_pair* cb_pair = malloc(sizeof(struct cb_pair)); + if(cb_pair == NULL) + return 0; cb_pair->cb = cb; cb_pair->cb_arg = cbarg; if(type >= inplace_cb_reply && type <= inplace_cb_reply_servfail) { From 41ab788cab98255c681c5e33ba0a67dc6815ec7a Mon Sep 17 00:00:00 2001 From: "L. Merino" Date: Sat, 19 Sep 2020 09:48:42 +0200 Subject: [PATCH 2/2] fix: avoid leaking cb_pair in inplace_cb_register_wrapped() --- dynlibmod/dynlibmod.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dynlibmod/dynlibmod.c b/dynlibmod/dynlibmod.c index 2bd4a28c1..10ae143a4 100644 --- a/dynlibmod/dynlibmod.c +++ b/dynlibmod/dynlibmod.c @@ -255,6 +255,7 @@ inplace_cb_register_wrapped(void* cb, enum inplace_cb_list_type type, void* cbar } else if(type == inplace_cb_edns_back_parsed) { return inplace_cb_register(&dynlib_inplace_cb_edns_back_parsed, type, (void*) cb_pair, env, id); } else { + free(cb_pair); return 0; } }