aboutsummaryrefslogtreecommitdiff
path: root/src/dns
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-07-08 17:20:23 +0000
committerChristian Grothoff <christian@grothoff.org>2016-07-08 17:20:23 +0000
commitd8c53b12a818ff7cf82d06a1a69c395bdef85ee6 (patch)
tree0ebb0db416c157fcfde51a941185819dd12d51fd /src/dns
parent5184c17d32a39c928c2a0fec3ee1ad098bbaa562 (diff)
downloadgnunet-d8c53b12a818ff7cf82d06a1a69c395bdef85ee6.tar.gz
gnunet-d8c53b12a818ff7cf82d06a1a69c395bdef85ee6.zip
-avoid calling memcpy() with NULL argument, even if len is 0
Diffstat (limited to 'src/dns')
-rw-r--r--src/dns/dns_api.c2
-rw-r--r--src/dns/dnsparser.c38
-rw-r--r--src/dns/dnsstub.c4
-rw-r--r--src/dns/gnunet-service-dns.c18
4 files changed, 31 insertions, 31 deletions
diff --git a/src/dns/dns_api.c b/src/dns/dns_api.c
index 1d212e5d1..08d5df4a1 100644
--- a/src/dns/dns_api.c
+++ b/src/dns/dns_api.c
@@ -328,7 +328,7 @@ GNUNET_DNS_request_answer (struct GNUNET_DNS_RequestHandle *rh,
328 GNUNET_MESSAGE_TYPE_DNS_CLIENT_RESPONSE); 328 GNUNET_MESSAGE_TYPE_DNS_CLIENT_RESPONSE);
329 resp->drop_flag = htonl (2); 329 resp->drop_flag = htonl (2);
330 resp->request_id = rh->request_id; 330 resp->request_id = rh->request_id;
331 memcpy (&resp[1], 331 GNUNET_memcpy (&resp[1],
332 reply, 332 reply,
333 reply_length); 333 reply_length);
334 GNUNET_MQ_send (rh->dh->mq, 334 GNUNET_MQ_send (rh->dh->mq,
diff --git a/src/dns/dnsparser.c b/src/dns/dnsparser.c
index 5041d29a8..36b4c36f1 100644
--- a/src/dns/dnsparser.c
+++ b/src/dns/dnsparser.c
@@ -385,7 +385,7 @@ GNUNET_DNSPARSER_parse_query (const char *udp_payload,
385 GNUNET_break_op (0); 385 GNUNET_break_op (0);
386 return GNUNET_SYSERR; 386 return GNUNET_SYSERR;
387 } 387 }
388 memcpy (&ql, &udp_payload[*off], sizeof (ql)); 388 GNUNET_memcpy (&ql, &udp_payload[*off], sizeof (ql));
389 *off += sizeof (ql); 389 *off += sizeof (ql);
390 q->type = ntohs (ql.type); 390 q->type = ntohs (ql.type);
391 q->dns_traffic_class = ntohs (ql.dns_traffic_class); 391 q->dns_traffic_class = ntohs (ql.dns_traffic_class);
@@ -428,7 +428,7 @@ GNUNET_DNSPARSER_parse_soa (const char *udp_payload,
428 *off = old_off; 428 *off = old_off;
429 return NULL; 429 return NULL;
430 } 430 }
431 memcpy (&soa_bin, 431 GNUNET_memcpy (&soa_bin,
432 &udp_payload[*off], 432 &udp_payload[*off],
433 sizeof (struct GNUNET_TUN_DnsSoaRecord)); 433 sizeof (struct GNUNET_TUN_DnsSoaRecord));
434 soa->serial = ntohl (soa_bin.serial); 434 soa->serial = ntohl (soa_bin.serial);
@@ -465,7 +465,7 @@ GNUNET_DNSPARSER_parse_mx (const char *udp_payload,
465 GNUNET_break_op (0); 465 GNUNET_break_op (0);
466 return NULL; 466 return NULL;
467 } 467 }
468 memcpy (&mxpref, &udp_payload[*off], sizeof (uint16_t)); 468 GNUNET_memcpy (&mxpref, &udp_payload[*off], sizeof (uint16_t));
469 (*off) += sizeof (uint16_t); 469 (*off) += sizeof (uint16_t);
470 mx = GNUNET_new (struct GNUNET_DNSPARSER_MxRecord); 470 mx = GNUNET_new (struct GNUNET_DNSPARSER_MxRecord);
471 mx->preference = ntohs (mxpref); 471 mx->preference = ntohs (mxpref);
@@ -504,7 +504,7 @@ GNUNET_DNSPARSER_parse_srv (const char *udp_payload,
504 old_off = *off; 504 old_off = *off;
505 if (*off + sizeof (struct GNUNET_TUN_DnsSrvRecord) > udp_payload_length) 505 if (*off + sizeof (struct GNUNET_TUN_DnsSrvRecord) > udp_payload_length)
506 return NULL; 506 return NULL;
507 memcpy (&srv_bin, 507 GNUNET_memcpy (&srv_bin,
508 &udp_payload[*off], 508 &udp_payload[*off],
509 sizeof (struct GNUNET_TUN_DnsSrvRecord)); 509 sizeof (struct GNUNET_TUN_DnsSrvRecord));
510 (*off) += sizeof (struct GNUNET_TUN_DnsSrvRecord); 510 (*off) += sizeof (struct GNUNET_TUN_DnsSrvRecord);
@@ -547,7 +547,7 @@ GNUNET_DNSPARSER_parse_cert (const char *udp_payload,
547 GNUNET_break_op (0); 547 GNUNET_break_op (0);
548 return NULL; 548 return NULL;
549 } 549 }
550 memcpy (&dcert, &udp_payload[*off], sizeof (struct GNUNET_TUN_DnsCertRecord)); 550 GNUNET_memcpy (&dcert, &udp_payload[*off], sizeof (struct GNUNET_TUN_DnsCertRecord));
551 (*off) += sizeof (struct GNUNET_TUN_DnsCertRecord); 551 (*off) += sizeof (struct GNUNET_TUN_DnsCertRecord);
552 cert = GNUNET_new (struct GNUNET_DNSPARSER_CertRecord); 552 cert = GNUNET_new (struct GNUNET_DNSPARSER_CertRecord);
553 cert->cert_type = ntohs (dcert.cert_type); 553 cert->cert_type = ntohs (dcert.cert_type);
@@ -555,7 +555,7 @@ GNUNET_DNSPARSER_parse_cert (const char *udp_payload,
555 cert->algorithm = dcert.algorithm; 555 cert->algorithm = dcert.algorithm;
556 cert->certificate_size = udp_payload_length - (*off); 556 cert->certificate_size = udp_payload_length - (*off);
557 cert->certificate_data = GNUNET_malloc (cert->certificate_size); 557 cert->certificate_data = GNUNET_malloc (cert->certificate_size);
558 memcpy (cert->certificate_data, 558 GNUNET_memcpy (cert->certificate_data,
559 &udp_payload[*off], 559 &udp_payload[*off],
560 cert->certificate_size); 560 cert->certificate_size);
561 (*off) += cert->certificate_size; 561 (*off) += cert->certificate_size;
@@ -598,7 +598,7 @@ GNUNET_DNSPARSER_parse_record (const char *udp_payload,
598 GNUNET_break_op (0); 598 GNUNET_break_op (0);
599 return GNUNET_SYSERR; 599 return GNUNET_SYSERR;
600 } 600 }
601 memcpy (&rl, &udp_payload[*off], sizeof (rl)); 601 GNUNET_memcpy (&rl, &udp_payload[*off], sizeof (rl));
602 (*off) += sizeof (rl); 602 (*off) += sizeof (rl);
603 r->type = ntohs (rl.type); 603 r->type = ntohs (rl.type);
604 r->dns_traffic_class = ntohs (rl.dns_traffic_class); 604 r->dns_traffic_class = ntohs (rl.dns_traffic_class);
@@ -659,7 +659,7 @@ GNUNET_DNSPARSER_parse_record (const char *udp_payload,
659 default: 659 default:
660 r->data.raw.data = GNUNET_malloc (data_len); 660 r->data.raw.data = GNUNET_malloc (data_len);
661 r->data.raw.data_len = data_len; 661 r->data.raw.data_len = data_len;
662 memcpy (r->data.raw.data, &udp_payload[*off], data_len); 662 GNUNET_memcpy (r->data.raw.data, &udp_payload[*off], data_len);
663 break; 663 break;
664 } 664 }
665 (*off) += data_len; 665 (*off) += data_len;
@@ -838,7 +838,7 @@ GNUNET_DNSPARSER_builder_add_name (char *dst,
838 goto fail; /* segment too long or empty */ 838 goto fail; /* segment too long or empty */
839 } 839 }
840 dst[pos++] = (char) (uint8_t) len; 840 dst[pos++] = (char) (uint8_t) len;
841 memcpy (&dst[pos], idna_name, len); 841 GNUNET_memcpy (&dst[pos], idna_name, len);
842 pos += len; 842 pos += len;
843 idna_name += len + 1; /* also skip dot */ 843 idna_name += len + 1; /* also skip dot */
844 } 844 }
@@ -887,7 +887,7 @@ GNUNET_DNSPARSER_builder_add_query (char *dst,
887 return ret; 887 return ret;
888 ql.type = htons (query->type); 888 ql.type = htons (query->type);
889 ql.dns_traffic_class = htons (query->dns_traffic_class); 889 ql.dns_traffic_class = htons (query->dns_traffic_class);
890 memcpy (&dst[*off], &ql, sizeof (ql)); 890 GNUNET_memcpy (&dst[*off], &ql, sizeof (ql));
891 (*off) += sizeof (ql); 891 (*off) += sizeof (ql);
892 return GNUNET_OK; 892 return GNUNET_OK;
893} 893}
@@ -916,7 +916,7 @@ GNUNET_DNSPARSER_builder_add_mx (char *dst,
916 if (*off + sizeof (uint16_t) > dst_len) 916 if (*off + sizeof (uint16_t) > dst_len)
917 return GNUNET_NO; 917 return GNUNET_NO;
918 mxpref = htons (mx->preference); 918 mxpref = htons (mx->preference);
919 memcpy (&dst[*off], &mxpref, sizeof (mxpref)); 919 GNUNET_memcpy (&dst[*off], &mxpref, sizeof (mxpref));
920 (*off) += sizeof (mxpref); 920 (*off) += sizeof (mxpref);
921 return GNUNET_DNSPARSER_builder_add_name (dst, dst_len, off, mx->mxhost); 921 return GNUNET_DNSPARSER_builder_add_name (dst, dst_len, off, mx->mxhost);
922} 922}
@@ -954,9 +954,9 @@ GNUNET_DNSPARSER_builder_add_cert (char *dst,
954 dcert.cert_type = htons ((uint16_t) cert->cert_type); 954 dcert.cert_type = htons ((uint16_t) cert->cert_type);
955 dcert.cert_tag = htons ((uint16_t) cert->cert_tag); 955 dcert.cert_tag = htons ((uint16_t) cert->cert_tag);
956 dcert.algorithm = (uint8_t) cert->algorithm; 956 dcert.algorithm = (uint8_t) cert->algorithm;
957 memcpy (&dst[*off], &dcert, sizeof (dcert)); 957 GNUNET_memcpy (&dst[*off], &dcert, sizeof (dcert));
958 (*off) += sizeof (dcert); 958 (*off) += sizeof (dcert);
959 memcpy (&dst[*off], cert->certificate_data, cert->certificate_size); 959 GNUNET_memcpy (&dst[*off], cert->certificate_data, cert->certificate_size);
960 (*off) += cert->certificate_size; 960 (*off) += cert->certificate_size;
961 return GNUNET_OK; 961 return GNUNET_OK;
962} 962}
@@ -999,7 +999,7 @@ GNUNET_DNSPARSER_builder_add_soa (char *dst,
999 sd.retry = htonl (soa->retry); 999 sd.retry = htonl (soa->retry);
1000 sd.expire = htonl (soa->expire); 1000 sd.expire = htonl (soa->expire);
1001 sd.minimum = htonl (soa->minimum_ttl); 1001 sd.minimum = htonl (soa->minimum_ttl);
1002 memcpy (&dst[*off], &sd, sizeof (sd)); 1002 GNUNET_memcpy (&dst[*off], &sd, sizeof (sd));
1003 (*off) += sizeof (sd); 1003 (*off) += sizeof (sd);
1004 return GNUNET_OK; 1004 return GNUNET_OK;
1005} 1005}
@@ -1031,7 +1031,7 @@ GNUNET_DNSPARSER_builder_add_srv (char *dst,
1031 sd.prio = htons (srv->priority); 1031 sd.prio = htons (srv->priority);
1032 sd.weight = htons (srv->weight); 1032 sd.weight = htons (srv->weight);
1033 sd.port = htons (srv->port); 1033 sd.port = htons (srv->port);
1034 memcpy (&dst[*off], &sd, sizeof (sd)); 1034 GNUNET_memcpy (&dst[*off], &sd, sizeof (sd));
1035 (*off) += sizeof (sd); 1035 (*off) += sizeof (sd);
1036 if (GNUNET_OK != (ret = GNUNET_DNSPARSER_builder_add_name (dst, 1036 if (GNUNET_OK != (ret = GNUNET_DNSPARSER_builder_add_name (dst,
1037 dst_len, 1037 dst_len,
@@ -1100,7 +1100,7 @@ add_record (char *dst,
1100 ret = GNUNET_NO; 1100 ret = GNUNET_NO;
1101 break; 1101 break;
1102 } 1102 }
1103 memcpy (&dst[pos], record->data.raw.data, record->data.raw.data_len); 1103 GNUNET_memcpy (&dst[pos], record->data.raw.data, record->data.raw.data_len);
1104 pos += record->data.raw.data_len; 1104 pos += record->data.raw.data_len;
1105 ret = GNUNET_OK; 1105 ret = GNUNET_OK;
1106 break; 1106 break;
@@ -1121,7 +1121,7 @@ add_record (char *dst,
1121 rl.dns_traffic_class = htons (record->dns_traffic_class); 1121 rl.dns_traffic_class = htons (record->dns_traffic_class);
1122 rl.ttl = htonl (GNUNET_TIME_absolute_get_remaining (record->expiration_time).rel_value_us / 1000LL / 1000LL); /* in seconds */ 1122 rl.ttl = htonl (GNUNET_TIME_absolute_get_remaining (record->expiration_time).rel_value_us / 1000LL / 1000LL); /* in seconds */
1123 rl.data_len = htons ((uint16_t) (pos - (*off + sizeof (struct GNUNET_TUN_DnsRecordLine)))); 1123 rl.data_len = htons ((uint16_t) (pos - (*off + sizeof (struct GNUNET_TUN_DnsRecordLine))));
1124 memcpy (&dst[*off], &rl, sizeof (struct GNUNET_TUN_DnsRecordLine)); 1124 GNUNET_memcpy (&dst[*off], &rl, sizeof (struct GNUNET_TUN_DnsRecordLine));
1125 *off = pos; 1125 *off = pos;
1126 return GNUNET_OK; 1126 return GNUNET_OK;
1127} 1127}
@@ -1219,11 +1219,11 @@ GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p,
1219 1219
1220 if (GNUNET_YES == trc) 1220 if (GNUNET_YES == trc)
1221 dns.flags.message_truncated = 1; 1221 dns.flags.message_truncated = 1;
1222 memcpy (tmp, &dns, sizeof (struct GNUNET_TUN_DnsHeader)); 1222 GNUNET_memcpy (tmp, &dns, sizeof (struct GNUNET_TUN_DnsHeader));
1223 1223
1224 *buf = GNUNET_malloc (off); 1224 *buf = GNUNET_malloc (off);
1225 *buf_length = off; 1225 *buf_length = off;
1226 memcpy (*buf, tmp, off); 1226 GNUNET_memcpy (*buf, tmp, off);
1227 if (GNUNET_YES == trc) 1227 if (GNUNET_YES == trc)
1228 return GNUNET_NO; 1228 return GNUNET_NO;
1229 return GNUNET_OK; 1229 return GNUNET_OK;
diff --git a/src/dns/dnsstub.c b/src/dns/dnsstub.c
index 50a3320fb..b3cd2817e 100644
--- a/src/dns/dnsstub.c
+++ b/src/dns/dnsstub.c
@@ -277,7 +277,7 @@ GNUNET_DNSSTUB_resolve (struct GNUNET_DNSSTUB_Context *ctx,
277 else 277 else
278 ret = rs->dnsout6; 278 ret = rs->dnsout6;
279 GNUNET_assert (NULL != ret); 279 GNUNET_assert (NULL != ret);
280 memcpy (&rs->addr, 280 GNUNET_memcpy (&rs->addr,
281 sa, 281 sa,
282 sa_len); 282 sa_len);
283 rs->addrlen = sa_len; 283 rs->addrlen = sa_len;
@@ -367,7 +367,7 @@ GNUNET_DNSSTUB_resolve2 (struct GNUNET_DNSSTUB_Context *ctx,
367 ctx->dns_exit); 367 ctx->dns_exit);
368 return NULL; 368 return NULL;
369 } 369 }
370 memcpy (&rs->addr, 370 GNUNET_memcpy (&rs->addr,
371 sa, 371 sa,
372 salen); 372 salen);
373 rs->addrlen = salen; 373 rs->addrlen = salen;
diff --git a/src/dns/gnunet-service-dns.c b/src/dns/gnunet-service-dns.c
index b580f433f..50aa730e7 100644
--- a/src/dns/gnunet-service-dns.c
+++ b/src/dns/gnunet-service-dns.c
@@ -378,7 +378,7 @@ request_done (struct RequestRecord *rr)
378 tun.proto = htons (ETH_P_IPV4); 378 tun.proto = htons (ETH_P_IPV4);
379 else 379 else
380 tun.proto = htons (ETH_P_IPV6); 380 tun.proto = htons (ETH_P_IPV6);
381 memcpy (&buf[off], &tun, sizeof (struct GNUNET_TUN_Layer2PacketHeader)); 381 GNUNET_memcpy (&buf[off], &tun, sizeof (struct GNUNET_TUN_Layer2PacketHeader));
382 off += sizeof (struct GNUNET_TUN_Layer2PacketHeader); 382 off += sizeof (struct GNUNET_TUN_Layer2PacketHeader);
383 } 383 }
384 384
@@ -397,7 +397,7 @@ request_done (struct RequestRecord *rr)
397 reply_len - off - sizeof (struct GNUNET_TUN_IPv4Header), 397 reply_len - off - sizeof (struct GNUNET_TUN_IPv4Header),
398 &dst->sin_addr, 398 &dst->sin_addr,
399 &src->sin_addr); 399 &src->sin_addr);
400 memcpy (&buf[off], &ip4, sizeof (ip4)); 400 GNUNET_memcpy (&buf[off], &ip4, sizeof (ip4));
401 off += sizeof (ip4); 401 off += sizeof (ip4);
402 } 402 }
403 break; 403 break;
@@ -413,7 +413,7 @@ request_done (struct RequestRecord *rr)
413 reply_len - sizeof (struct GNUNET_TUN_IPv6Header), 413 reply_len - sizeof (struct GNUNET_TUN_IPv6Header),
414 &dst->sin6_addr, 414 &dst->sin6_addr,
415 &src->sin6_addr); 415 &src->sin6_addr);
416 memcpy (&buf[off], &ip6, sizeof (ip6)); 416 GNUNET_memcpy (&buf[off], &ip6, sizeof (ip6));
417 off += sizeof (ip6); 417 off += sizeof (ip6);
418 } 418 }
419 break; 419 break;
@@ -438,13 +438,13 @@ request_done (struct RequestRecord *rr)
438 &udp, 438 &udp,
439 rr->payload, 439 rr->payload,
440 rr->payload_length); 440 rr->payload_length);
441 memcpy (&buf[off], &udp, sizeof (udp)); 441 GNUNET_memcpy (&buf[off], &udp, sizeof (udp));
442 off += sizeof (udp); 442 off += sizeof (udp);
443 } 443 }
444 444
445 /* now DNS payload */ 445 /* now DNS payload */
446 { 446 {
447 memcpy (&buf[off], rr->payload, rr->payload_length); 447 GNUNET_memcpy (&buf[off], rr->payload, rr->payload_length);
448 off += rr->payload_length; 448 off += rr->payload_length;
449 } 449 }
450 /* final checks & sending */ 450 /* final checks & sending */
@@ -490,7 +490,7 @@ send_request_to_client (struct RequestRecord *rr,
490 req->header.size = htons (sizeof (buf)); 490 req->header.size = htons (sizeof (buf));
491 req->reserved = htonl (0); 491 req->reserved = htonl (0);
492 req->request_id = rr->request_id; 492 req->request_id = rr->request_id;
493 memcpy (&req[1], rr->payload, rr->payload_length); 493 GNUNET_memcpy (&req[1], rr->payload, rr->payload_length);
494 GNUNET_SERVER_notification_context_unicast (nc, 494 GNUNET_SERVER_notification_context_unicast (nc,
495 client, 495 client,
496 &req->header, 496 &req->header,
@@ -723,7 +723,7 @@ process_dns_result (void *cls,
723 (unsigned long long) rr->request_id); 723 (unsigned long long) rr->request_id);
724 GNUNET_free_non_null (rr->payload); 724 GNUNET_free_non_null (rr->payload);
725 rr->payload = GNUNET_malloc (r); 725 rr->payload = GNUNET_malloc (r);
726 memcpy (rr->payload, dns, r); 726 GNUNET_memcpy (rr->payload, dns, r);
727 rr->payload_length = r; 727 rr->payload_length = r;
728 next_phase (rr); 728 next_phase (rr);
729} 729}
@@ -825,7 +825,7 @@ handle_client_response (void *cls GNUNET_UNUSED,
825 "Changing DNS reply according to client specifications\n"); 825 "Changing DNS reply according to client specifications\n");
826 rr->payload = GNUNET_malloc (msize); 826 rr->payload = GNUNET_malloc (msize);
827 rr->payload_length = msize; 827 rr->payload_length = msize;
828 memcpy (rr->payload, &resp[1], msize); 828 GNUNET_memcpy (rr->payload, &resp[1], msize);
829 if (rr->phase == RP_QUERY) 829 if (rr->phase == RP_QUERY)
830 { 830 {
831 /* clear wait list, we're moving to MODIFY phase next */ 831 /* clear wait list, we're moving to MODIFY phase next */
@@ -1000,7 +1000,7 @@ process_helper_messages (void *cls GNUNET_UNUSED, void *client,
1000 } 1000 }
1001 rr->payload = GNUNET_malloc (msize); 1001 rr->payload = GNUNET_malloc (msize);
1002 rr->payload_length = msize; 1002 rr->payload_length = msize;
1003 memcpy (rr->payload, dns, msize); 1003 GNUNET_memcpy (rr->payload, dns, msize);
1004 rr->request_id = dns->id | (request_id_gen << 16); 1004 rr->request_id = dns->id | (request_id_gen << 16);
1005 request_id_gen++; 1005 request_id_gen++;
1006 LOG (GNUNET_ERROR_TYPE_DEBUG, 1006 LOG (GNUNET_ERROR_TYPE_DEBUG,