]> git.proxmox.com Git - mirror_frr.git/blobdiff - ldpd/log.c
zebra: use ifindex vs ifp to avoid use-after-free on shutdown
[mirror_frr.git] / ldpd / log.c
index 408aaeb6998930480b81f6e5d10fd65de3af3e93..a9898a64f09f9bfe17aaecfece2edf6efb72f1ab 100644 (file)
@@ -1,19 +1,8 @@
+// SPDX-License-Identifier: ISC
 /*     $OpenBSD$ */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
 #include <zebra.h>
@@ -22,9 +11,9 @@
 #include "ldpe.h"
 #include "lde.h"
 #include "log.h"
+#include "printfrr.h"
 
 #include <lib/log.h>
-#include <lib/log_int.h>
 
 const char     *log_procname;
 
@@ -45,12 +34,14 @@ vlog(int pri, const char *fmt, va_list ap)
 
        switch (ldpd_process) {
        case PROC_LDE_ENGINE:
-               vsnprintf(buf, sizeof(buf), fmt, ap);
-               lde_imsg_compose_parent(IMSG_LOG, pri, buf, strlen(buf) + 1);
+               vsnprintfrr(buf, sizeof(buf), fmt, ap);
+               lde_imsg_compose_parent_sync(IMSG_LOG, pri, buf,
+                   strlen(buf) + 1);
                break;
        case PROC_LDP_ENGINE:
-               vsnprintf(buf, sizeof(buf), fmt, ap);
-               ldpe_imsg_compose_parent(IMSG_LOG, pri, buf, strlen(buf) + 1);
+               vsnprintfrr(buf, sizeof(buf), fmt, ap);
+               ldpe_imsg_compose_parent_sync(IMSG_LOG, pri, buf,
+                   strlen(buf) + 1);
                break;
        case PROC_MAIN:
                vzlog(pri, fmt, ap);
@@ -66,16 +57,20 @@ log_warn(const char *emsg, ...)
 
        /* best effort to even work in out of memory situations */
        if (emsg == NULL)
-               logit(LOG_CRIT, "%s", strerror(errno));
+               logit(LOG_ERR, "%s", strerror(errno));
        else {
                va_start(ap, emsg);
 
                if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
                        /* we tried it... */
-                       vlog(LOG_CRIT, emsg, ap);
-                       logit(LOG_CRIT, "%s", strerror(errno));
+                       vlog(LOG_ERR, emsg, ap);
+                       logit(LOG_ERR, "%s", strerror(errno));
                } else {
-                       vlog(LOG_CRIT, nfmt, ap);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+                       /* format extended above */
+                       vlog(LOG_ERR, nfmt, ap);
+#pragma GCC diagnostic pop
                        free(nfmt);
                }
                va_end(ap);
@@ -88,7 +83,7 @@ log_warnx(const char *emsg, ...)
        va_list  ap;
 
        va_start(ap, emsg);
-       vlog(LOG_CRIT, emsg, ap);
+       vlog(LOG_ERR, emsg, ap);
        va_end(ap);
 }