From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 49F70C5DF94 for ; Mon, 24 Aug 2026 14:46:18 +0000 (UTC) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4hTDHr4T9Pz2yDc; Tue, 25 Aug 2026 00:46:16 +1000 (AEST) Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1787582776; cv=none; b=XKKvaurUmb+nVLgZKCggald8eydDl1wJXWjPAx4Jcj2+D8D4tVPCkxtElDA7al4fmn1E6/733kyXVB0GC9XieauZ3VDjpIVHV2vHh7g6d7Iev4Bifec2+PjSR6Szn72taq+LlsZn7mb1pECNBRjDY03js4sIjgpLlsLF8GqVoLnp0tEvJGrOQQnM9/xy2V00HrdYyEM7CLxZtye8uGyw8G7BD0zguomqgvoKfQxROU+Ee8bC+JjC95g/9eFgCrbaxCc2HXVCEeyMNBXyjtzATCOEI6dUqzO/RoPvx58Vnc7D2lehjPDcc58zmCMmrMIi1xSAHuhGaK8KLg4OSCkN8w== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1787582776; c=relaxed/relaxed; bh=TDDdhH66HohUGjb0SYEEP34XQgxP3o5V8whXb/26vVw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:content-type; b=ITLsklmPq4oiKBXJuy+K4weuU4UiIdPDfBX699I86yFWKs2ipBhqhc+uQMbHdNSlHyXrWy1oo8/KUebGtsh/IebgbAU/zCb49b3IC56jjxt9GcMYKTPLArKZ5tzbFP7OlvPXGOjcizGt6DQxn8mvTZCQ3qkQWT3SG3mWtbKkOcP327S+SeteFILfiZZ3rNBEG53dQ4/YzEin2R2IImOYZOlwLec2XSwWcUdEWbJwaAANRZyrgbJUGQiUoQlmZaYyO6NvDGesVjgsIKpJDAuqwkopKDe/nAy3A3yOH88e58axvNssgzXpgbL1hicWTEW0/BDJ6sxiA9UfY5SHVAcSNg== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=fxFWO4uF; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=fxFWO4uF; dkim-atps=neutral; spf=pass (client-ip=170.10.133.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=dhowells@redhat.com; receiver=lists.ozlabs.org) smtp.mailfrom=redhat.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: lists.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=fxFWO4uF; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=fxFWO4uF; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=redhat.com (client-ip=170.10.133.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=dhowells@redhat.com; receiver=lists.ozlabs.org) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4hTDHq4DjYz2xnQ for ; Tue, 25 Aug 2026 00:46:15 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787582772; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TDDdhH66HohUGjb0SYEEP34XQgxP3o5V8whXb/26vVw=; b=fxFWO4uFkI/yExlH9Iv/y8bQ/lQtb0Lm/CilX8pBnWec5KoEJ5Q9aDUbHgnRqywww/cXgK nKVyTQLQ1KXBr64teWBzG5VR14M83XwDNTFuLtZQzZDXUgwQk7DKGNFWZtnk8a3phjf+eV r0iMdAfgjimy7hrNz2c2s7G6aVmzuIo= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787582772; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TDDdhH66HohUGjb0SYEEP34XQgxP3o5V8whXb/26vVw=; b=fxFWO4uFkI/yExlH9Iv/y8bQ/lQtb0Lm/CilX8pBnWec5KoEJ5Q9aDUbHgnRqywww/cXgK nKVyTQLQ1KXBr64teWBzG5VR14M83XwDNTFuLtZQzZDXUgwQk7DKGNFWZtnk8a3phjf+eV r0iMdAfgjimy7hrNz2c2s7G6aVmzuIo= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-434-fVFbgLSmOnm4tY4YBQm-VQ-1; Mon, 24 Aug 2026 10:46:04 -0400 X-MC-Unique: fVFbgLSmOnm4tY4YBQm-VQ-1 X-Mimecast-MFC-AGG-ID: fVFbgLSmOnm4tY4YBQm-VQ_1787582761 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5E2EC19541B1; Mon, 24 Aug 2026 14:46:01 +0000 (UTC) Received: from warthog.com (unknown [10.44.32.15]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2B4B41971E53; Mon, 24 Aug 2026 14:45:54 +0000 (UTC) From: David Howells To: Paulo Alcantara Cc: David Howells , Christian Brauner , Matthew Wilcox , Christoph Hellwig , Jens Axboe , Leon Romanovsky , Namjae Jeon , ChenXiaoSong , Marc Dionne , Stefan Metzmacher , Eric Van Hensbergen , Dominique Martinet , Ilya Dryomov , netfs@lists.linux.dev, linux-afs@lists.infradead.org, linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs@lists.linux.dev, linux-erofs@lists.ozlabs.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v10 31/35] netfs: Check for too much data being read Date: Mon, 24 Aug 2026 15:41:24 +0100 Message-ID: <20260824144130.759997-32-dhowells@redhat.com> In-Reply-To: <20260824144130.759997-1-dhowells@redhat.com> References: <20260824144130.759997-1-dhowells@redhat.com> X-Mailing-List: linux-erofs@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-MFC-PROC-ID: 9TKOOF3NjzB5vSSyIkPeudryAHgVVzLoPl2cJd7Pi2Q_1787582761 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true Put in a check in read subreq termination to detect more data being read for a subrequest than was requested. In the event that this happens, abort the rest of the read request on the basis that some of the read buffer may have been corrupted and return -EIO. Signed-off-by: David Howells cc: Paulo Alcantara cc: netfs@lists.linux.dev cc: linux-fsdevel@vger.kernel.org --- fs/netfs/read_collect.c | 24 ++++++++++++++++++++++++ include/trace/events/netfs.h | 1 + 2 files changed, 25 insertions(+) diff --git a/fs/netfs/read_collect.c b/fs/netfs/read_collect.c index a648e404ed04..e91f7962df04 100644 --- a/fs/netfs/read_collect.c +++ b/fs/netfs/read_collect.c @@ -339,6 +339,15 @@ static void netfs_collect_read_results(struct netfs_io_request *rreq) notes |= HIT_PENDING; transferred = READ_ONCE(front->transferred); + if (unlikely(transferred > front->len)) { + /* Ugh... A subreq overran its allotted length. It + * may have corrupted the read buffer. + */ + stream->failed = true; + stream->error = -EIO; + rreq->error = -EIO; + goto abandon_request; + } /* If we can collect the next folio from a pending op, do so, * but we should only do it if we don't otherwise need to wait @@ -655,6 +664,21 @@ void netfs_read_subreq_terminated(struct netfs_io_subrequest *subreq) break; } + /* If the subrequest read more than it was supposed to, abort + * the request with EIO as we may have clobbered other parts + * of the buffer that are already read. + */ + if (subreq->transferred > subreq->len) { + trace_netfs_sreq(subreq, netfs_sreq_trace_too_much); + __set_bit(NETFS_SREQ_FAILED, &subreq->flags); + __clear_bit(NETFS_SREQ_NEED_RETRY, &subreq->flags); + subreq->error = -EIO; + trace_netfs_failure(rreq, subreq, subreq->error, netfs_fail_read); + trace_netfs_rreq(rreq, netfs_rreq_trace_set_pause); + set_bit(NETFS_RREQ_PAUSE, &rreq->flags); + goto skip_error_checks; + } + /* Deal with retry requests, short reads and errors. If we retry * but don't make progress, we abandon the attempt. */ diff --git a/include/trace/events/netfs.h b/include/trace/events/netfs.h index 4b2ffd14a1ca..312dc2214d92 100644 --- a/include/trace/events/netfs.h +++ b/include/trace/events/netfs.h @@ -133,6 +133,7 @@ EM(netfs_sreq_trace_submit, "SUBMT") \ EM(netfs_sreq_trace_superfluous, "SPRFL") \ EM(netfs_sreq_trace_terminated, "TERM ") \ + EM(netfs_sreq_trace_too_much, "!TOOM") \ EM(netfs_sreq_trace_wait_for, "_WAIT") \ EM(netfs_sreq_trace_write, "WRITE") \ EM(netfs_sreq_trace_write_skip, "SKIP ") \