summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorprovos <provos@openbsd.org>2002-07-13 08:53:02 +0000
committerprovos <provos@openbsd.org>2002-07-13 08:53:02 +0000
commit0458d4f675e66ad3253dc3d4439aac809d17cd70 (patch)
treeb93123f91167d42128e76018a4032b03e04f3ca3
parentdo not call unlock when the lock is not locked; found by millert@ (diff)
downloadwireguard-openbsd-0458d4f675e66ad3253dc3d4439aac809d17cd70.tar.xz
wireguard-openbsd-0458d4f675e66ad3253dc3d4439aac809d17cd70.zip
use correct length for PF_LOCAL sockets; not all applications fill in
sa_len
-rw-r--r--bin/systrace/intercept-translate.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/bin/systrace/intercept-translate.c b/bin/systrace/intercept-translate.c
index d582ab3bfa0..8409ddd8f3b 100644
--- a/bin/systrace/intercept-translate.c
+++ b/bin/systrace/intercept-translate.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: intercept-translate.c,v 1.4 2002/06/21 15:26:06 provos Exp $ */
+/* $OpenBSD: intercept-translate.c,v 1.5 2002/07/13 08:53:02 provos Exp $ */
/*
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
* All rights reserved.
@@ -206,6 +206,10 @@ ic_get_sockaddr(struct intercept_translate *trans, int fd, pid_t pid,
return (0);
}
+#ifndef offsetof
+#define offsetof(s, e) ((size_t)&((s *)0)->e)
+#endif
+
int
ic_print_sockaddr(char *buf, size_t buflen, struct intercept_translate *tl)
{
@@ -218,8 +222,9 @@ ic_print_sockaddr(char *buf, size_t buflen, struct intercept_translate *tl)
switch (sa->sa_family) {
case PF_LOCAL:
- if (sa->sa_len < len)
- len = sa->sa_len;
+ if (len <= offsetof(struct sockaddr, sa_data))
+ return (-1);
+ len -= offsetof(struct sockaddr, sa_data);
if (buflen < len + 1)
len = buflen - 1;
memcpy(buf, sa->sa_data, len);