Skip to content

Commit 06da9ff

Browse files
committed
Do not take a pointer to packed struct member
This is an error with clang, so avoid it.
1 parent 6779d90 commit 06da9ff

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

src/ipc.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,12 @@ static int ipc_connect(int sockfd, struct ipc_msg *msg)
161161
pid_t pid = msg->pid;
162162
int rc = -1;
163163

164-
rc = _connect(pid, payload->sockfd, &payload->addr, payload->addrlen);
164+
struct sockaddr addr;
165+
166+
addr.sa_family = payload->addr.sa_family;
167+
memcpy(addr.sa_data, payload->addr.sa_data, sizeof(addr.sa_data));
168+
169+
rc = _connect(pid, payload->sockfd, &addr, payload->addrlen);
165170

166171
return ipc_write_rc(sockfd, pid, IPC_CONNECT, rc);
167172
}
@@ -272,9 +277,11 @@ static int ipc_getsockopt(int sockfd, struct ipc_msg *msg)
272277
pid_t pid = msg->pid;
273278
int rc = -1;
274279

275-
rc = _getsockopt(pid, opts->fd, opts->level, opts->optname, opts->optval, &opts->optlen);
280+
socklen_t optlen;
276281

277-
int resplen = sizeof(struct ipc_msg) + sizeof(struct ipc_err) + sizeof(struct ipc_sockopt) + opts->optlen;
282+
rc = _getsockopt(pid, opts->fd, opts->level, opts->optname, opts->optval, &optlen);
283+
284+
int resplen = sizeof(struct ipc_msg) + sizeof(struct ipc_err) + sizeof(struct ipc_sockopt) + optlen;
278285
struct ipc_msg *response = alloca(resplen);
279286

280287
if (response == NULL) {
@@ -302,8 +309,8 @@ static int ipc_getsockopt(int sockfd, struct ipc_msg *msg)
302309
optres->fd = opts->fd;
303310
optres->level = opts->level;
304311
optres->optname = opts->optname;
305-
optres->optlen = opts->optlen;
306-
memcpy(&optres->optval, opts->optval, opts->optlen);
312+
optres->optlen = optlen;
313+
memcpy(&optres->optval, opts->optval, optlen);
307314

308315
if (ipc_try_send(sockfd, (char *)response, resplen) == -1) {
309316
perror("Error on writing IPC getsockopt response");
@@ -497,6 +504,8 @@ static int ipc_recvmsg(int sockfd, struct ipc_msg *msg)
497504
error->rc = rc < 0 ? -1 : rc;
498505
error->err = rc < 0 ? -rc : 0;
499506

507+
printf("IPC recvmsg sending %d bytes\n", resplen);
508+
500509
if (ipc_try_send(sockfd, (char *)response, resplen) == -1) {
501510
perror("Error on writing IPC recvmsg response");
502511
}

0 commit comments

Comments
 (0)