diff options
| author | ozaki-r <ozaki-r@NetBSD.org> | 2023-03-20 09:15:52 +0000 |
|---|---|---|
| committer | ozaki-r <ozaki-r@NetBSD.org> | 2023-03-20 09:15:52 +0000 |
| commit | fc7ed244717c7701a2a2de37a2226e5a8e718504 (patch) | |
| tree | bfe0285e6c789ed13cfa1ddccac70163f61b4131 /sys/netinet6 | |
| parent | f2153a32a2f6ea0be49b8e36e67eaef90779675e (diff) | |
in6: reject setting negative values but -1 via setsockopt(IPV6_CHECKSUM)
Same as OpenBSD.
Diffstat (limited to 'sys/netinet6')
| -rw-r--r-- | sys/netinet6/ip6_output.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c index a362e42e95d..0a9ae8fc762 100644 --- a/sys/netinet6/ip6_output.c +++ b/sys/netinet6/ip6_output.c @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_output.c,v 1.232 2023/01/27 09:33:43 ozaki-r Exp $ */ +/* $NetBSD: ip6_output.c,v 1.233 2023/03/20 09:15:52 ozaki-r Exp $ */ /* $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.232 2023/01/27 09:33:43 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.233 2023/03/20 09:15:52 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -1984,8 +1984,12 @@ ip6_raw_ctloutput(int op, struct socket *so, struct sockopt *sopt) error = sockopt_getint(sopt, &optval); if (error) break; - if ((optval % 2) != 0) { - /* the API assumes even offset values */ + if (optval < -1 || + (optval > 0 && (optval % 2) != 0)) { + /* + * The API assumes non-negative even offset + * values or -1 as a special value. + */ error = EINVAL; } else if (so->so_proto->pr_protocol == IPPROTO_ICMPV6) { |
