From c0ef6144b4d60afb90bc6d8db3ffdac043cd6ffc Mon Sep 17 00:00:00 2001 From: Nguyen Dinh Phi Date: Fri, 30 Oct 2026 14:43:50 +0800 Subject: [PATCH] vsock: reject negative tv_usec in SO_VM_SOCKETS_CONNECT_TIMEOUT The timeval validation checks tv_usec < USEC_PER_SEC but not tv_usec >= 0, so a negative tv_usec makes the timeout computation wrap into a bogus value, later tripping "schedule_timeout: wrong timeout value" instead of being rejected. Fixes: d021c344051a ("VSOCK: Introduce VM Sockets") Signed-off-by: Nguyen Dinh Phi Reviewed-by: Stefano Garzarella Reviewed-by: Bobby Eshleman Link: https://patch.msgid.link/20261030064428.73930-1-phind.uet@gmail.com Signed-off-by: Paolo Abeni --- net/vmw_vsock/af_vsock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index d0508887a2fb..1d7d53542724 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -2156,7 +2156,8 @@ static int vsock_connectible_setsockopt(struct socket *sock, optname == SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD); if (err) break; - if (tv.tv_sec >= 0 && tv.tv_usec < USEC_PER_SEC && + if (tv.tv_sec >= 0 && tv.tv_usec >= 0 && + tv.tv_usec < USEC_PER_SEC && tv.tv_sec < (MAX_SCHEDULE_TIMEOUT / HZ - 1)) { vsk->connect_timeout = tv.tv_sec * HZ + DIV_ROUND_UP((unsigned long)tv.tv_usec, (USEC_PER_SEC / HZ));