diff options
author | Ken Raeburn <raeburn@mit.edu> | 2009-01-14 21:29:10 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2009-01-14 21:29:10 +0000 |
commit | 976e08fab4a7829e9fe1dc5fe8ee7b96862307a6 (patch) | |
tree | 78ed7e1522c773a66042b9fda0ad7ba82a2f6e1e /src/kadmin/server/network.c | |
parent | 17c8e77afa8a513f6ad5b5364a7928d3a9c18b6f (diff) | |
download | krb5-976e08fab4a7829e9fe1dc5fe8ee7b96862307a6.tar.gz krb5-976e08fab4a7829e9fe1dc5fe8ee7b96862307a6.tar.xz krb5-976e08fab4a7829e9fe1dc5fe8ee7b96862307a6.zip |
If recv_from_to is passed a buffer for the local endpoint address,
clobber it before doing anything else, just in case we can't retrieve
the address and the caller blindly uses the buffer anyways.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21747 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kadmin/server/network.c')
-rw-r--r-- | src/kadmin/server/network.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/kadmin/server/network.c b/src/kadmin/server/network.c index 14cfd46ad..8382b7350 100644 --- a/src/kadmin/server/network.c +++ b/src/kadmin/server/network.c @@ -1146,8 +1146,13 @@ recv_from_to(int s, void *buf, size_t len, int flags, struct sockaddr *to, socklen_t *tolen) { #if (!defined(IP_PKTINFO) && !defined(IPV6_PKTINFO)) || !defined(CMSG_SPACE) - if (to && tolen) + if (to && tolen) { + /* Clobber with something recognizeable in case we try to use + the address. */ + memset(to, 0x40, *tolen); *tolen = 0; + } + return recvfrom(s, buf, len, flags, from, fromlen); #else int r; @@ -1159,6 +1164,10 @@ recv_from_to(int s, void *buf, size_t len, int flags, if (!to || !tolen) return recvfrom(s, buf, len, flags, from, fromlen); + /* Clobber with something recognizeable in case we can't extract + the address but try to use it anyways. */ + memset(to, 0x40, *tolen); + iov.iov_base = buf; iov.iov_len = len; memset(&msg, 0, sizeof(msg)); |