summaryrefslogtreecommitdiffstats
path: root/src/kadmin/server/network.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2009-01-14 21:29:10 +0000
committerKen Raeburn <raeburn@mit.edu>2009-01-14 21:29:10 +0000
commit976e08fab4a7829e9fe1dc5fe8ee7b96862307a6 (patch)
tree78ed7e1522c773a66042b9fda0ad7ba82a2f6e1e /src/kadmin/server/network.c
parent17c8e77afa8a513f6ad5b5364a7928d3a9c18b6f (diff)
downloadkrb5-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.c11
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));