summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreyk <reyk@openbsd.org>2014-07-10 00:05:59 +0000
committerreyk <reyk@openbsd.org>2014-07-10 00:05:59 +0000
commitf8ffcebe263cf82c79ec2d7ce6a8ff35ffdbf0c6 (patch)
treea6f42a7fb2647107d04021b9517f17206f078255
parentAdd some extra sanity checks to make sure the test functions actually (diff)
downloadwireguard-openbsd-f8ffcebe263cf82c79ec2d7ce6a8ff35ffdbf0c6.tar.xz
wireguard-openbsd-f8ffcebe263cf82c79ec2d7ce6a8ff35ffdbf0c6.zip
Fix another free error.
ok benno@
-rw-r--r--usr.sbin/relayd/relay_http.c10
-rw-r--r--usr.sbin/relayd/relayd.c4
2 files changed, 8 insertions, 6 deletions
diff --git a/usr.sbin/relayd/relay_http.c b/usr.sbin/relayd/relay_http.c
index 239aaa09dec..facf0f93a07 100644
--- a/usr.sbin/relayd/relay_http.c
+++ b/usr.sbin/relayd/relay_http.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: relay_http.c,v 1.20 2014/07/09 16:42:05 reyk Exp $ */
+/* $OpenBSD: relay_http.c,v 1.21 2014/07/10 00:05:59 reyk Exp $ */
/*
* Copyright (c) 2006 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -1411,6 +1411,9 @@ relay_apply_actions(struct ctl_relay_event *cre, struct kvlist *actions)
char buf[IBUF_READ_SIZE], *ptr;
enum httpheader hdrid;
+ memset(&kvcopy, 0, sizeof(kvcopy));
+ memset(&matchcopy, 0, sizeof(matchcopy));
+
ret = -1;
kp = mp = NULL;
TAILQ_FOREACH(kv, actions, kv_entry) {
@@ -1600,10 +1603,7 @@ relay_apply_actions(struct ctl_relay_event *cre, struct kvlist *actions)
TAILQ_REMOVE(actions, kv, kv_match_entry);
kv_free(&kvcopy);
- if (mp != NULL) {
- kv_free(mp);
- mp = NULL;
- }
+ kv_free(&matchcopy);
}
ret = 0;
diff --git a/usr.sbin/relayd/relayd.c b/usr.sbin/relayd/relayd.c
index e18784c5093..38f29a6276e 100644
--- a/usr.sbin/relayd/relayd.c
+++ b/usr.sbin/relayd/relayd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: relayd.c,v 1.127 2014/07/09 22:10:15 reyk Exp $ */
+/* $OpenBSD: relayd.c,v 1.128 2014/07/10 00:05:59 reyk Exp $ */
/*
* Copyright (c) 2007 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -738,6 +738,8 @@ kv_purge(struct kvlist *keys)
void
kv_free(struct kv *kv)
{
+ if (kv->kv_type == KEY_TYPE_NONE)
+ return;
if (kv->kv_key != NULL) {
free(kv->kv_key);
}