syslog(LOG_ERR,
"%s: invalid option len for prefix",
ifp->name);
- break;
+ continue;
}
if (pi->nd_opt_pi_prefix_len > 128) {
syslog(LOG_ERR, "%s: invalid prefix len",
ifp->name);
- break;
+ continue;
}
if (IN6_IS_ADDR_MULTICAST(&pi->nd_opt_pi_prefix) ||
IN6_IS_ADDR_LINKLOCAL(&pi->nd_opt_pi_prefix))
{
syslog(LOG_ERR,
"%s: invalid prefix in RA", ifp->name);
- break;
+ continue;
}
if (ntohl(pi->nd_opt_pi_preferred_time) >
ntohl(pi->nd_opt_pi_valid_time))
{
syslog(LOG_ERR,
"%s: pltime > vltime", ifp->name);
- break;
+ continue;
}
TAILQ_FOREACH(ap, &rap->addrs, next)
if (ap->prefix_len ==pi->nd_opt_pi_prefix_len &&
ND_OPT_PI_FLAG_ONLINK))
continue;
ap = calloc(1, sizeof(*ap));
- if (ap == NULL) {
- syslog(LOG_ERR, "%s: %m", __func__);
+ if (ap == NULL)
break;
- }
ap->iface = rap->iface;
ap->flags = IPV6_AF_NEW;
ap->prefix_len = pi->nd_opt_pi_prefix_len;
opt = tmp;
opt[l - 1] = ' ';
strlcpy(opt + l, ap->saddr, m);
- } else
+ } else {
syslog(LOG_ERR, "%s: %m", __func__);
- } else {
+ continue;
+ }
+ } else
opt = strdup(ap->saddr);
- if (opt == NULL)
- syslog(LOG_ERR, "%s: %m", __func__);
- }
lifetime = ap->prefix_vltime;
break;
rap->mtu = mtuv;
snprintf(buf, sizeof(buf), "%d", mtuv);
opt = strdup(buf);
- if (opt == NULL)
- syslog(LOG_ERR, "%s: %m", __func__);
break;
case ND_OPT_RDNSS:
nd_opt_rdnss_lifetime);
op += sizeof(rdnss->nd_opt_rdnss_lifetime);
tmp = opt = malloc(l);
- if (opt) {
- for (n = ndo->nd_opt_len - 1; n > 1; n -= 2,
- op += sizeof(addr.s6_addr))
- {
- r = ipv6_printaddr(tmp, l, op,
- ifp->name);
- if (r != -1) {
- l -= ((size_t)r + 1);
- tmp += (size_t)r;
- *tmp++ = ' ';
- }
+ if (opt == NULL)
+ continue;
+ for (n = ndo->nd_opt_len - 1; n > 1; n -= 2,
+ op += sizeof(addr.s6_addr))
+ {
+ r = ipv6_printaddr(tmp, l, op,
+ ifp->name);
+ if (r != -1) {
+ l -= ((size_t)r + 1);
+ tmp += (size_t)r;
+ *tmp++ = ' ';
}
- if (tmp != opt)
- (*--tmp) = '\0';
- else
- *opt = '\0';
- } else
- syslog(LOG_ERR, "%s: %m", __func__);
+ }
+ if (tmp != opt)
+ (*--tmp) = '\0';
+ else
+ *opt = '\0';
break;
case ND_OPT_DNSSL:
if (r < 1) {
syslog(LOG_ERR, "%s: invalid DNSSL option",
ifp->name);
+ continue;
} else {
l = (size_t)r;
tmp = malloc(l);
syslog(LOG_ERR, "%s: %m",
__func__);
free(tmp);
- } else
- syslog(LOG_ERR, "%s: %m", __func__);
+ }
}
break;
continue;
}
- if (opt == NULL)
+ if (opt == NULL) {
+ syslog(LOG_ERR, "%s: %m", __func__);
continue;
+ }
TAILQ_FOREACH(rao, &rap->options, next) {
if (rao->type == ndo->nd_opt_type &&