Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp2199442pxb; Fri, 8 Oct 2021 03:03:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwXYNuyWb8+mKWmeoQv3qQu9D7PxmHZR10suhEwlmBw1cVqALiKi/ENEBNbQhikTBad25xD X-Received: by 2002:a1c:8054:: with SMTP id b81mr2365560wmd.87.1633687403500; Fri, 08 Oct 2021 03:03:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633687403; cv=none; d=google.com; s=arc-20160816; b=0ShJXLXlBZNXxTqAjNGh5WkQJVjRWUOIaz/8c0cNpn/36wuKGGSoVArqzpDfSSdSA/ +12A1p/GyjznbQ0yKl0YqMLUf9ksJVILKdm76mjTlHWg5rg7EvhqBDNYD1yN67O1Nxgn h2/S38uF1ot4qDFpVM791OsyhTLewho2fJvkqbXjfqVoQyYofP2IBzX6PopOyKOT4u0w Kp6gGZZtowWsrGgBPWv3NrRa8dIRkw/cdI/Ja/mbYqF6GPGGEfWpzshDhKiXDdFfPd0K 2pMskCcrYJQf8a7P8/dMqoLCuPAyhlAxRTCVGakFmjjazYTR/mPyfLAmAAGYUgtnctR5 oQ/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=qyzeG39RQY90nbn8hALcZZOVE1eV05QuvB+1SDRXg+A=; b=af2S1fu1dWHtgaCZgVLLM6GvJBeucPyQF1/GEHQrrAxdBlUWAHHWCCm9TnQ7irrU47 u3A1dztPZVi74ZDwpt7UAYZiB92VW+LAmZ9WJUoYRhW+Mimb2GtubjGZwobl7l3kAkmW PV9voMrWQKc25Kf7LK8XlA82YrhLJSW9UBivgIrJHZge6GatxXRMwezhowkzw4Q/kFuA QArKQsiS7ILSncsP2kaCav2Kb0G+mXZ8crNz3SPxV8XvnmBDZH8/ev0p9k0SHus6xEzj QXkqVGrhCFpheG14XNCR4JGEDNQ2D+wY21AONpGRi1O1SxLZQW8B+PTnCmOTUrZVsezb WplA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.com header.s=susede1 header.b=gxlj+y0c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=suse.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p23si3007875edw.135.2021.10.08.03.02.56; Fri, 08 Oct 2021 03:03:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.com header.s=susede1 header.b=gxlj+y0c; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=suse.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238983AbhJHKDD (ORCPT + 99 others); Fri, 8 Oct 2021 06:03:03 -0400 Received: from smtp-out2.suse.de ([195.135.220.29]:43702 "EHLO smtp-out2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237434AbhJHKDC (ORCPT ); Fri, 8 Oct 2021 06:03:02 -0400 Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id 7147F1FD74; Fri, 8 Oct 2021 10:01:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1633687265; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=qyzeG39RQY90nbn8hALcZZOVE1eV05QuvB+1SDRXg+A=; b=gxlj+y0cSpwIdqrtPZCMb0/ldd+6guidWOonDdIq1raVlTCC18eojoWlPUhTixbuUcrNI/ pL1ctPyVtHydC7YiDtP6R6nHKLfeLgrIoTyvKgvxX7UdSBTq9EyXs0lfDpPKsCIuuEsvvm 4UL3pd+htBujnsLyg6/yRX9M5ORybnI= Received: from g78.suse.de (unknown [10.163.24.38]) by relay2.suse.de (Postfix) with ESMTP id 41CC0A3B81; Fri, 8 Oct 2021 10:01:04 +0000 (UTC) From: Richard Palethorpe To: Arnd Bergmann , Jakub Kicinski Cc: Richard Palethorpe , "David S. Miller" , Stefano Garzarella , Andra Paraschiv , Eric Dumazet , Arseny Krasnov , Willem de Bruijn , Deepa Dinamani , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Richard Palethorpe Subject: [PATCH v3 1/2] vsock: Refactor vsock_*_getsockopt to resemble sock_getsockopt Date: Fri, 8 Oct 2021 11:00:52 +0100 Message-Id: <20211008100053.29806-1-rpalethorpe@suse.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In preparation for sharing the implementation of sock_get_timeout. Signed-off-by: Richard Palethorpe Cc: Richard Palethorpe Reviewed-by: Arnd Bergmann --- net/vmw_vsock/af_vsock.c | 65 +++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 3e02cc3b24f8..97d56f6a4480 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -1648,68 +1648,59 @@ static int vsock_connectible_getsockopt(struct socket *sock, char __user *optval, int __user *optlen) { - int err; + struct sock *sk = sock->sk; + struct vsock_sock *vsk = vsock_sk(sk); + + union { + u64 val64; + struct __kernel_old_timeval tm; + } v; + + int lv = sizeof(v.val64); int len; - struct sock *sk; - struct vsock_sock *vsk; - u64 val; if (level != AF_VSOCK) return -ENOPROTOOPT; - err = get_user(len, optlen); - if (err != 0) - return err; - -#define COPY_OUT(_v) \ - do { \ - if (len < sizeof(_v)) \ - return -EINVAL; \ - \ - len = sizeof(_v); \ - if (copy_to_user(optval, &_v, len) != 0) \ - return -EFAULT; \ - \ - } while (0) + if (get_user(len, optlen)) + return -EFAULT; - err = 0; - sk = sock->sk; - vsk = vsock_sk(sk); + memset(&v, 0, sizeof(v)); switch (optname) { case SO_VM_SOCKETS_BUFFER_SIZE: - val = vsk->buffer_size; - COPY_OUT(val); + v.val64 = vsk->buffer_size; break; case SO_VM_SOCKETS_BUFFER_MAX_SIZE: - val = vsk->buffer_max_size; - COPY_OUT(val); + v.val64 = vsk->buffer_max_size; break; case SO_VM_SOCKETS_BUFFER_MIN_SIZE: - val = vsk->buffer_min_size; - COPY_OUT(val); + v.val64 = vsk->buffer_min_size; break; - case SO_VM_SOCKETS_CONNECT_TIMEOUT: { - struct __kernel_old_timeval tv; - tv.tv_sec = vsk->connect_timeout / HZ; - tv.tv_usec = + case SO_VM_SOCKETS_CONNECT_TIMEOUT: + lv = sizeof(v.tm); + v.tm.tv_sec = vsk->connect_timeout / HZ; + v.tm.tv_usec = (vsk->connect_timeout - - tv.tv_sec * HZ) * (1000000 / HZ); - COPY_OUT(tv); + v.tm.tv_sec * HZ) * (1000000 / HZ); break; - } + default: return -ENOPROTOOPT; } - err = put_user(len, optlen); - if (err != 0) + if (len < lv) + return -EINVAL; + if (len > lv) + len = lv; + if (copy_to_user(optval, &v, len)) return -EFAULT; -#undef COPY_OUT + if (put_user(len, optlen)) + return -EFAULT; return 0; } -- 2.33.0