]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Force to stop application on ENOMEM error
authordhfelix <daniel.hdz.felix@hotmail.com>
Sat, 28 Nov 2020 01:03:21 +0000 (19:03 -0600)
committerdhfelix <daniel.hdz.felix@hotmail.com>
Sat, 28 Nov 2020 01:03:21 +0000 (19:03 -0600)
discussed in #40

src/asn1/decode.c
src/log.c
src/rsync/rsync.c
src/rtr/pdu_handler.c

index f4703d1d1b13819720b67aa5a506183f5f9b55a9..4e9b24372d27792374fb6021852a9cf8df62ef89 100644 (file)
@@ -96,6 +96,9 @@ asn1_decode(const void *buffer, size_t buffer_size,
        rval = ber_decode(&s_codec_ctx, descriptor, result, buffer,
            buffer_size);
        if (rval.code != RC_OK) {
+               if (rval.code == RC_FAIL && errno == ENOMEM)
+                       pr_enomem();
+
                /* Must free partial object according to API contracts. */
                ASN_STRUCT_FREE(*descriptor, *result);
                /* We expect the data to be complete; RC_WMORE is an error. */
index f5d8c7a94ab987944b524d16fb82a25ef259c5b4..2e797777e4b658675edfdb1baea2e54afbb8e9c6 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -462,6 +462,9 @@ pr_errno(int error, bool syslog_enabled, bool fprintf_enabled, int facility,
 int
 pr_op_errno(int error, const char *format, ...)
 {
+       if (abs(error) == ENOMEM)
+               pr_enomem();
+
        PR_OP_SIMPLE(LOG_ERR);
 
        return pr_errno(error, op_syslog_enabled,
@@ -473,6 +476,9 @@ pr_op_errno(int error, const char *format, ...)
 int
 pr_val_errno(int error, const char *format, ...)
 {
+       if (abs(error) == ENOMEM)
+               pr_enomem();
+
        PR_VAL_SIMPLE(LOG_ERR);
 
        return pr_errno(error, val_syslog_enabled,
@@ -592,7 +598,8 @@ pr_enomem(void)
                __fprintf(LOG_ERR, config_get_op_log_tag(),
                    config_get_op_log_color_output(),
                    "Out of memory.\n");
-       return -ENOMEM;
+       print_stack_trace();
+       exit(ENOMEM);
 }
 
 /**
index a6b01bfe5c10a231f072fc9186ec219e77529899..6332192d309bd135f07908a2e1c5dc47d33810f3 100644 (file)
@@ -446,6 +446,9 @@ do_rsync(struct rpki_uri *uri, bool is_ta, bool log_operation)
                        /* Happy path (but also sad path sometimes). */
                        error = WEXITSTATUS(child_status);
                        pr_val_debug("Child terminated with error code %d.", error);
+                       if (error == ENOMEM)
+                               pr_enomem();
+
                        if (!error)
                                goto release_args;
 
index de9f45a325c9fd3d61bd73b47c68aba77e707fb3..6c8bbd4a525eebe9cce25e614594db7731a416f4 100644 (file)
@@ -67,6 +67,7 @@ handle_serial_query_pdu(int fd, struct rtr_request const *request)
                error = send_cache_reset_pdu(fd, version);
                goto end;
        case -ENOMEM: /* Memory allocation failure */
+               pr_enomem();
                goto end;
        case EAGAIN: /* Too many threads */
                /*