OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/posix/unix_domain_socket_linux.h" | 5 #include "base/posix/unix_domain_socket_linux.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <sys/socket.h> | 8 #include <sys/socket.h> |
9 #include <unistd.h> | 9 #include <unistd.h> |
10 | 10 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 int* wire_fds = NULL; | 129 int* wire_fds = NULL; |
130 unsigned wire_fds_len = 0; | 130 unsigned wire_fds_len = 0; |
131 base::ProcessId pid = -1; | 131 base::ProcessId pid = -1; |
132 | 132 |
133 if (msg.msg_controllen > 0) { | 133 if (msg.msg_controllen > 0) { |
134 struct cmsghdr* cmsg; | 134 struct cmsghdr* cmsg; |
135 for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) { | 135 for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) { |
136 const unsigned payload_len = cmsg->cmsg_len - CMSG_LEN(0); | 136 const unsigned payload_len = cmsg->cmsg_len - CMSG_LEN(0); |
137 if (cmsg->cmsg_level == SOL_SOCKET && | 137 if (cmsg->cmsg_level == SOL_SOCKET && |
138 cmsg->cmsg_type == SCM_RIGHTS) { | 138 cmsg->cmsg_type == SCM_RIGHTS) { |
139 DCHECK(payload_len % sizeof(int) == 0); | 139 DCHECK_EQ(payload_len % sizeof(int), 0u); |
140 DCHECK(wire_fds == NULL); | 140 DCHECK_EQ(wire_fds, static_cast<void*>(nullptr)); |
141 wire_fds = reinterpret_cast<int*>(CMSG_DATA(cmsg)); | 141 wire_fds = reinterpret_cast<int*>(CMSG_DATA(cmsg)); |
142 wire_fds_len = payload_len / sizeof(int); | 142 wire_fds_len = payload_len / sizeof(int); |
143 } | 143 } |
144 #if !defined(OS_NACL_NONSFI) | 144 #if !defined(OS_NACL_NONSFI) |
145 // The PNaCl toolchain for Non-SFI binary build does not support | 145 // The PNaCl toolchain for Non-SFI binary build does not support |
146 // SCM_CREDENTIALS. | 146 // SCM_CREDENTIALS. |
147 if (cmsg->cmsg_level == SOL_SOCKET && | 147 if (cmsg->cmsg_level == SOL_SOCKET && |
148 cmsg->cmsg_type == SCM_CREDENTIALS) { | 148 cmsg->cmsg_type == SCM_CREDENTIALS) { |
149 DCHECK(payload_len == sizeof(struct ucred)); | 149 DCHECK_EQ(payload_len, sizeof(struct ucred)); |
150 DCHECK(pid == -1); | 150 DCHECK_EQ(pid, -1); |
151 pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid; | 151 pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid; |
152 } | 152 } |
153 #endif | 153 #endif |
154 } | 154 } |
155 } | 155 } |
156 | 156 |
157 if (msg.msg_flags & MSG_TRUNC || msg.msg_flags & MSG_CTRUNC) { | 157 if (msg.msg_flags & MSG_TRUNC || msg.msg_flags & MSG_CTRUNC) { |
158 for (unsigned i = 0; i < wire_fds_len; ++i) | 158 for (unsigned i = 0; i < wire_fds_len; ++i) |
159 close(wire_fds[i]); | 159 close(wire_fds[i]); |
160 errno = EMSGSIZE; | 160 errno = EMSGSIZE; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 NOTREACHED(); | 232 NOTREACHED(); |
233 return -1; | 233 return -1; |
234 } | 234 } |
235 | 235 |
236 if (result_fd) | 236 if (result_fd) |
237 *result_fd = recv_fds.empty() ? -1 : recv_fds[0]->release(); | 237 *result_fd = recv_fds.empty() ? -1 : recv_fds[0]->release(); |
238 | 238 |
239 return reply_len; | 239 return reply_len; |
240 } | 240 } |
241 #endif // !defined(OS_NACL_NONSFI) | 241 #endif // !defined(OS_NACL_NONSFI) |
OLD | NEW |