]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Change pk11_mem_get() so it cannot soft-fail
authorOndřej Surý <ondrej@isc.org>
Sat, 1 Feb 2020 17:24:43 +0000 (18:24 +0100)
committerMatthijs Mekking <matthijs@isc.org>
Wed, 5 Feb 2020 08:08:35 +0000 (09:08 +0100)
(cherry picked from commit 05ae2e48ab1bd4477a4acec11a18c2fdd1694cb9)

lib/isc/pk11.c

index 234a07e81f39a5882e10a6bea2e26a4b1785b448..49861f2e1dea19a23a8a1a837b9d98f13d24c5dc 100644 (file)
@@ -16,6 +16,7 @@
 #include <inttypes.h>
 #include <stdlib.h>
 #include <string.h>
+#include <errno.h>
 
 #include <isc/log.h>
 #include <isc/mem.h>
@@ -23,6 +24,7 @@
 #include <isc/platform.h>
 #include <isc/print.h>
 #include <isc/stdio.h>
+#include <isc/strerr.h>
 #include <isc/string.h>
 #include <isc/thread.h>
 #include <isc/util.h>
@@ -154,8 +156,12 @@ pk11_mem_get(size_t size) {
                ptr = isc_mem_get(pk11_mctx, size);
        else {
                ptr = malloc(size);
-               if (ptr != NULL)
-                       allocsize += (int)size;
+               if (ptr == NULL && size != 0) {
+                       char strbuf[ISC_STRERRORSIZE];
+                       strerror_r(errno, strbuf, sizeof(strbuf));
+                       isc_error_fatal(__FILE__, __LINE__, "malloc failed: %s",
+                                       strbuf);
+               }
        }
        UNLOCK(&alloclock);
 
@@ -326,8 +332,6 @@ pk11_get_session(pk11_context_t *ctx, pk11_optype_t optype,
        UNLOCK(&sessionlock);
 
        sp = pk11_mem_get(sizeof(*sp));
-       if (sp == NULL)
-               return (ISC_R_NOMEMORY);
        sp->magic = SES_MAGIC;
        sp->token = token;
        sp->session = CK_INVALID_HANDLE;
@@ -482,7 +486,6 @@ scan_slots(void) {
        if (slotCount == 0)
                return;
        slotList = pk11_mem_get(sizeof(CK_SLOT_ID) * slotCount);
-       RUNTIME_CHECK(slotList != NULL);
        PK11_FATALCHECK(pkcs_C_GetSlotList, (CK_FALSE, slotList, &slotCount));
 
        for (i = 0; i < slotCount; i++) {
@@ -493,7 +496,6 @@ scan_slots(void) {
                if (rv != CKR_OK)
                        continue;
                token = pk11_mem_get(sizeof(*token));
-               RUNTIME_CHECK(token != NULL);
                token->magic = TOK_MAGIC;
                token->slotid = slot;
                ISC_LINK_INIT(token, link);