From patchwork Thu Mar 9 20:26:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 67089 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp503853wrd; Thu, 9 Mar 2023 12:32:51 -0800 (PST) X-Google-Smtp-Source: AK7set8PIOz2Cm50Cr7uQe/XKRp+Px6TajLE92Lsxv+KW+wvksYbdH7LJ4NTelAMHvyQUDMS77Zx X-Received: by 2002:a17:90b:1b4e:b0:233:ee67:8eb3 with SMTP id nv14-20020a17090b1b4e00b00233ee678eb3mr23610525pjb.24.1678393971619; Thu, 09 Mar 2023 12:32:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678393971; cv=none; d=google.com; s=arc-20160816; b=z/b0+JvCu4TXkIw8/yeNedaN+BsjATKEaFAvEeEJTvy4sFeYM+1MunuroRzaRiHF8F eNtzrgsSAAibrnj38C12F/3a1e0z08okvjhYG1nHRB251h+KaFqqZ9ZvZ2MHVGCA7l/R xtt/jZIgahTOrhkO7fRr+EbsoiQjuWxXqvWa41+uYU6v1bgtr4pyAOtZZ85ioFdI+lxT hbvlywheL+hMVNtNTSoC39V22G0GOKtHgxJ4fkQJyK1PSkV5IJQ3tsxBgiRoPlYA/eaZ lr/cUzjyHbplyaAgpkr2UX7bwOK+SGR+APJsFLuHVOXANRT2ixu1krapaj45CfnefrUd tHlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:subject:from:cc:to :in-reply-to:content-language:user-agent:mime-version:date :message-id:dkim-signature; bh=qHtnZady8MO5P+SxKXbSQQ1axjJ6o1RkSBId0/l8vfY=; b=d+O1zJ/kCMGZF7euc1Tsn7Fp+F+NtPDWvSfVdtgHWmqyRNxtV3UUlVx/F3NzRdeIbg kUIAc8ht2DRcJFVPRiqK1tBTf1/L4D0IznqyLHHaVsErYgZl3FL7gp9COHcFSKj/UgdM kBzfV0I/Im7Yj7ic1RuDtIXipTY42ppR2f9xvAxyoFzI+Zzp1Z5QAWrAwogrrUoG/yr4 fXpmAxmY3hPJfpk7qKP/xe0Q16pImPw3Jz/Yo0ODHhMXjua0oYsR5soC6l/ptAeSmFHm COPe/nu+Td0LzsWHzIIK0D/sjSktT4x+B06McV0XTh33Y0Z/1RNgnpDrc9hHaqmsLy62 uztg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=BM1cE+z+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f3-20020a17090ac28300b00225f3e34336si673884pjt.89.2023.03.09.12.32.34; Thu, 09 Mar 2023 12:32:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=BM1cE+z+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229751AbjCIU3J (ORCPT + 99 others); Thu, 9 Mar 2023 15:29:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60332 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229453AbjCIU3G (ORCPT ); Thu, 9 Mar 2023 15:29:06 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6CA4D65AE; Thu, 9 Mar 2023 12:29:03 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 80F165FD1B; Thu, 9 Mar 2023 23:29:01 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1678393741; bh=qHtnZady8MO5P+SxKXbSQQ1axjJ6o1RkSBId0/l8vfY=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type; b=BM1cE+z+UXNOGOh/Z25liYbmVfs1mS1SWXYiysOj9dV1n1Cvividvl/KhRAFROcOZ R5SxlhNRkIAJ95LLurt1Ssa0rzfwl/vXDns4VxeD3y6ycNwszqO0VFbvUCJOIyJF44 qjYVbYI8lRiJCwf5MDPvlBWArI4EPBN927KlTIn3dqh/9AVNywH1oEJMe6cwnQM5PM /ZT7NvFnF2vEugClgiuFVk+iwMKuety+FZ8D1EP+mMxoS1p1JI7pJwpw4wDk68BKKa GoeSdNqCa8Oi8KlymXD1Z/V+c8N2d48DF+gxUZTdyomLHNLMoXmtsbPgLGGlpInAAu iLBzuKCfO0jWw== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Thu, 9 Mar 2023 23:29:01 +0300 (MSK) Message-ID: <71a296ad-6619-c8e6-14a1-9423ac2e4841@sberdevices.ru> Date: Thu, 9 Mar 2023 23:26:00 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US In-Reply-To: <1804d100-1652-d463-8627-da93cb61144e@sberdevices.ru> To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bobby Eshleman CC: , , , , , , From: Arseniy Krasnov Subject: [RFC PATCH v4 1/4] virtio/vsock: don't use skbuff state to account credit X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH01.sberdevices.ru (172.16.1.4) To S-MS-EXCH01.sberdevices.ru (172.16.1.4) X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2023/03/09 18:14:00 #20929517 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759923636854342832?= X-GMAIL-MSGID: =?utf-8?q?1759923636854342832?= 'skb->len' can vary when we partially read the data, this complicates the calculation of credit to be updated in 'virtio_transport_inc_rx_pkt()/ virtio_transport_dec_rx_pkt()'. Also in 'virtio_transport_dec_rx_pkt()' we were miscalculating the credit since 'skb->len' was redundant. For these reasons, let's replace the use of skbuff state to calculate new 'rx_bytes'/'fwd_cnt' values with explicit value as input argument. This makes code more simple, because it is not needed to change skbuff state before each call to update 'rx_bytes'/'fwd_cnt'. Fixes: 71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with sk_buff") Signed-off-by: Arseniy Krasnov Reviewed-by: Stefano Garzarella --- net/vmw_vsock/virtio_transport_common.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index a1581c77cf84..618680fd9906 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -241,21 +241,18 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk, } static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs, - struct sk_buff *skb) + u32 len) { - if (vvs->rx_bytes + skb->len > vvs->buf_alloc) + if (vvs->rx_bytes + len > vvs->buf_alloc) return false; - vvs->rx_bytes += skb->len; + vvs->rx_bytes += len; return true; } static void virtio_transport_dec_rx_pkt(struct virtio_vsock_sock *vvs, - struct sk_buff *skb) + u32 len) { - int len; - - len = skb_headroom(skb) - sizeof(struct virtio_vsock_hdr) - skb->len; vvs->rx_bytes -= len; vvs->fwd_cnt += len; } @@ -388,7 +385,9 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, skb_pull(skb, bytes); if (skb->len == 0) { - virtio_transport_dec_rx_pkt(vvs, skb); + u32 pkt_len = le32_to_cpu(virtio_vsock_hdr(skb)->len); + + virtio_transport_dec_rx_pkt(vvs, pkt_len); consume_skb(skb); } else { __skb_queue_head(&vvs->rx_queue, skb); @@ -437,17 +436,17 @@ static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, while (!msg_ready) { struct virtio_vsock_hdr *hdr; + size_t pkt_len; skb = __skb_dequeue(&vvs->rx_queue); if (!skb) break; hdr = virtio_vsock_hdr(skb); + pkt_len = (size_t)le32_to_cpu(hdr->len); if (dequeued_len >= 0) { - size_t pkt_len; size_t bytes_to_copy; - pkt_len = (size_t)le32_to_cpu(hdr->len); bytes_to_copy = min(user_buf_len, pkt_len); if (bytes_to_copy) { @@ -484,7 +483,7 @@ static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, msg->msg_flags |= MSG_EOR; } - virtio_transport_dec_rx_pkt(vvs, skb); + virtio_transport_dec_rx_pkt(vvs, pkt_len); kfree_skb(skb); } @@ -1040,7 +1039,7 @@ virtio_transport_recv_enqueue(struct vsock_sock *vsk, spin_lock_bh(&vvs->rx_lock); - can_enqueue = virtio_transport_inc_rx_pkt(vvs, skb); + can_enqueue = virtio_transport_inc_rx_pkt(vvs, len); if (!can_enqueue) { free_pkt = true; goto out; From patchwork Thu Mar 9 20:27:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 67093 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp509325wrd; Thu, 9 Mar 2023 12:46:09 -0800 (PST) X-Google-Smtp-Source: AK7set+17cCjxhtpg71MRnXJEaCgT3ZnwRjOJ6yq0YKkOQCGUsPe/ow+n0OmSwNr780wLysXQy5F X-Received: by 2002:a17:902:c103:b0:19e:7611:7162 with SMTP id 3-20020a170902c10300b0019e76117162mr20085168pli.16.1678394768748; Thu, 09 Mar 2023 12:46:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678394768; cv=none; d=google.com; s=arc-20160816; b=qQjDT4F9MnDji9a2jePWRncG5yVbEyCIZbntj3jtoN3G5lLwRpwW3Lb9WkgI51P3Ho BydfObcuWQj8LRxBuw9gI2DlqqQ6JsNE3bT8qLHfrF17j8khDn5IYQf5HvzPTUYaEpjW G+CumuaQKIQaJLRjhW4lm0brN7eOtgXnozLlTCPyouaZ0n8jDd6rTjMWvRVzhQDdBaEK u0ymroOukGRhq0iTXwaEJC2wBRR5LZct9oV7IDcDUXUiZ3zlBaWt8C3M01n3ayR/7svV iRsqjXrcJNfVgg/eBtl+iww+MPsvkWzK6AK2zMsy/fJSbNMriyUxubnNrI5jahTf40er EukA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:subject:from:cc:to :in-reply-to:content-language:user-agent:mime-version:date :message-id:dkim-signature; bh=7S+FEVatmyxfzv6iVztbucqvJz0EITDWICpCYpuxfvk=; b=beFccOn7Q7NAsGTYrV1/fWNLY881ZqxJLGdHNRPPf+v1AzO1AQcFkcY9FIyA1UZ3wJ heG6g5/AbnHn6kzeUeVdifDU1VwBrKX/ROWwoNBw8fhFFcuzu/HTV3fXzZ4noWa/OCPY CInRbxS5XcCzBvGXkgE64fD3Jx3kyqCuJCQL9+3a4suuWEdb3gxBcg35JH0nBj5+pku7 BQcMBbGs83kMwwiTpgq4OIZJiRB6LQV+VLoNYYRFXoIybVKciNMClV/xqiLE5eAvv333 3n48ZPLlWYewZuX7JNUHTA8re64eKgwKOw/S6i8WaowWZZ8sPH7PduRZlUWBvUKSkXFz XnHg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=IsAp98zz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s8-20020a17090302c800b0019cce1df447si280430plk.5.2023.03.09.12.45.56; Thu, 09 Mar 2023 12:46:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=IsAp98zz; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230107AbjCIUaO (ORCPT + 99 others); Thu, 9 Mar 2023 15:30:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230294AbjCIUaJ (ORCPT ); Thu, 9 Mar 2023 15:30:09 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 768A2F8665; Thu, 9 Mar 2023 12:30:05 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id C86765FD3A; Thu, 9 Mar 2023 23:30:03 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1678393803; bh=7S+FEVatmyxfzv6iVztbucqvJz0EITDWICpCYpuxfvk=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type; b=IsAp98zzR9YAzaB3tCd01ZJDaQF5BjfswpzyfTLDIJfApCQK2ojIMCcG9iZYWV8+h EsKsek2lywxioA6h5gidQqnfSyGNusHmr2nMt1zSUixdgkF4k1zrz/hzbcbZSdsmbu 1n091N7EkktU8FVZU7kcFzYPe3HVOILTbO8DKHbF5sZu+MKwAaMWfVjExKsKcCX53r 2Yvaf93Kqo8aYFPsqYRsb+9SnstdPf/cGlMZB/0jElgRhNrnuK1GRVjMz32LncoZL9 e/n0S/x6BpzgVhrmfS0moQIYmB8A3lbXzsqvWemzgS3OGgiDuyq/YDUHyMLcwp2tGD 2xmDzSXt62zVA== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Thu, 9 Mar 2023 23:30:03 +0300 (MSK) Message-ID: <6260a6cc-bd69-72a6-8aa5-34ff68764287@sberdevices.ru> Date: Thu, 9 Mar 2023 23:27:02 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US In-Reply-To: <1804d100-1652-d463-8627-da93cb61144e@sberdevices.ru> To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bobby Eshleman CC: , , , , , , From: Arseniy Krasnov Subject: [RFC PATCH v4 2/4] virtio/vsock: remove redundant 'skb_pull()' call X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH01.sberdevices.ru (172.16.1.4) To S-MS-EXCH01.sberdevices.ru (172.16.1.4) X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2023/03/09 18:14:00 #20929517 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759924472740859804?= X-GMAIL-MSGID: =?utf-8?q?1759924472740859804?= Since we now no longer use 'skb->len' to update credit, there is no sense to update skbuff state, because it is used only once after dequeue to copy data and then will be released. Fixes: 71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with sk_buff") Signed-off-by: Arseniy Krasnov Reviewed-by: Stefano Garzarella --- net/vmw_vsock/virtio_transport_common.c | 1 - 1 file changed, 1 deletion(-) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index 618680fd9906..9a411475e201 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -465,7 +465,6 @@ static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, dequeued_len = err; } else { user_buf_len -= bytes_to_copy; - skb_pull(skb, bytes_to_copy); } spin_lock_bh(&vvs->rx_lock); From patchwork Thu Mar 9 20:28:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 67094 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp509696wrd; Thu, 9 Mar 2023 12:46:55 -0800 (PST) X-Google-Smtp-Source: AK7set9UsAZJ0d7V5zQdLrhhuOn7DBcBUEpKr8yvQtqIx4Ps/dgn7oVclKxb17Aa3H7+5EOGSXME X-Received: by 2002:a05:6a20:6707:b0:cc:75b8:7cac with SMTP id q7-20020a056a20670700b000cc75b87cacmr21031381pzh.27.1678394815225; Thu, 09 Mar 2023 12:46:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678394815; cv=none; d=google.com; s=arc-20160816; b=e/Heprvf40H3H110qnbdOfHh4B8JTH/vWVGZPUgCPbX1zIs306xH0zdM2sURCoGFUl XLUT8+gbyeTXfkUPNQ0qw+z811Q4AJN+PBnmYqQEWOnWtOwHVqOTO+LQ+LlzYqyDsOfL 92k7HaWj9w4teWdph5z1755P0lBQZ+lvVdD2tiniq7YreHxwKRLDg4MvIZQfHud4jKxD oAnUvlJ6GyZlIQcmy7KjEoAYs2YQMUGGuDR9fz111jc9N3wTCTJvu2z8UP8pAmzTFZrm zglehPHACSXdLcw8ERPTDHaEiO8Sn2RgihQFFy+Ckpll59kwVN8AXaK5eikKNjjIaAKm 31rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:subject:from:cc:to :in-reply-to:content-language:user-agent:mime-version:date :message-id:dkim-signature; bh=hrrHq0NfzOnE5uXZKILc0Jws2vvk8qJw234H8bwXodk=; b=SiakeUHThU1i0TbNKIAsA7pHbl7fGEk2W+nh+AkRvyZ+t5QkQTLsQEpR10dHbQl+rn wUlu+XcVR4WNEJsErRWk88WVxWDX0J/CNSLKIThdgSGUGKtTi+hltgFR/LZaiXvYsQyB yWMgU4OBJmeO2k9DcMqhstbZ7Lp02MXrU0x+yYJlyECXfdUGg5R4PVg5RJP5C90fqWsj YFF90ivQ1RDdl/LBTRe7mMFPijG1GZpnI39737Q5+3E0ZEDrzpGW0j1qw/YpOyMn2BwO btqbUY1p2hHv0mA67EM3WSlI3KIXIFfp+oXTZY9JxetXr6F33glXuLhd5v4UM5IU9x/H 8nmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=YvfPj0e4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h1-20020aa796c1000000b00592d5c262aasi80042pfq.137.2023.03.09.12.46.41; Thu, 09 Mar 2023 12:46:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=YvfPj0e4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230434AbjCIUbX (ORCPT + 99 others); Thu, 9 Mar 2023 15:31:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34288 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230200AbjCIUbP (ORCPT ); Thu, 9 Mar 2023 15:31:15 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38097E7EDB; Thu, 9 Mar 2023 12:31:04 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 9AD935FD1B; Thu, 9 Mar 2023 23:31:02 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1678393862; bh=hrrHq0NfzOnE5uXZKILc0Jws2vvk8qJw234H8bwXodk=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type; b=YvfPj0e4oE+UIg9//74vqMtCIev3zaaowg2aczKnu/WuGmaJz5z7TT6QgLuKk7pqJ vFnA0QuL3lFoq846TRY3MIrPGtMkBxC6mcAwouCid69mNadd52GPX3ps1rIijsEmJU LCK0OKD2eJDgAuXz2MaHEshKd2hnm9QbwwPY8P9PoxZd6BOxm/2SZnRc4ZBEPwQZc3 TCaG8CxEwl388EdsdIPAzEoQjarReLoungeEvBIdWvPTRZQRaHlx1W0i885sk7ViyM 7Q4aew6TKDm/YXrAjypXdUUg5qXCN4tZsQFDgsYqf6PsNzZpNf0pKsAo9evMaimEia 5o0JKmnDhziIA== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Thu, 9 Mar 2023 23:31:02 +0300 (MSK) Message-ID: Date: Thu, 9 Mar 2023 23:28:01 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US In-Reply-To: <1804d100-1652-d463-8627-da93cb61144e@sberdevices.ru> To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bobby Eshleman CC: , , , , , , From: Arseniy Krasnov Subject: [RFC PATCH v4 3/4] virtio/vsock: don't drop skbuff on copy failure X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH01.sberdevices.ru (172.16.1.4) To S-MS-EXCH01.sberdevices.ru (172.16.1.4) X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2023/03/09 18:14:00 #20929517 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759924521944401192?= X-GMAIL-MSGID: =?utf-8?q?1759924521944401192?= This returns behaviour of SOCK_STREAM read as before skbuff usage. When copying to user fails current skbuff won't be dropped, but returned to sockets's queue. Technically instead of 'skb_dequeue()', 'skb_peek()' is called and when skbuff becomes empty, it is removed from queue by '__skb_unlink()'. Fixes: 71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with sk_buff") Signed-off-by: Arseniy Krasnov Reviewed-by: Stefano Garzarella --- net/vmw_vsock/virtio_transport_common.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index 9a411475e201..6564192e7f20 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -364,7 +364,7 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, spin_lock_bh(&vvs->rx_lock); while (total < len && !skb_queue_empty(&vvs->rx_queue)) { - skb = __skb_dequeue(&vvs->rx_queue); + skb = skb_peek(&vvs->rx_queue); bytes = len - total; if (bytes > skb->len) @@ -388,9 +388,8 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, u32 pkt_len = le32_to_cpu(virtio_vsock_hdr(skb)->len); virtio_transport_dec_rx_pkt(vvs, pkt_len); + __skb_unlink(skb, &vvs->rx_queue); consume_skb(skb); - } else { - __skb_queue_head(&vvs->rx_queue, skb); } } From patchwork Thu Mar 9 20:29:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 67090 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp505844wrd; Thu, 9 Mar 2023 12:37:32 -0800 (PST) X-Google-Smtp-Source: AK7set/uoJMfcwHyMyABoF5Qn2OPlGaLnS5+ienpxFwjJav4tTdip7akBEYiM7JsP/7oeDxVKmPT X-Received: by 2002:a17:902:c40d:b0:19c:d18d:950c with SMTP id k13-20020a170902c40d00b0019cd18d950cmr27728540plk.32.1678394252359; Thu, 09 Mar 2023 12:37:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678394252; cv=none; d=google.com; s=arc-20160816; b=pMbxEAIeaof/oTcFdSc8mBO162Lj08K635qUPSS85anGmVQRtAjBnWZNFc0Sm87vS+ uO2jZ/etst+Vfp4ED+92YjvhjUhgn4wNFJYG2AXXCd0Kofbk+6ZPzq4c2hBJThXBQfKf 4F8OjSYjFMfhVZdULYJs71uhE56JFUICOj4RhPR4LHc3EE2Oym0v02TO2P+QvY0heuy1 HaQUfi1XJuKXpK/SJ4dnOUsCUzXS1Yr7CVteJElfTwdkZy/EwOvYJDgxwmd9z8TvMP+2 S8L0azNpKR7Xs/Rc5XrR0qC6+e2amMJwJ8HmWoIvDr1MDB2+nvmKt0I4sdVNiv9DOYkH r/9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:subject:from:cc:to :in-reply-to:content-language:user-agent:mime-version:date :message-id:dkim-signature; bh=DzVarEVGLOGPMv/nEn7ynZtKJOLMh7bPhpvVeCziZKc=; b=Co5x3x4I8cyjep12mYQIvh1HEZ+U7AXvIuoCW2Jje2WuLQ4V5rJU/wtm5GgpqUeXm+ O99jBFx+y6UFEwYKt4F7rFIWzv8/5MES5EfYq5243IN5dJPHrHwVBXwd2S0n3Qc+IAU5 F34SGxJ8zIsbVb4Dt8ujiF4rb+BGIrdnI4QdVAIOfBEWD62r79do6BLDX+ASoL/mOLGO rHwzGzKPp+AoBX+GkNmpCutbFXMTQKCE6/HlopsPIHWns6tF3FZ113Puwd0NxJpfZgJY ZH1pnXYfxTm9AZJqniAcUvZ9mximfB3o8FA6g91OgpZcqtAL5RArNuBJnjNpK71Q2qv1 dRkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=Kgbz3fWX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kj5-20020a17090306c500b0019ced5a540csi188186plb.370.2023.03.09.12.37.17; Thu, 09 Mar 2023 12:37:32 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=Kgbz3fWX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230449AbjCIUce (ORCPT + 99 others); Thu, 9 Mar 2023 15:32:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229453AbjCIUcb (ORCPT ); Thu, 9 Mar 2023 15:32:31 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8AA0BF8662; Thu, 9 Mar 2023 12:32:29 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id EF88E5FD1B; Thu, 9 Mar 2023 23:32:27 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1678393948; bh=DzVarEVGLOGPMv/nEn7ynZtKJOLMh7bPhpvVeCziZKc=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type; b=Kgbz3fWXoyBscpDzEfSS/We+NAPlK0tAD1rnGNlNzdcamRRbY0kSgyLjbPvsrfxK2 DnaAkPZ7cSnm+Yxg1MrVPZTmpyW+gXjlGnhOYYMIbc/cMoSJqEvN0Ew55Fm/uFTDa4 31O/HRGNS8XpekXO2Uc+9Bm5sEcj2iHilq6iHI1hfrkbmThpkUcLYbpHq+UnyEznC4 5xbanPeggE34pRadVBab3U+mmb7w+/kGkHKDvkjg0fjCv0QBqbUS2x3gQ/NY7gkt6L rO1XmBqM+XWkn2wRrbuVIdE7AqL6McROAL0CaflhIRu6i+Bip3I+etGjXKdRH77rvB HNUybPT0voYOQ== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Thu, 9 Mar 2023 23:32:27 +0300 (MSK) Message-ID: Date: Thu, 9 Mar 2023 23:29:26 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Content-Language: en-US In-Reply-To: <1804d100-1652-d463-8627-da93cb61144e@sberdevices.ru> To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bobby Eshleman CC: , , , , , , From: Arseniy Krasnov Subject: [RFC PATCH v4 4/4] test/vsock: copy to user failure test X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH01.sberdevices.ru (172.16.1.4) To S-MS-EXCH01.sberdevices.ru (172.16.1.4) X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2023/03/09 18:14:00 #20929517 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759923931729915776?= X-GMAIL-MSGID: =?utf-8?q?1759923931729915776?= This adds SOCK_STREAM and SOCK_SEQPACKET tests for invalid buffer case. It tries to read data to NULL buffer (data already presents in socket's queue), then uses valid buffer. For SOCK_STREAM second read must return data, because skbuff is not dropped, but for SOCK_SEQPACKET skbuff will be dropped by kernel, and 'recv()' will return EAGAIN. Reviewed-by: Stefano Garzarella Signed-off-by: Arseniy Krasnov --- tools/testing/vsock/vsock_test.c | 118 +++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c index 67e9f9df3a8c..3de10dbb50f5 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -860,6 +860,114 @@ static void test_stream_poll_rcvlowat_client(const struct test_opts *opts) close(fd); } +#define INV_BUF_TEST_DATA_LEN 512 + +static void test_inv_buf_client(const struct test_opts *opts, bool stream) +{ + unsigned char data[INV_BUF_TEST_DATA_LEN] = {0}; + ssize_t ret; + int fd; + + if (stream) + fd = vsock_stream_connect(opts->peer_cid, 1234); + else + fd = vsock_seqpacket_connect(opts->peer_cid, 1234); + + if (fd < 0) { + perror("connect"); + exit(EXIT_FAILURE); + } + + control_expectln("SENDDONE"); + + /* Use invalid buffer here. */ + ret = recv(fd, NULL, sizeof(data), 0); + if (ret != -1) { + fprintf(stderr, "expected recv(2) failure, got %zi\n", ret); + exit(EXIT_FAILURE); + } + + if (errno != ENOMEM) { + fprintf(stderr, "unexpected recv(2) errno %d\n", errno); + exit(EXIT_FAILURE); + } + + ret = recv(fd, data, sizeof(data), MSG_DONTWAIT); + + if (stream) { + /* For SOCK_STREAM we must continue reading. */ + if (ret != sizeof(data)) { + fprintf(stderr, "expected recv(2) success, got %zi\n", ret); + exit(EXIT_FAILURE); + } + /* Don't check errno in case of success. */ + } else { + /* For SOCK_SEQPACKET socket's queue must be empty. */ + if (ret != -1) { + fprintf(stderr, "expected recv(2) failure, got %zi\n", ret); + exit(EXIT_FAILURE); + } + + if (errno != EAGAIN) { + fprintf(stderr, "unexpected recv(2) errno %d\n", errno); + exit(EXIT_FAILURE); + } + } + + control_writeln("DONE"); + + close(fd); +} + +static void test_inv_buf_server(const struct test_opts *opts, bool stream) +{ + unsigned char data[INV_BUF_TEST_DATA_LEN] = {0}; + ssize_t res; + int fd; + + if (stream) + fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); + else + fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); + + if (fd < 0) { + perror("accept"); + exit(EXIT_FAILURE); + } + + res = send(fd, data, sizeof(data), 0); + if (res != sizeof(data)) { + fprintf(stderr, "unexpected send(2) result %zi\n", res); + exit(EXIT_FAILURE); + } + + control_writeln("SENDDONE"); + + control_expectln("DONE"); + + close(fd); +} + +static void test_stream_inv_buf_client(const struct test_opts *opts) +{ + test_inv_buf_client(opts, true); +} + +static void test_stream_inv_buf_server(const struct test_opts *opts) +{ + test_inv_buf_server(opts, true); +} + +static void test_seqpacket_inv_buf_client(const struct test_opts *opts) +{ + test_inv_buf_client(opts, false); +} + +static void test_seqpacket_inv_buf_server(const struct test_opts *opts) +{ + test_inv_buf_server(opts, false); +} + static struct test_case test_cases[] = { { .name = "SOCK_STREAM connection reset", @@ -920,6 +1028,16 @@ static struct test_case test_cases[] = { .run_client = test_seqpacket_bigmsg_client, .run_server = test_seqpacket_bigmsg_server, }, + { + .name = "SOCK_STREAM test invalid buffer", + .run_client = test_stream_inv_buf_client, + .run_server = test_stream_inv_buf_server, + }, + { + .name = "SOCK_SEQPACKET test invalid buffer", + .run_client = test_seqpacket_inv_buf_client, + .run_server = test_seqpacket_inv_buf_server, + }, {}, };