Fixed uninitialized memory warning before write()

This commit is contained in:
Joseph Henry
2017-09-17 23:26:38 -07:00
parent ed51f41b47
commit 5ec6f1846b
2 changed files with 11 additions and 11 deletions

View File

@@ -850,6 +850,7 @@ namespace ZeroTier
#endif #endif
char udp_payload_buf[ZT_SOCKET_MSG_BUF_SZ]; char udp_payload_buf[ZT_SOCKET_MSG_BUF_SZ];
memset(udp_payload_buf, 0, sizeof(ZT_SOCKET_MSG_BUF_SZ));
char *msg_ptr = udp_payload_buf; char *msg_ptr = udp_payload_buf;
int tot_len = 0; int tot_len = 0;
while(p != NULL) { while(p != NULL) {
@@ -861,21 +862,23 @@ namespace ZeroTier
tot_len += p->len; tot_len += p->len;
p = p->next; p = p->next;
} }
if (tot_len) { if (tot_len > 0) {
int w = 0; int w = 0;
//DEBUG_INFO("tot_len=%d", tot_len); // [sz : addr : payload]
char udp_msg_buf[ZT_SOCKET_MSG_BUF_SZ]; // [sz : addr : payload] char udp_msg_buf[ZT_SOCKET_MSG_BUF_SZ];
memset(udp_msg_buf, 0, sizeof(ZT_SOCKET_MSG_BUF_SZ));
int32_t len = sizeof(struct sockaddr_storage) + tot_len; int32_t len = sizeof(struct sockaddr_storage) + tot_len;
int32_t msg_tot_len = sizeof(int32_t) + len; int32_t msg_tot_len = sizeof(int32_t) + len;
memcpy(udp_msg_buf, &len, sizeof(int32_t)); // len: sockaddr+payload // len: sockaddr+payload
memcpy(udp_msg_buf + sizeof(int32_t), &ss, sizeof(struct sockaddr_storage)); // sockaddr memcpy(udp_msg_buf, &len, sizeof(int32_t));
memcpy(udp_msg_buf + sizeof(int32_t) + sizeof(struct sockaddr_storage), &udp_payload_buf, tot_len); // payload // sockaddr
memcpy(udp_msg_buf + sizeof(int32_t), &ss, sizeof(struct sockaddr_storage));
// payload
memcpy(udp_msg_buf + sizeof(int32_t) + sizeof(struct sockaddr_storage), &udp_payload_buf, tot_len);
if ((w = write(vs->sdk_fd, udp_msg_buf, msg_tot_len)) < 0) { if ((w = write(vs->sdk_fd, udp_msg_buf, msg_tot_len)) < 0) {
perror("write"); perror("write");
DEBUG_ERROR("write(fd=%d)=%d, errno=%d", vs->sdk_fd, w, errno); DEBUG_ERROR("write(fd=%d)=%d, errno=%d", vs->sdk_fd, w, errno);
} }
//vs->tap->phyOnUnixWritable(vs->sock, NULL, true);
//vs->tap->_phy.setNotifyWritable(vs->sock, true);
} }
pbuf_free(q); pbuf_free(q);
} }

View File

@@ -716,11 +716,8 @@ namespace ZeroTier {
// get frame len // get frame len
memcpy(&len, tap->pico_frame_rxbuf, sizeof(int32_t)); memcpy(&len, tap->pico_frame_rxbuf, sizeof(int32_t));
if (len > sizeof(int32_t)) { // meaning, since we package the len in the msg, we don't want to recv a 0-(sizeof(int32_t)) sized frame if (len > sizeof(int32_t)) { // meaning, since we package the len in the msg, we don't want to recv a 0-(sizeof(int32_t)) sized frame
DEBUG_ERROR("tap->pico_frame_rxbuf + sizeof(int32_t)=%p, len=%d", tap->pico_frame_rxbuf + sizeof(int32_t), len-(sizeof(int32_t)));
memcpy(frame, tap->pico_frame_rxbuf + sizeof(int32_t), len-(sizeof(int32_t)) ); // get frame data memcpy(frame, tap->pico_frame_rxbuf + sizeof(int32_t), len-(sizeof(int32_t)) ); // get frame data
DEBUG_ERROR("tap->pico_frame_rxbuf=%p, tap->pico_frame_rxbuf + len=%p, MAX_PICO_FRAME_RX_BUF_SZ-len=%d", tap->pico_frame_rxbuf, tap->pico_frame_rxbuf + len, MAX_PICO_FRAME_RX_BUF_SZ-len);
memmove(tap->pico_frame_rxbuf, tap->pico_frame_rxbuf + len, MAX_PICO_FRAME_RX_BUF_SZ-len); // shift buffer memmove(tap->pico_frame_rxbuf, tap->pico_frame_rxbuf + len, MAX_PICO_FRAME_RX_BUF_SZ-len); // shift buffer
DEBUG_ERROR("dev=%p, frame=%p, len=%d", dev, frame, (len-sizeof(int32_t)));
if ((err = pico_stack_recv(dev, (uint8_t*)frame, (len-sizeof(int32_t)))) < 0) { if ((err = pico_stack_recv(dev, (uint8_t*)frame, (len-sizeof(int32_t)))) < 0) {
if (picostack) { if (picostack) {
DEBUG_ERROR("pico_stack_recv(), err=%d, pico_err=%d, %s", err, pico_err, picostack->beautify_pico_error(pico_err)); DEBUG_ERROR("pico_stack_recv(), err=%d, pico_err=%d, %s", err, pico_err, picostack->beautify_pico_error(pico_err));