Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet6/ip6_output.c
Show First 20 Lines • Show All 2,215 Lines • ▼ Show 20 Lines | case SOPT_SET: | ||||
if (optlen != sizeof(int)) { | if (optlen != sizeof(int)) { | ||||
error = EINVAL; | error = EINVAL; | ||||
break; | break; | ||||
} | } | ||||
error = sooptcopyin(sopt, &optval, sizeof(optval), | error = sooptcopyin(sopt, &optval, sizeof(optval), | ||||
sizeof(optval)); | sizeof(optval)); | ||||
if (error) | if (error) | ||||
break; | break; | ||||
if ((optval % 2) != 0) { | if (optval < -1 || (optval % 2) != 0) { | ||||
/* the API assumes even offset values */ | /* | ||||
* The API assumes non-negative even offset | |||||
* values or -1 as a special value. | |||||
*/ | |||||
error = EINVAL; | error = EINVAL; | ||||
} else if (so->so_proto->pr_protocol == | } else if (so->so_proto->pr_protocol == | ||||
IPPROTO_ICMPV6) { | IPPROTO_ICMPV6) { | ||||
if (optval != icmp6off) | if (optval != icmp6off) | ||||
error = EINVAL; | error = EINVAL; | ||||
} else | } else | ||||
in6p->in6p_cksum = optval; | in6p->in6p_cksum = optval; | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 910 Lines • Show Last 20 Lines |