From mboxrd@z Thu Jan  1 00:00:00 1970
Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.subspace.kernel.org (Postfix) with ESMTPS id 51B4053AC
	for <io-uring@vger.kernel.org>; Tue,  1 Apr 2025 18:28:15 +0000 (UTC)
Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181
ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;
	t=1743532097; cv=none; b=PQIlGBERUURDTjLGd0HE2ZM7W6QLBsYSgsPt6gPly3AA+VWkNBN4or4reERJYPreZ53xjaEKLnjfgamDn4DzJHDkK0Z4bMqWM3ntQKII4v6Le5brAfazZUKRdhbpgCWT6uKFcjGKQvR3I5XcuuN5NisXAtpymHc1w6+OBgrvEPI=
ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1743532097; c=relaxed/simple;
	bh=Vb6m1haOVdLUQDC28cbQ7vtY9ObQc9KxpRb2aRg3AsI=;
	h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=uzsX6RtJ9NSV5w3Dl/KBiCd5fj/wLSd4420mYklzy7jag6dclXHCGwdisyRDoONn8wKJQTDa1HbMYNchiqLNa0WnTX5mg20qEM2C4pHoTE89fNm0dVnh2vZYTfbrQJXbA95PSDDLI/ClAA3W1tfYEmp/zQFuz+06qZ8TGOQ8DsQ=
ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=davidwei.uk; spf=none smtp.mailfrom=davidwei.uk; dkim=pass (2048-bit key) header.d=davidwei-uk.20230601.gappssmtp.com header.i=@davidwei-uk.20230601.gappssmtp.com header.b=tnvEoZUm; arc=none smtp.client-ip=209.85.214.181
Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=davidwei.uk
Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=davidwei.uk
Authentication-Results: smtp.subspace.kernel.org;
	dkim=pass (2048-bit key) header.d=davidwei-uk.20230601.gappssmtp.com header.i=@davidwei-uk.20230601.gappssmtp.com header.b="tnvEoZUm"
Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2264aefc45dso147124825ad.0
        for <io-uring@vger.kernel.org>; Tue, 01 Apr 2025 11:28:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=davidwei-uk.20230601.gappssmtp.com; s=20230601; t=1743532095; x=1744136895; darn=vger.kernel.org;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:from:to:cc:subject:date:message-id:reply-to;
        bh=eRkj6RUzeTj23+/IVRtkfKCPvZ39BiLFkXmJnfC4LMw=;
        b=tnvEoZUmTbAVwjdlews7KrYWvDthGYEvtIGkwk4ck56uZYH5raZWsFmtm2id8pfSLR
         QeyC1fWIJiAWr8yZXC7DXk1iC/jpLaQSPKDTsW97SmD3GXm9lLdTgWPuKdE5jjZPMJGl
         o1rR6qQqIu/ftqtAHVq+Vxblzb22/5vbxEwsgiwpJGuo+pMJcaXl7asMzSOcNigsXUqw
         v+kOY3YxFNIKWoX0OEexbSrKy1sIg/wfcQSGEy4MKiU6l7nin1P+SISM1Hpe4NfNXjQG
         FP5791sL7O7jwhxUYqvRnhuC1SVo8dnR1s2GSnbCkCdsmTpayeKtOSYUWa16t1yw17cB
         Wrrg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20230601; t=1743532095; x=1744136895;
        h=content-transfer-encoding:mime-version:message-id:date:subject:cc
         :to:from:x-gm-message-state:from:to:cc:subject:date:message-id
         :reply-to;
        bh=eRkj6RUzeTj23+/IVRtkfKCPvZ39BiLFkXmJnfC4LMw=;
        b=loBZcWhm2bAepCvjwx45+Q1OF6Dk9djGUG0JDJkTVMaGl3hCZHOtatpwKozNaACCHT
         BwwlMEZr+An4VgYwYtDzZcHCZVCKwoQ/x/cVk3bdayiaGmqccLGajF7sFyQmy/PcWFCZ
         1m2/qdMyVRP3Vpy4uVqHkrC2eGbs0KTZhEGS4nH1k4Y8gg4Qc1W8EAbw5d+ycjFgN5NQ
         z/Rvvg6ACf7pwTPrYt9e0Lf5UQ8MINDV55Y6fLmGuDRrzwBDP0dwXO2hTBsaYcVM+i/0
         alinknIbo5zZrrwJw/1kDLeksX7zE0PXjOKXjSPEvMWnIer4mwtzOPUdjJNAoEnBRb4N
         oiFA==
