From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB36E31195B for ; Fri, 9 Jan 2026 16:32:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767976359; cv=none; b=NqNLzHzA9r2KZlmtvtjyHMcnPpyRz03Opj3wRdrv26QI9TV0rbKQIQZh5dssTvyV+4LSa3XggxKgVzf2mewmxbnGLav1rZiZaalMpZXCN1//iJJ8WCzsO8dnbr3TLez1kjjujuLWoNkpRwAdfJ6ETkTAXty7FSRek/XdhgNOgX4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767976359; c=relaxed/simple; bh=AhO0W3QqPyvRX+DZ7rtuWNPWm1Y+nD8N2kgT7qXsPh8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=HbQuukeiD3BM+hVJ5G4zHdJQ1V7ztF48//C3cqXtfGpCaZ9xrsfLSP+5xq5s2aRpbgw/oQpeqjSBVP6GmRIlXNLFBtL66v8aV8WBPuT1yg9rInZbO2b+1lvzsfnTC8QWBfixG9nfkq+XYJUmMLAOY1LEmUru0t+7RaaPVj55wO4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=UenxCe//; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=AKJoPHBx; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="UenxCe//"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="AKJoPHBx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1767976356; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=dEreNKulSbEm1+LE8N+VyJH3RewoJdVfa+9kn/ikLWM=; b=UenxCe//1c7fPa3OzQ3G48dlzxO9aoRW4WoPoDk0LIbSzCMslQRsSGm82MFPV6ulwEFg+F dJ7zlzE0yd0jE8MLXCriO+TqrSqhblxvGwxLihM1HuihuNxmq22r9rWa6WQfPnHi35aumB NWfBxgui+8ClwLW7/IRjJi5k8xUc5xk= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-428-qcyzw5NaMRWfW4HXvAX4Lw-1; Fri, 09 Jan 2026 11:32:33 -0500 X-MC-Unique: qcyzw5NaMRWfW4HXvAX4Lw-1 X-Mimecast-MFC-AGG-ID: qcyzw5NaMRWfW4HXvAX4Lw_1767976352 Received: by mail-ed1-f72.google.com with SMTP id 4fb4d7f45d1cf-64b9ccc9661so4522425a12.1 for ; Fri, 09 Jan 2026 08:32:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1767976352; x=1768581152; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=dEreNKulSbEm1+LE8N+VyJH3RewoJdVfa+9kn/ikLWM=; b=AKJoPHBxlTFLeVzJZU/RFVZsmxKhO1q3Air6ttgS9Mam1kM9gsmyORvTdU/o+BRW8P XRcgNRt2dPU5ppklSwa4FYZNklyLSVkbX7htPykKY6ci6Pp9ZqPH5GsDoswYE1h5m6GS KJ7VS401Eh4zW/+bRiAxgfhSQDQnKVnwkNAdXv35itLit2TkYmzN/js1HJfDFLycuLfa k4AeTV4dfLBr08u54zKFi/PsAE79XyzDym0wMAZ9O0aM6ypmzQR1JcHtyjdrmcwqjoZC 64LhFKNz1e8+NK0jup+JNM23smjEN2fpQ+K+u/n16Pgepfj9PVapouyr/zIHjQpkTxnt 1Ywg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767976352; x=1768581152; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dEreNKulSbEm1+LE8N+VyJH3RewoJdVfa+9kn/ikLWM=; b=r+lsG68y8c1C2M+KcE23zHBd/DGIOeEZjKb9Q/uVmLB8+O5dcYyd3WHgT/zZO/oAjd qC7xEAuoinCBBF6chhNBXEYGSQADPDirtBd2xG7Mdm0iumd5mJSatIMNP2PmXjP8Vt3m JkGFkzUd7/py6GOV5N63LleKJHurmvkzMnkzcLaTXxhWzSAOAc58CMQv8EvgPFW8MRQt zwZ34GEOGHidRiRXNoxCEfIwSTpoMlKXfmWnLmQnRd4nLOA9ljDTXkhhAofaNZb79OTn TCJ6XLMfNAs6uPOsAcFhxmV7l9BM4YgROvplfT6QAjjW0wLA4Mox0CWUA8uk09Q790yA LQzg== X-Forwarded-Encrypted: i=1; AJvYcCW/7B4FhaDVd6dsd7BhO7AnJ0za0FgKFcRXz1i0tpkXl2G6zpu9BwXwq3XgV3oZ068GhudGmGjrKST9qMc=@vger.kernel.org X-Gm-Message-State: AOJu0YwCdBHJ8T49PLDm2yc1r+Pa1V6HoE7p9ztkETXfHxQGk2ewo5RT qv8P9Jz4+QpejFsJ6bPUxOrk5wIf9OkJkedd3O3Sr3jqzyGyK83GixIw+Hxk+pkX9v+PWujyEIY nY3+9OO1Nu5n9SuElqnycCC2JNeURHuW63YkirQzGQL8zujwvA/H0RqzR6/A4DEWZCQ== X-Gm-Gg: AY/fxX6oGmShGiixtHNeYVaOVfhOMwTpt+gYRzu/FC0Jv2ZEejCFgXRlPuwnBfhJSWF QeRZGNb5uTK1LVvjDGvv00WVIsH2yg8xCzLQBRD+J0vOWJlXecp8L2AetSj7IpuzAe+oYaDNftG Hb7+vSLtDs3ISGzq5BrHO2ZBJ4yAK7HKvpdJWXlKe1/pf2sbMa0GUYD/rbFbgTB9vfRFMWAuRtc sQM80gLVKHu+5l7VgJkMM4QigV14UQBrwBDNbfffjdmxLBK3d+jeJP0ilUb3eRMcCYFVS9vZxG2 2Oxv2c1af7yk9QshwuGd+CYEMDaq95pqPHNSlBsW4jdwP86ro2QNB9tTPWcQFUVBo7lgP1moUlD ykNDCrbTq/DSea7U= X-Received: by 2002:a05:6402:5214:b0:649:afbf:ce4c with SMTP id 4fb4d7f45d1cf-65097dd19d0mr10206797a12.3.1767976351961; Fri, 09 Jan 2026 08:32:31 -0800 (PST) X-Google-Smtp-Source: AGHT+IEh9F6wrxt+tH3YONGJ8MMPHym5YuR5cSOU8k+Xh+56gOqWbHHpSyrYloIioAY7C+cjecCrrw== X-Received: by 2002:a05:6402:5214:b0:649:afbf:ce4c with SMTP id 4fb4d7f45d1cf-65097dd19d0mr10206768a12.3.1767976351430; Fri, 09 Jan 2026 08:32:31 -0800 (PST) Received: from sgarzare-redhat ([193.207.176.59]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6507b9d4c0asm10815163a12.9.2026.01.09.08.32.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Jan 2026 08:32:30 -0800 (PST) Date: Fri, 9 Jan 2026 17:32:22 +0100 From: Stefano Garzarella To: Michal Luczaj Cc: "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , Eugenio =?utf-8?B?UMOpcmV6?= , Stefan Hajnoczi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Arseniy Krasnov , kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] vsock/test: Add test for a linear and non-linear skb getting coalesced Message-ID: References: <20260108-vsock-recv-coalescence-v1-0-26f97bb9a99b@rbox.co> <20260108-vsock-recv-coalescence-v1-2-26f97bb9a99b@rbox.co> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20260108-vsock-recv-coalescence-v1-2-26f97bb9a99b@rbox.co> On Thu, Jan 08, 2026 at 10:54:55AM +0100, Michal Luczaj wrote: >Loopback transport can mangle data in rx queue when a linear skb is >followed by a small MSG_ZEROCOPY packet. Can we describe a bit more what the test is doing? > >Signed-off-by: Michal Luczaj >--- > tools/testing/vsock/vsock_test.c | 5 +++ > tools/testing/vsock/vsock_test_zerocopy.c | 67 +++++++++++++++++++++++++++++++ > tools/testing/vsock/vsock_test_zerocopy.h | 3 ++ > 3 files changed, 75 insertions(+) > >diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c >index bbe3723babdc..21c8616100f1 100644 >--- a/tools/testing/vsock/vsock_test.c >+++ b/tools/testing/vsock/vsock_test.c >@@ -2403,6 +2403,11 @@ static struct test_case test_cases[] = { > .run_client = test_stream_accepted_setsockopt_client, > .run_server = test_stream_accepted_setsockopt_server, > }, >+ { >+ .name = "SOCK_STREAM MSG_ZEROCOPY coalescence corruption", This is essentially a regression test for virtio transport, so I'd add virtio in the test name. >+ .run_client = test_stream_msgzcopy_mangle_client, >+ .run_server = test_stream_msgzcopy_mangle_server, >+ }, > {}, > }; > >diff --git a/tools/testing/vsock/vsock_test_zerocopy.c b/tools/testing/vsock/vsock_test_zerocopy.c >index 9d9a6cb9614a..6735a9d7525d 100644 >--- a/tools/testing/vsock/vsock_test_zerocopy.c >+++ b/tools/testing/vsock/vsock_test_zerocopy.c >@@ -9,11 +9,13 @@ > #include > #include > #include >+#include > #include > #include > #include > #include > #include >+#include > #include > > #include "control.h" >@@ -356,3 +358,68 @@ void test_stream_msgzcopy_empty_errq_server(const struct test_opts *opts) > control_expectln("DONE"); > close(fd); > } >+ >+#define GOOD_COPY_LEN 128 /* net/vmw_vsock/virtio_transport_common.c */ I think we don't need this, I mean we can eventually just send a single byte, no? >+ >+void test_stream_msgzcopy_mangle_client(const struct test_opts *opts) >+{ >+ char sbuf1[PAGE_SIZE + 1], sbuf2[GOOD_COPY_LEN]; >+ struct pollfd fds; >+ int fd; >+ >+ fd = vsock_stream_connect(opts->peer_cid, opts->peer_port); >+ if (fd < 0) { >+ perror("connect"); >+ exit(EXIT_FAILURE); >+ } >+ >+ enable_so_zerocopy_check(fd); >+ >+ memset(sbuf1, '1', sizeof(sbuf1)); >+ memset(sbuf2, '2', sizeof(sbuf2)); >+ >+ send_buf(fd, sbuf1, sizeof(sbuf1), 0, sizeof(sbuf1)); >+ send_buf(fd, sbuf2, sizeof(sbuf2), MSG_ZEROCOPY, sizeof(sbuf2)); >+ >+ fds.fd = fd; >+ fds.events = 0; >+ >+ if (poll(&fds, 1, -1) != 1 || !(fds.revents & POLLERR)) { >+ perror("poll"); >+ exit(EXIT_FAILURE); >+ } Should we also call vsock_recv_completion() or we don't care about the result? If we need it, maybe we can factor our the poll + vsock_recv_completion(). >+ >+ close(fd); >+} >+ >+static void recv_verify(int fd, char *buf, unsigned int len, char pattern) >+{ >+ recv_buf(fd, buf, len, 0, len); >+ >+ while (len--) { >+ if (*buf++ != pattern) { >+ fprintf(stderr, "Incorrect data received\n"); >+ exit(EXIT_FAILURE); >+ } >+ } >+} >+ >+void test_stream_msgzcopy_mangle_server(const struct test_opts *opts) >+{ >+ char rbuf[PAGE_SIZE + 1]; >+ int fd; >+ >+ fd = vsock_stream_accept(VMADDR_CID_ANY, opts->peer_port, NULL); >+ if (fd < 0) { >+ perror("accept"); >+ exit(EXIT_FAILURE); >+ } >+ >+ /* Wait, don't race the (buggy) skbs coalescence. */ >+ vsock_ioctl_int(fd, SIOCINQ, PAGE_SIZE + 1 + GOOD_COPY_LEN); This is cool, another option is to add a barrier here (and after the poll), but yeah, this should be even better. Thanks, Stefano >+ >+ recv_verify(fd, rbuf, PAGE_SIZE + 1, '1'); >+ recv_verify(fd, rbuf, GOOD_COPY_LEN, '2'); >+ >+ close(fd); >+} >diff --git a/tools/testing/vsock/vsock_test_zerocopy.h b/tools/testing/vsock/vsock_test_zerocopy.h >index 3ef2579e024d..d46c91a69f16 100644 >--- a/tools/testing/vsock/vsock_test_zerocopy.h >+++ b/tools/testing/vsock/vsock_test_zerocopy.h >@@ -12,4 +12,7 @@ void test_seqpacket_msgzcopy_server(const struct test_opts *opts); > void test_stream_msgzcopy_empty_errq_client(const struct test_opts *opts); > void test_stream_msgzcopy_empty_errq_server(const struct test_opts > *opts); > >+void test_stream_msgzcopy_mangle_client(const struct test_opts *opts); >+void test_stream_msgzcopy_mangle_server(const struct test_opts *opts); >+ > #endif /* VSOCK_TEST_ZEROCOPY_H */ > >-- >2.52.0 >