summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorclaudio <claudio@openbsd.org>2007-09-16 15:20:50 +0000
committerclaudio <claudio@openbsd.org>2007-09-16 15:20:50 +0000
commit0ea7d09f77eb83fe8687a3a8d844528028fc7235 (patch)
tree3cdd0a39361e33aead469d5c5db9e0b566a12091
parentremove some totally useless comments (diff)
downloadwireguard-openbsd-0ea7d09f77eb83fe8687a3a8d844528028fc7235.tar.xz
wireguard-openbsd-0ea7d09f77eb83fe8687a3a8d844528028fc7235.zip
log_fmt_peer() does not use a static buffer so it is necessary to free the
string that it returned later. rde_update_log() did not do that. Memory leak found and diff provided by Mike Belopuhov.
-rw-r--r--usr.sbin/bgpd/rde.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c
index 6c46102eecd..5f1ed2fb42a 100644
--- a/usr.sbin/bgpd/rde.c
+++ b/usr.sbin/bgpd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.227 2007/06/19 09:44:55 pyr Exp $ */
+/* $OpenBSD: rde.c,v 1.228 2007/09/16 15:20:50 claudio Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -1542,6 +1542,7 @@ rde_update_log(const char *message,
const struct rde_peer *peer, const struct bgpd_addr *next,
const struct bgpd_addr *prefix, u_int8_t prefixlen)
{
+ char *l = NULL;
char *n = NULL;
char *p = NULL;
@@ -1553,10 +1554,12 @@ rde_update_log(const char *message,
n = NULL;
if (asprintf(&p, "%s/%u", log_addr(prefix), prefixlen) == -1)
p = NULL;
+ l = log_fmt_peer(&peer->conf);
log_info("%s AS%s: %s %s%s",
- log_fmt_peer(&peer->conf), log_as(peer->conf.remote_as), message,
+ l, log_as(peer->conf.remote_as), message,
p ? p : "out of memory", n ? n : "");
+ free(l);
free(n);
free(p);
}