X-Gm-Message-State: AOJu0YzwDR8sxep7pCKchBkp5XwjKtO4PauAhn5e9OuJ0gRMt9o60Muf
	Jak0ij1YrlemYi5aNUzubhtJJLlEnUywOp5P+ca4t3Wb4tGJ1vzbXYDK4ztuUjIvzLNKSLLqesU
	5vOo=
X-Gm-Gg: ASbGncuFS5qWDOvIuLO3HxlaacxrubWFu15OSBeH9q209TAOGDBAkXpfCGfUIbrzFv+
	2UWWteKEVmrzgto/DIvB7QXPtRiT1BbYjv3Blrix+Mq+vohg77b0tc/WLp8mtl58Efj1enWZjAs
	9F7LwlAAa3kr1MOUZe7oLWTqoRIPzFhOITMtqon2aeDK18XhoLMI3rX6KURmVQLpozLVD5289gK
	tdgUyuYBv9OTzmjShH36LKFuJ839MREXXgaJrgMulR0HVn/HFP83GH4FrqVTLFwX36kv9OIxKsI
	+REZ8i/nyCnDl5UNYJe7qFffz7DTew==
X-Google-Smtp-Source: AGHT+IE5a9eHC4pPdYHqOAMbtSXQVw2XFVqnJqoXYy8+4ztXHU+UyMnvRa8WeIHSCXeadzLUJxkOeQ==
X-Received: by 2002:a05:6a00:4b14:b0:736:692e:129 with SMTP id d2e1a72fcca58-739804886camr24768218b3a.24.1743532095403;
        Tue, 01 Apr 2025 11:28:15 -0700 (PDT)
Received: from localhost ([2a03:2880:2ff:4::])
        by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-739710acd6esm9555740b3a.145.2025.04.01.11.28.14
        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
        Tue, 01 Apr 2025 11:28:15 -0700 (PDT)
From: David Wei <dw@davidwei.uk>
To: io-uring@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>,
	Pavel Begunkov <asml.silence@gmail.com>
Subject: [PATCH] io_uring/zcrx: return early from io_zcrx_recv_skb if readlen is 0
Date: Tue,  1 Apr 2025 11:28:13 -0700
Message-ID: <20250401182813.1115909-1-dw@davidwei.uk>
X-Mailer: git-send-email 2.47.1
Precedence: bulk
X-Mailing-List: io-uring@vger.kernel.org
List-Id: <io-uring.vger.kernel.org>
List-Subscribe: <mailto:io-uring+subscribe@vger.kernel.org>
List-Unsubscribe: <mailto:io-uring+unsubscribe@vger.kernel.org>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit

When readlen is set for a recvzc request, tcp_read_sock() will call
io_zcrx_recv_skb() one final time with len == desc->count == 0. This is
caused by the !desc->count check happening too late. The offset + 1 !=
skb->len happens earlier and causes the while loop to continue.

Fix this in io_zcrx_recv_skb() instead of tcp_read_sock(). Return early
if len is 0 i.e. the read is done.

Signed-off-by: David Wei <dw@davidwei.uk>
---
 io_uring/zcrx.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c
index 9c95b5b6ec4e..d1dd25e7cf4a 100644
--- a/io_uring/zcrx.c
+++ b/io_uring/zcrx.c
@@ -818,6 +818,8 @@ io_zcrx_recv_skb(read_descriptor_t *desc, struct sk_buff *skb,
 	int ret = 0;
 
 	len = min_t(size_t, len, desc->count);
+	if (!len)
+		goto out;
 	if (unlikely(args->nr_skbs++ > IO_SKBS_PER_CALL_LIMIT))
 		return -EAGAIN;
 
-- 
2.47.1