diff options
Diffstat (limited to 'monitor_fdpass.c')
-rw-r--r-- | monitor_fdpass.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/monitor_fdpass.c b/monitor_fdpass.c index fb00ab7ab..a3e995df8 100644 --- a/monitor_fdpass.c +++ b/monitor_fdpass.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: monitor_fdpass.c,v 1.14 2008/03/02 18:19:35 deraadt Exp $ */ | 1 | /* $OpenBSD: monitor_fdpass.c,v 1.15 2008/03/13 01:49:53 deraadt Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright 2001 Niels Provos <provos@citi.umich.edu> | 3 | * Copyright 2001 Niels Provos <provos@citi.umich.edu> |
4 | * All rights reserved. | 4 | * All rights reserved. |
@@ -52,7 +52,8 @@ mm_send_fd(int sock, int fd) | |||
52 | union { | 52 | union { |
53 | struct cmsghdr hdr; | 53 | struct cmsghdr hdr; |
54 | char tmp[CMSG_SPACE(sizeof(int))]; | 54 | char tmp[CMSG_SPACE(sizeof(int))]; |
55 | } tmp; | 55 | char buf[CMSG_SPACE(sizeof(int))]; |
56 | } cmsgbuf; | ||
56 | struct cmsghdr *cmsg; | 57 | struct cmsghdr *cmsg; |
57 | #endif | 58 | #endif |
58 | 59 | ||
@@ -61,8 +62,8 @@ mm_send_fd(int sock, int fd) | |||
61 | msg.msg_accrights = (caddr_t)&fd; | 62 | msg.msg_accrights = (caddr_t)&fd; |
62 | msg.msg_accrightslen = sizeof(fd); | 63 | msg.msg_accrightslen = sizeof(fd); |
63 | #else | 64 | #else |
64 | msg.msg_control = (caddr_t)&tmp; | 65 | msg.msg_control = (caddr_t)&cmsgbuf.buf; |
65 | msg.msg_controllen = CMSG_LEN(sizeof(int)); | 66 | msg.msg_controllen = sizeof(cmsgbuf.buf); |
66 | cmsg = CMSG_FIRSTHDR(&msg); | 67 | cmsg = CMSG_FIRSTHDR(&msg); |
67 | cmsg->cmsg_len = CMSG_LEN(sizeof(int)); | 68 | cmsg->cmsg_len = CMSG_LEN(sizeof(int)); |
68 | cmsg->cmsg_level = SOL_SOCKET; | 69 | cmsg->cmsg_level = SOL_SOCKET; |
@@ -104,9 +105,9 @@ mm_receive_fd(int sock) | |||
104 | int fd; | 105 | int fd; |
105 | #ifndef HAVE_ACCRIGHTS_IN_MSGHDR | 106 | #ifndef HAVE_ACCRIGHTS_IN_MSGHDR |
106 | union { | 107 | union { |
107 | char tmp[CMSG_SPACE(sizeof(int))]; | ||
108 | struct cmsghdr hdr; | 108 | struct cmsghdr hdr; |
109 | } tmp; | 109 | char buf[CMSG_SPACE(sizeof(int))]; |
110 | } cmsgbuf; | ||
110 | struct cmsghdr *cmsg; | 111 | struct cmsghdr *cmsg; |
111 | #endif | 112 | #endif |
112 | 113 | ||
@@ -119,8 +120,8 @@ mm_receive_fd(int sock) | |||
119 | msg.msg_accrights = (caddr_t)&fd; | 120 | msg.msg_accrights = (caddr_t)&fd; |
120 | msg.msg_accrightslen = sizeof(fd); | 121 | msg.msg_accrightslen = sizeof(fd); |
121 | #else | 122 | #else |
122 | msg.msg_control = &tmp; | 123 | msg.msg_control = &cmsgbuf.buf; |
123 | msg.msg_controllen = sizeof(tmp); | 124 | msg.msg_controllen = sizeof(cmsgbuf.buf); |
124 | #endif | 125 | #endif |
125 | 126 | ||
126 | if ((n = recvmsg(sock, &msg, 0)) == -1) { | 127 | if ((n = recvmsg(sock, &msg, 0)) == -1) { |