diff options
author | 2002-07-13 08:53:02 +0000 | |
---|---|---|
committer | 2002-07-13 08:53:02 +0000 | |
commit | 0458d4f675e66ad3253dc3d4439aac809d17cd70 (patch) | |
tree | b93123f91167d42128e76018a4032b03e04f3ca3 | |
parent | do not call unlock when the lock is not locked; found by millert@ (diff) | |
download | wireguard-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.c | 11 |
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); |