Extending the format string with the peer info is a bad idea. The reason is DNS^WIPv6 and scoped addresses which add a % to the string returned by log_fmt_peer.
So instead vasprintf() the emsg and then just use logit(). -- :wq Claudio Index: logmsg.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/logmsg.c,v retrieving revision 1.9 diff -u -p -r1.9 logmsg.c --- logmsg.c 24 Aug 2022 17:14:02 -0000 1.9 +++ logmsg.c 13 Oct 2023 16:43:55 -0000 @@ -60,55 +60,54 @@ log_fmt_peer(const struct peer_config *p void log_peer_info(const struct peer_config *peer, const char *emsg, ...) { - char *p, *nfmt; + char *p, *msg; va_list ap; p = log_fmt_peer(peer); - if (asprintf(&nfmt, "%s: %s", p, emsg) == -1) - fatal(NULL); va_start(ap, emsg); - vlog(LOG_INFO, nfmt, ap); + if (vasprintf(&msg, emsg, ap) == -1) + fatal(NULL); va_end(ap); + logit(LOG_INFO, "%s: %s", p, msg); + free(msg); free(p); - free(nfmt); } void log_peer_warn(const struct peer_config *peer, const char *emsg, ...) { - char *p, *nfmt; + char *p, *msg; va_list ap; + int saved_errno = errno; p = log_fmt_peer(peer); if (emsg == NULL) { - if (asprintf(&nfmt, "%s: %s", p, strerror(errno)) == -1) - fatal(NULL); + logit(LOG_ERR, "%s: %s", p, strerror(saved_errno)); } else { - if (asprintf(&nfmt, "%s: %s: %s", p, emsg, strerror(errno)) == - -1) + va_start(ap, emsg); + if (vasprintf(&msg, emsg, ap) == -1) fatal(NULL); + va_end(ap); + logit(LOG_ERR, "%s: %s: %s", p, msg, strerror(saved_errno)); + free(msg); } - va_start(ap, emsg); - vlog(LOG_ERR, nfmt, ap); - va_end(ap); free(p); - free(nfmt); } void log_peer_warnx(const struct peer_config *peer, const char *emsg, ...) { - char *p, *nfmt; + char *p, *msg; va_list ap; p = log_fmt_peer(peer); - if (asprintf(&nfmt, "%s: %s", p, emsg) == -1) - fatal(NULL); va_start(ap, emsg); - vlog(LOG_ERR, nfmt, ap); + if (vasprintf(&msg, emsg, ap) == -1) + fatal(NULL); va_end(ap); + logit(LOG_ERR, "%s: %s", p, msg); + free(msg); free(p); - free(nfmt); } void