summaryrefslogtreecommitdiffstats
path: root/ipv6nd.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2014-02-27 20:00:39 +0000
committerRoy Marples <roy@marples.name>2014-02-27 20:00:39 +0000
commit8fc52ced6f080d0bf25344e9b608fdd0f7ce4a93 (patch)
treebd1b22cf8b289f4a910efe84f1f2e4ee81d66a27 /ipv6nd.c
parent04a1918940bf29ae2c29535ad3b8c2396fe5c7aa (diff)
downloaddhcpcd-8fc52ced6f080d0bf25344e9b608fdd0f7ce4a93.tar.xz
Fix all errors reported by clang static analyser.
Diffstat (limited to 'ipv6nd.c')
-rw-r--r--ipv6nd.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/ipv6nd.c b/ipv6nd.c
index e77632ad..6fe43c75 100644
--- a/ipv6nd.c
+++ b/ipv6nd.c
@@ -357,6 +357,8 @@ ipv6nd_sendrsprobe(void *arg)
/* Set the outbound interface */
cm = CMSG_FIRSTHDR(&ctx->sndhdr);
+ if (cm == NULL) /* unlikely */
+ return;
cm->cmsg_level = IPPROTO_IPV6;
cm->cmsg_type = IPV6_PKTINFO;
cm->cmsg_len = CMSG_LEN(sizeof(pi));
@@ -366,6 +368,8 @@ ipv6nd_sendrsprobe(void *arg)
/* Hop limit */
cm = CMSG_NXTHDR(&ctx->sndhdr, cm);
+ if (cm == NULL) /* unlikely */
+ return;
cm->cmsg_level = IPPROTO_IPV6;
cm->cmsg_type = IPV6_HOPLIMIT;
cm->cmsg_len = CMSG_LEN(sizeof(hoplimit));
@@ -750,9 +754,8 @@ ipv6nd_handlera(struct ipv6_ctx *ctx, struct interface *ifp,
len -= sizeof(struct nd_router_advert);
p = ((uint8_t *)icp) + sizeof(struct nd_router_advert);
- olen = 0;
lifetime = ~0U;
- for (olen = 0; len > 0; p += olen, len -= olen) {
+ for (; len > 0; p += olen, len -= olen) {
if ((size_t)len < sizeof(struct nd_opt_hdr)) {
syslog(LOG_ERR, "%s: short option", ifp->name);
break;
@@ -1412,12 +1415,15 @@ ipv6nd_probeaddr(void *arg)
//memcpy(&dst.sin6_addr, &ap->addr, sizeof(dst.sin6_addr));
dst.sin6_scope_id = ap->iface->index;
- sndhdr.msg_name = (caddr_t)&dst;
- sndhdr.msg_iov[0].iov_base = ap->ns;
- sndhdr.msg_iov[0].iov_len = ap->nslen;
+ ctx = ap->iface->ctx->ipv6;
+ ctx->sndhdr.msg_name = (caddr_t)&dst;
+ ctx->sndhdr.msg_iov[0].iov_base = ap->ns;
+ ctx->sndhdr.msg_iov[0].iov_len = ap->nslen;
/* Set the outbound interface */
- cm = CMSG_FIRSTHDR(&sndhdr);
+ cm = CMSG_FIRSTHDR(&ctx->sndhdr);
+ if (cm == NULL) /* unlikely */
+ return;
cm->cmsg_level = IPPROTO_IPV6;
cm->cmsg_type = IPV6_PKTINFO;
cm->cmsg_len = CMSG_LEN(sizeof(pi));
@@ -1427,6 +1433,8 @@ ipv6nd_probeaddr(void *arg)
/* Hop limit */
cm = CMSG_NXTHDR(&sndhdr, cm);
+ if (cm == NULL) /* unlikely */
+ return;
cm->cmsg_level = IPPROTO_IPV6;
cm->cmsg_type = IPV6_HOPLIMIT;
cm->cmsg_len = CMSG_LEN(sizeof(hoplimit));
@@ -1568,6 +1576,8 @@ ipv6nd_proberouter(void *arg)
/* Set the outbound interface */
cm = CMSG_FIRSTHDR(&ctx->sndhdr);
+ if (cm == NULL) /* unlikely */
+ return;
cm->cmsg_level = IPPROTO_IPV6;
cm->cmsg_type = IPV6_PKTINFO;
cm->cmsg_len = CMSG_LEN(sizeof(pi));
@@ -1577,6 +1587,8 @@ ipv6nd_proberouter(void *arg)
/* Hop limit */
cm = CMSG_NXTHDR(&ctx->sndhdr, cm);
+ if (cm == NULL) /* unlikely */
+ return;
cm->cmsg_level = IPPROTO_IPV6;
cm->cmsg_type = IPV6_HOPLIMIT;
cm->cmsg_len = CMSG_LEN(sizeof(hoplimit));