Index: sys/kern/uipc_socket.c =================================================================== --- sys/kern/uipc_socket.c (revision 256107) +++ sys/kern/uipc_socket.c (working copy) @@ -2533,6 +2533,10 @@ sosetopt(struct socket *so, struct sockopt *sopt) goto bad; if (tv.tv_sec < 0 || tv.tv_usec < 0 || tv.tv_usec >= 1000000) { + error = EINVAL; + goto bad; + } + if (tv.tv_sec > INT_MAX) { error = EDOM; goto bad; } @@ -2687,10 +2691,8 @@ integer: case SO_SNDTIMEO: case SO_RCVTIMEO: - optval = (sopt->sopt_name == SO_SNDTIMEO ? + tv = sbttotv(sopt->sopt_name == SO_SNDTIMEO ? so->so_snd.sb_timeo : so->so_rcv.sb_timeo); - - tv = sbttotv(optval); #ifdef COMPAT_FREEBSD32 if (SV_CURPROC_FLAG(SV_ILP32)) { struct timeval32 tv32;