return EINVAL;
}
- for (i = 0; i < num_fds; i++) {
- fds_copy[i] = -1;
- }
-
- for (i = 0; i < num_fds; i++) {
- fds_copy[i] = dup(fds[i]);
- if (fds_copy[i] == -1) {
- ret = errno;
- goto fail;
- }
- }
+ msglen = sizeof(struct unix_dgram_msg);
data_len = iov_buflen(iov, iovlen);
if (data_len == -1) {
- goto invalid;
+ return EINVAL;
}
- msglen = sizeof(struct unix_dgram_msg);
-
tmp = msglen + data_len;
if ((tmp < msglen) || (tmp < data_len)) {
/* overflow */
- goto invalid;
+ return EINVAL;
}
msglen = tmp;
tmp = msglen + fds_align;
if ((tmp < msglen) || (tmp < fds_align)) {
/* overflow */
- goto invalid;
+ return EINVAL;
}
tmp &= ~fds_align;
tmp = msglen + fds_size;
if ((tmp < msglen) || (tmp < fds_size)) {
/* overflow */
- goto invalid;
+ return EINVAL;
}
msglen = tmp;
}
+ for (i = 0; i < num_fds; i++) {
+ fds_copy[i] = -1;
+ }
+
+ for (i = 0; i < num_fds; i++) {
+ fds_copy[i] = dup(fds[i]);
+ if (fds_copy[i] == -1) {
+ ret = errno;
+ goto fail;
+ }
+ }
+
msg = malloc(msglen);
if (msg == NULL) {
ret = ENOMEM;
DLIST_ADD_END(q->msgs, msg, struct unix_dgram_msg);
return 0;
-invalid:
- ret = EINVAL;
fail:
close_fd_array(fds_copy, num_fds);
return ret;