From patchwork Tue Mar 28 11:31:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 76018 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2153651vqo; Tue, 28 Mar 2023 04:53:57 -0700 (PDT) X-Google-Smtp-Source: AKy350brGSosQtmhkvfTdnlANa2+Jy3NtsKt6DBikg0LOtM1toJk/eJGKcqowKayXqJ+2OkMSZd+ X-Received: by 2002:a17:907:2175:b0:920:7a99:dcd4 with SMTP id rl21-20020a170907217500b009207a99dcd4mr15747519ejb.62.1680004436850; Tue, 28 Mar 2023 04:53:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680004436; cv=none; d=google.com; s=arc-20160816; b=zI09p3RC3I8JfqbiD4cVYQfyg8W2/KBHDIFvaK5rtFFXJRG/VpE24BNk4DzY+mo1n8 pny+WerXzWttbzWq1kcvcW4LnkTxXd4vsp4klhm3+wY3ILk0zL2+oVBYKK/09RxkMd9z GepE8jDwThhQnHOhBFYZGpPGAMJ2sAlPWe1Ye6HZRUdj+O3rGpcrMVM9nGDZ1Pe+c+zy r+EzzmaXfxGYBCUNOXkLocHQaS/JeBO5KhMvAscgZZwjaQG8C6TUDxFTRSdwuaIm2GMM gLSjMTgFnyZqnXn2RIxFZhIjlgYikflMY/6LgocA4N6W3s8jtL2iud2iLRXzYy+FRX7S BC/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:subject:from:cc:to :in-reply-to:content-language:user-agent:mime-version:date :message-id:dkim-signature; bh=njThAgJ0APChbsy6LUtd1QrIVKwwvn+F93D+MWgxsAU=; b=gmaLeHbpfMvWYc5+Yitn4NMhXw9cSdYkzFPfOYDEK5JhfAeT02PnR2CL7AtqTUyjyC R7Sd+1xYYiaE11nwVadJK5XmFRUmHNRcU566/2K+JawPPt7OTTh9Y29PgYdH/K1uHhEM kWj2PkZUJb00GZPnbALUVdtZ9Pjy85D00+EzexQduefBr9elotc+VjrYfvsgOdu3aInQ O/djjLqEJ+BesLXz217JXbiP1a90S/dQ7aGGRggqpVY07ipsrGKwc60IAnjh1WMfIIfk 2EzEWyzHmYoAmzCcjnCVuVxef7itBovxuwP3S3tzJo9bsVVPZtN0Uvk23YIzvKpIH2np clhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=JpA1Gfxl; 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 n8-20020a170906b30800b0093182033b89si29989606ejz.711.2023.03.28.04.53.33; Tue, 28 Mar 2023 04:53:56 -0700 (PDT) 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=JpA1Gfxl; 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 S232476AbjC1LfB (ORCPT + 99 others); Tue, 28 Mar 2023 07:35:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230340AbjC1Lew (ORCPT ); Tue, 28 Mar 2023 07:34:52 -0400 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A9B65FFD; Tue, 28 Mar 2023 04:34:51 -0700 (PDT) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 9B04A5FD14; Tue, 28 Mar 2023 14:34:49 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1680003289; bh=njThAgJ0APChbsy6LUtd1QrIVKwwvn+F93D+MWgxsAU=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type; b=JpA1GfxlBQOq/krden97+glI/+SvnxW6q2Z8PejvYXuXjbaoNZ+FqOjQdLvZpPua/ 8AeJPFalW700PxisrIvXV9BeZ0hatw65ZlE+BZIPx2wo27QTEippqpTZ630AxR1fjG Tz0mYq3Kq+WIQ6G3zx1OzToZqXrgT1qWoA/QGXbCEw3gHnYj1/H8TdRN5LpR/CwTr8 tYe5W92FxHDDGdSbe9HA1by5REndUuyF/R5Be4BnWXvga2kSoT6oJS5yGSz/IGMhx2 d21RMM5UH2KvhgXayshkKkuh15sU5g1eVRChsK7H7fQClJ/ehRN2wk8MFPk6dTEFMX 2OHgbPrEbZ2UA== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Tue, 28 Mar 2023 14:34:48 +0300 (MSK) Message-ID: Date: Tue, 28 Mar 2023 14:31:28 +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: <0683cc6e-5130-484c-1105-ef2eb792d355@sberdevices.ru> To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bobby Eshleman CC: , , , , , , From: Arseniy Krasnov Subject: [PATCH net v2 1/3] virtio/vsock: fix header length on skb merging X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH02.sberdevices.ru (172.16.1.5) 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/28 06:38:00 #21021220 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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?1761612332387254010?= X-GMAIL-MSGID: =?utf-8?q?1761612332387254010?= This fixes appending newly arrived skbuff to the last skbuff of the socket's queue. Problem fires when we are trying to append data to skbuff which was already processed in dequeue callback at least once. Dequeue callback calls function 'skb_pull()' which changes 'skb->len'. In current implementation 'skb->len' is used to update length in header of the last skbuff after new data was copied to it. This is bug, because value in header is used to calculate 'rx_bytes'/'fwd_cnt' and thus must be not be changed during skbuff's lifetime. Bug starts to fire since: commit 077706165717 ("virtio/vsock: don't use skbuff state to account credit") It presents before, but didn't triggered due to a little bit buggy implementation of credit calculation logic. So use Fixes tag for it. Fixes: 077706165717 ("virtio/vsock: don't use skbuff state to account credit") Signed-off-by: Arseniy Krasnov Reviewed-by: Stefano Garzarella --- net/vmw_vsock/virtio_transport_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index 7fc178c3ee07..b9144af71553 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -1101,7 +1101,7 @@ virtio_transport_recv_enqueue(struct vsock_sock *vsk, memcpy(skb_put(last_skb, skb->len), skb->data, skb->len); free_pkt = true; last_hdr->flags |= hdr->flags; - last_hdr->len = cpu_to_le32(last_skb->len); + le32_add_cpu(&last_hdr->len, len); goto out; } } From patchwork Tue Mar 28 11:32:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 76015 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2152535vqo; Tue, 28 Mar 2023 04:51:32 -0700 (PDT) X-Google-Smtp-Source: AKy350acRpDkM7j0zCm3kIMQPyBD9mW8eH6AAT+2SHijqNWCYH/5fuGfdV9j438mRpgU4rz/TXAy X-Received: by 2002:a17:906:6897:b0:931:75f5:36db with SMTP id n23-20020a170906689700b0093175f536dbmr15428390ejr.11.1680004292210; Tue, 28 Mar 2023 04:51:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680004292; cv=none; d=google.com; s=arc-20160816; b=VyMPa/czP9f6Uxl80eqt0wjr73elQK+EEoK2qPwp/c76+BwU098dY99pDngdKkasDo 8+lUO+KSZLGcNYYnSJDDk9krqXAiKICwgRiFy4JWPvanXlPyECrT4Mt/ZAN09uu5/PtT lVNSRxthIJNO2m54Zeai3mP5JaFq/ZFxXs0hiT5zcY6QfIN06BaIX4t96ihv6xfby/MH RJbcaSsfZQQgdhxPSgt64nn8Tumtvz+5RU/T+IY7Dc+eLMfKzS8dK5mfil6aTf9nFy3u rvVePDlUmmBay+6Gq9ygt9z0mM26YsH4Ae+6yDOrZZi8XWVSXmmGj9YyUzVrKBFt7Mci kNKg== 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=HBjatGeLTuJZ9m4w/f+ZHR2uNtEPcvhrqsXeGQRsL30=; b=SmZBAeGYT09mRdwCUK5nABssUF+woKLMmOGoggpvMEbjF14s/PzXKnUxZIJ0EQfIw3 bDYRSsGmw7spWvbbl0QuU36s4QjqjLRZ3czodELS4tT9yX4BlJtwmOZCCHcE8jN5qElX 2zDDAfOoPB6yk/+EPl2OHOUYK/s+MxxWYQulRXwuJxa9i/sV443wRd4PjGrLoCk4CU4w y7tCa0FarphuaOlLmrpnANVkVIOCayUuG0Zqpi992yU8oC6czuytb/L8urJtbaT6soyV DLzKX/p9D080dAe3R/y6csboBn6ikSEOUZx0IyaqsPWpHx6KS7cCzzyw8uuYvrdKeOJP 1/ng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=gtIBtkfk; 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 n16-20020a170906b31000b009267d6857ebsi29206677ejz.952.2023.03.28.04.51.08; Tue, 28 Mar 2023 04:51:32 -0700 (PDT) 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=gtIBtkfk; 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 S232616AbjC1Lfl (ORCPT + 99 others); Tue, 28 Mar 2023 07:35:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232440AbjC1Lfg (ORCPT ); Tue, 28 Mar 2023 07:35:36 -0400 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13A0C5BA1; Tue, 28 Mar 2023 04:35:35 -0700 (PDT) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 4FE0E5FD14; Tue, 28 Mar 2023 14:35:33 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1680003333; bh=HBjatGeLTuJZ9m4w/f+ZHR2uNtEPcvhrqsXeGQRsL30=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type; b=gtIBtkfkERNGerXXRbbTAqZ07ObmuEwH4pkfmkRmcQUe9r7bymmH8i290LvCQfC3E WDgAOj40A/aYAm1m9f09++6resANwCjFfx8E5P0mAZJ7JMEsIxC8YKqUqVLSTYKi11 YJYajCRtLcs9AxAeofwcOdykooFD1dohASpSsj34EJlaJ9SeXD9C31BbLH/j1hDwRw kd77rWzl0oBLC0zP2nSYeDt1zJgqft23Bt1zLcUPHONqBFutJ2uvIWYEJcJU0QLxp7 muc2B69lkS/tEPL7Msi66cEhL0NFrThYDnE4Tc+QlhpSWtdsbsSiB4UobN1ixpZOTr XnKtA7OpN7C2Q== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Tue, 28 Mar 2023 14:35:33 +0300 (MSK) Message-ID: <40393903-1414-5188-4fae-ccaad0f2fe72@sberdevices.ru> Date: Tue, 28 Mar 2023 14:32:12 +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: <0683cc6e-5130-484c-1105-ef2eb792d355@sberdevices.ru> To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bobby Eshleman CC: , , , , , , From: Arseniy Krasnov Subject: [PATCH net v2 2/3] virtio/vsock: WARN_ONCE() for invalid state of socket 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/28 06:38:00 #21021220 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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?1761612181002625875?= X-GMAIL-MSGID: =?utf-8?q?1761612181002625875?= This adds WARN_ONCE() and return from stream dequeue callback when socket's queue is empty, but 'rx_bytes' still non-zero. This allows the detection of potential bugs due to packet merging (see previous patch). Signed-off-by: Arseniy Krasnov Reviewed-by: Stefano Garzarella --- net/vmw_vsock/virtio_transport_common.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index b9144af71553..f0187659289f 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -398,6 +398,13 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, u32 free_space; spin_lock_bh(&vvs->rx_lock); + + if (WARN_ONCE(skb_queue_empty(&vvs->rx_queue) && vvs->rx_bytes, + "rx_queue is empty, but rx_bytes is non-zero\n")) { + spin_unlock_bh(&vvs->rx_lock); + return err; + } + while (total < len && !skb_queue_empty(&vvs->rx_queue)) { skb = skb_peek(&vvs->rx_queue); From patchwork Tue Mar 28 11:33:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 76022 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp2161846vqo; Tue, 28 Mar 2023 05:06:08 -0700 (PDT) X-Google-Smtp-Source: AKy350bwp1M1TIxyKjpvyJ4Q+YisRosthsfmLOq9yMQlgs9Wl61YA0cz6prMzX/6vZAPayfdG0iI X-Received: by 2002:a62:3855:0:b0:627:e6a2:a85b with SMTP id f82-20020a623855000000b00627e6a2a85bmr13978288pfa.2.1680005168477; Tue, 28 Mar 2023 05:06:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680005168; cv=none; d=google.com; s=arc-20160816; b=Z5RJt8ux0HeN8v8f31rVi9WdH3JKXa9jLE1YtD2bwJbgICDRaVD/vlTXG1zJRkKE2N mHmf9TcYzGvVl56haRL+hsYWmqbAuVYL2rkUbdfV3e/WB06MSIhtfryXLFFPx2rdU+an axk0rQWxh3OjxgZfnnmTYQfmgNcj7mXXmMSG2n3aR+lrtazr6qhDqV/rMCtji2R+EZVR CvsOqpPfvI2yMhuAyVgF9/o20SOKl+BVqHyweLC5F62Mvt1lV+Jul4ZxG2w/ZmJhj+X3 FmUMIw7DTM+PWRkheLF0RzEd29NrX9n8ET/3tx5Jz4T3nTdk4Y90krxPhzD/ymISnbjV ZLrQ== 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=Y8nntKCoo+n61PM/8lM1Pimdv3DPve4+/I2dLAhzNuU=; b=uHRw9wkPwK3LwIqzg0ENhesM/EnCiCZgvelb12j1wsuTQcf+Q4hTISXMmvCuobbeoK 8Y6Bd3+j2slS0g7+EdsMfiBcUWxWC1iJNQVvREdtV56H5nhr9dVmvSWUxGBaPxvZYF8D 9tS1ffiJ8aEX05XC4DcJFie4vgvk9It0SiL6+QT2uZhINzVFrNR19Dp9BFN2rYWHny5k 7ox8LrioCdmTasp/LlgfHBF7FbNkGrng+kubdo5UrMPGHwxB+v1i0vA+Zb9/pn9c0Lj8 WjMv1f002Q66yMFM7EZb81an26kxy4yAqDHbIFIjaFQcnCJu3lRDk3761S0XjKKvOa0r GMpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=TVHnStf6; 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 s14-20020a63ff4e000000b0050aad8e18a5si29567004pgk.545.2023.03.28.05.05.55; Tue, 28 Mar 2023 05:06:08 -0700 (PDT) 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=TVHnStf6; 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 S230301AbjC1Lgd (ORCPT + 99 others); Tue, 28 Mar 2023 07:36:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58904 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230103AbjC1Lgc (ORCPT ); Tue, 28 Mar 2023 07:36:32 -0400 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 95A7959E9; Tue, 28 Mar 2023 04:36:30 -0700 (PDT) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id C87825FD14; Tue, 28 Mar 2023 14:36:28 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1680003388; bh=Y8nntKCoo+n61PM/8lM1Pimdv3DPve4+/I2dLAhzNuU=; h=Message-ID:Date:MIME-Version:To:From:Subject:Content-Type; b=TVHnStf6myFchlia37InfF8F2J5RP/rNzHTcFe/Hm+P2DLzW2SPzvbOfgmHjpARAS yWzhn+Uj65RvkMRZZutEJF+EzNxIulyVE6pfhxMBGwpvkLgzj9jBPnH9EDPTi+actR XaXADzxkzemEIIAnohlv6MKEQ9UY8F/A2ISOn88iIXZw3RRMSej0k4G3DKfNc4/gP6 qDbR28D4vT3kmAWOvCN1hPsBIzu/qeM1k+ayigGSElBDEVTzuMIFdO1hDZgLLKpfe0 pShhRs1NomyV6KQJKCtxvsuJPbMFYit/scWawvD+IulzUyojjBOLZ/350644jcAFGg AQon4g+3PuQLg== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Tue, 28 Mar 2023 14:36:28 +0300 (MSK) Message-ID: <1e85f2b9-b958-0252-041d-6c48e04d9a19@sberdevices.ru> Date: Tue, 28 Mar 2023 14:33:07 +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: <0683cc6e-5130-484c-1105-ef2eb792d355@sberdevices.ru> To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Bobby Eshleman CC: , , , , , , From: Arseniy Krasnov Subject: [PATCH net v2 3/3] test/vsock: new skbuff appending test X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH02.sberdevices.ru (172.16.1.5) 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/28 06:38:00 #21021220 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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?1761613099303509622?= X-GMAIL-MSGID: =?utf-8?q?1761613099303509622?= This adds test which checks case when data of newly received skbuff is appended to the last skbuff in the socket's queue. It looks like simple test with 'send()' and 'recv()', but internally it triggers logic which appends one received skbuff to another. Test checks that this feature works correctly. This test is actual only for virtio transport. Signed-off-by: Arseniy Krasnov Reviewed-by: Stefano Garzarella --- tools/testing/vsock/vsock_test.c | 90 ++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c index 3de10dbb50f5..12b97c92fbb2 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -968,6 +968,91 @@ static void test_seqpacket_inv_buf_server(const struct test_opts *opts) test_inv_buf_server(opts, false); } +#define HELLO_STR "HELLO" +#define WORLD_STR "WORLD" + +static void test_stream_virtio_skb_merge_client(const struct test_opts *opts) +{ + ssize_t res; + int fd; + + fd = vsock_stream_connect(opts->peer_cid, 1234); + if (fd < 0) { + perror("connect"); + exit(EXIT_FAILURE); + } + + /* Send first skbuff. */ + res = send(fd, HELLO_STR, strlen(HELLO_STR), 0); + if (res != strlen(HELLO_STR)) { + fprintf(stderr, "unexpected send(2) result %zi\n", res); + exit(EXIT_FAILURE); + } + + control_writeln("SEND0"); + /* Peer reads part of first skbuff. */ + control_expectln("REPLY0"); + + /* Send second skbuff, it will be appended to the first. */ + res = send(fd, WORLD_STR, strlen(WORLD_STR), 0); + if (res != strlen(WORLD_STR)) { + fprintf(stderr, "unexpected send(2) result %zi\n", res); + exit(EXIT_FAILURE); + } + + control_writeln("SEND1"); + /* Peer reads merged skbuff packet. */ + control_expectln("REPLY1"); + + close(fd); +} + +static void test_stream_virtio_skb_merge_server(const struct test_opts *opts) +{ + unsigned char buf[64]; + ssize_t res; + int fd; + + fd = vsock_stream_accept(VMADDR_CID_ANY, 1234, NULL); + if (fd < 0) { + perror("accept"); + exit(EXIT_FAILURE); + } + + control_expectln("SEND0"); + + /* Read skbuff partially. */ + res = recv(fd, buf, 2, 0); + if (res != 2) { + fprintf(stderr, "expected recv(2) returns 2 bytes, got %zi\n", res); + exit(EXIT_FAILURE); + } + + control_writeln("REPLY0"); + control_expectln("SEND1"); + + res = recv(fd, buf + 2, sizeof(buf) - 2, 0); + if (res != 8) { + fprintf(stderr, "expected recv(2) returns 8 bytes, got %zi\n", res); + exit(EXIT_FAILURE); + } + + res = recv(fd, buf, sizeof(buf) - 8 - 2, MSG_DONTWAIT); + if (res != -1) { + fprintf(stderr, "expected recv(2) failure, got %zi\n", res); + exit(EXIT_FAILURE); + } + + if (memcmp(buf, HELLO_STR WORLD_STR, strlen(HELLO_STR WORLD_STR))) { + fprintf(stderr, "pattern mismatch\n"); + exit(EXIT_FAILURE); + } + + control_writeln("REPLY1"); + + close(fd); +} + static struct test_case test_cases[] = { { .name = "SOCK_STREAM connection reset", @@ -1038,6 +1123,11 @@ static struct test_case test_cases[] = { .run_client = test_seqpacket_inv_buf_client, .run_server = test_seqpacket_inv_buf_server, }, + { + .name = "SOCK_STREAM virtio skb merge", + .run_client = test_stream_virtio_skb_merge_client, + .run_server = test_stream_virtio_skb_merge_server, + }, {}, };