[secdir] Re: draft-ietf-quic-reliable-stream-reset-09 ietf last call Secdir review

Marten Seemann <martenseemann@gmail.com> Sat, 08 August 2026 06:49 UTC

Return-Path: <martenseemann@gmail.com>
X-Original-To: secdir@mail2.ietf.org
Delivered-To: secdir@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id CEFDE125F402C for <secdir@mail2.ietf.org>; Fri, 7 Aug 2026 23:49:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1786171758; bh=hlZLIhGbvKBoqWrcaFkO4vPO/iQ+wvHbybNcQQatvUQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=laYq+o89Shq6YhIk72JhS1ZNf28N3OywIeAkCXNK7K7/kLbu7WeklP1iB89NK4Sey xRxKRCCHZRTZwWcPq/a6qMSAh1V6VMg/CiokRgjBwoy5ydS5Ja1LsJl3DSQYemPwj1 RuBmOLec88K94YRjgtnDgYJzQ723t0qjk3cy0Efk=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.098
X-Spam-Level:
X-Spam-Status: No, score=-2.098 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id g5zZWJfoGmYq for <secdir@mail2.ietf.org>; Fri, 7 Aug 2026 23:49:18 -0700 (PDT)
Received: from mail-yx1-xb132.google.com (mail-yx1-xb132.google.com [IPv6:2607:f8b0:4864:20::b132]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 2E907125F4017 for <secdir@ietf.org>; Fri, 7 Aug 2026 23:49:18 -0700 (PDT)
Received: by mail-yx1-xb132.google.com with SMTP id 956f58d0204a3-66825847b2cso236415d50.3 for <secdir@ietf.org>; Fri, 07 Aug 2026 23:49:18 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1786171757; cv=none; d=google.com; s=arc-20260327; b=FR1rIvrPVL+9bx8S1xreRi3Vb+GgWZ6+yCMN+7JrLfJVBKE/XgGHEy+hz3uLwpUqMu IqfY+klZoHlMq/MezO3XMbqhYIae7eyhW38r+Sc3ATaLd+VHvku7Q7kACnkM1uAYN4+Y PaessrPhowNwwNlpxjML5EQAfWBBthT28AFkfOjDCQsKpn8iGLTqENKWvth2fXurACQh dbncqp9P/bCc7bv/aec+YXN1V9PClIBwUhDu25Rk8q8lZtT4bEqIDsFgwtgoVWhRsubf X6OI9OOZFd3BW0Ou5pGSTyiZJdArGsqNjnIfEtma76xslUFNbuvGoE9JOQvp+HNpDStI yYNA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=hlZLIhGbvKBoqWrcaFkO4vPO/iQ+wvHbybNcQQatvUQ=; fh=+ehvGErjblPnfSO1iNoktxdJtEKtkeI/aeqw5lE546s=; b=pokCvLpzrv7gKkGm7p8O3j0PTsl5xIe94iDDbweMygUg5jVEC+TXgG4I1ztKy5wzZG wLO8labuZs+c26uv7fq7YVfBvNFiW23LaHv4QXZ7Y/NfDvcVwlKCAvXNqAO+0k7PqH4j +8H8GEhz6kCeh+qO2xwAQryJPv8tomvYwjm92RVXf4KmPSfnUWSW422r5HRjFu2LY1v5 K+RwZ9kDguIjl9DTG4cQbAHkbiBua2uK+QAGAFrXHJqynJaXjCnIIYsR1dn5HH51J8SI ZGxT/NcvdU+Kve4Esfz9cjF1+bWSegwKNWbjV0PCy9g1iEjmtIFE4JyTZzk2ug6TGcIU mRSg==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786171757; x=1786776557; darn=ietf.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=hlZLIhGbvKBoqWrcaFkO4vPO/iQ+wvHbybNcQQatvUQ=; b=kIL693AJxpdDOxxMvSP5mNobpKSEIV7BHWdxkM/Ez5s0O7TlOPWYgi8YiyZrOpOeGP X6QYuROkaua65bqBPMBcd7wJ3/pSwPbyHJRfqILyxtqeYW8mNSb40XiRDl4ekGe6HxzL e0d107lpgReUlAfZHrOZ+laPgA1OVzidglFRicej+DfpJpINDQCGpgkP+zgYtPNQQgpu z7Cor0unIn6xD5NvjF1do/bpBVVaSmB8NQD358Za6MNCVF/R57Jc5jInj7pHTbWuvEN0 DHJquhb8xVvh4DXTU4Gy42rk6MFSRzcj8ssOkaKdIBLT/p4edfYrd8m4zOIBSbT02By9 yXLQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786171757; x=1786776557; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=hlZLIhGbvKBoqWrcaFkO4vPO/iQ+wvHbybNcQQatvUQ=; b=sOvqW8jD2nxkSsKnMEIH604dp07JeSjLWHy4s3FRUgU8cmBP3rKnbt5UjqzISLxmQB nOvO0MOqZ7Mnpeoqy5PAOwjOYOWv4kVBh7voGNg+jpWeHKDyMYLxa1BFGXz8ka1Q/GOx b9NQrE9kQ6u+F6Nz5tfxYcypBF2kpIUPTqDSqnNrKMRhlefwcv9pa1e7KXj1vdYJAcuy pFVhYBJruybue43Uq2AwtoN3HDCMMtWGZHpKtbFJBGStQdlubbVT92krWdnr3kQSrDjs BCIWl+JHjNo2mrSanJYrGOS6NWOPAIg1oBQEg39Gn4nH62crj2bv6UaKo4xE8dO0Oous fzAQ==
X-Gm-Message-State: AOJu0Yzap253dlglhQJt9XFrxS9OW9ulJwDt6NaqE7OUAIKaWFsC2mSS eVwa4DrTTRbfnd2n8OZf+X1sc87PRwl95XA3NXXlzIvlAR4uUA1TrGO/rQJBonSg1eo63RYVHcx VOyKzr5ucd4A2QAspKWEPYdJvfsYIpZY=
X-Gm-Gg: AR+sD13pqnwE34cPa3t7LIbAfPRmokAxxFoaLz5kiDBjk8JnE96SjZfS8Uq38dL2IS6 GSRpq8VyE+A3XfPB+evzN5QHuWw1H6G9Zo0LF+h2Sjd+m8CwYVl+uBHbgAPDZipIJ2ev0TEa49f oD5SCwflsoOgafd97/I9oO6r2aEhj0zlpSB5rQrWzzHE+KFc9CJSSOLI/Getq0pcgrJMMf6jvM5 JbmbbOtLNkBbZxG35hlwONyvcaaubTDhLCXgQ+ZY9cAHWhvjw+aSf1c/IX/oda2qlUmt/AdnON4 O5wtYlOpDDGZjo2BcGNIBF/oiM/FKC97Ux3rO0qIga/WqmoWo6s4trE=
X-Received: by 2002:a05:690e:4545:20b0:667:8a13:c3f with SMTP id 956f58d0204a3-6699aaec164mr13000640d50.42.1786171757415; Fri, 07 Aug 2026 23:49:17 -0700 (PDT)
MIME-Version: 1.0
References: <178536163450.1428717.5397938348145764465@dt-datatracker-d4d6ff9d9-fsx7d>
In-Reply-To: <178536163450.1428717.5397938348145764465@dt-datatracker-d4d6ff9d9-fsx7d>
From: Marten Seemann <martenseemann@gmail.com>
Date: Sat, 08 Aug 2026 08:49:06 +0200
X-Gm-Features: AUfX_myfdSZdfr8R4KpsdbzmskmuGHoE9FwiPOrC_dCYmTSB2d8Nctuu5XYZfjc
Message-ID: <CAOYVs2qdWMB7+gd9tzJdTS6OL36Hmv6o-=A8e4PcDB3k8PFdMw@mail.gmail.com>
To: Ionuț Mihalcea <ionut.mihalcea@arm.com>
Content-Type: multipart/alternative; boundary="0000000000001bcffd06588385a4"
Message-ID-Hash: F37OLKHVFTS5W5CZYP3WGMG5M2FTNAXM
X-Message-ID-Hash: F37OLKHVFTS5W5CZYP3WGMG5M2FTNAXM
X-MailFrom: martenseemann@gmail.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-secdir.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: secdir@ietf.org, draft-ietf-quic-reliable-stream-reset.all@ietf.org, last-call@ietf.org, quic@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [secdir] Re: draft-ietf-quic-reliable-stream-reset-09 ietf last call Secdir review
List-Id: Security Area Directorate <secdir.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/secdir/iWTjd-rPy6rEz6aycPd90wqd6xo>
List-Archive: <https://mailarchive.ietf.org/arch/browse/secdir>
List-Help: <mailto:secdir-request@ietf.org?subject=help>
List-Owner: <mailto:secdir-owner@ietf.org>
List-Post: <mailto:secdir@ietf.org>
List-Subscribe: <mailto:secdir-join@ietf.org>
List-Unsubscribe: <mailto:secdir-leave@ietf.org>

Thank you for the review!

> At the end of sec. 1: "application protocols continue to treat this stream
function as an abrupt termination". Clarifying question: is this in the
sense
that application protocol can expect no new data to be sent over this stream
?
Because "abrupt termination" doesn't seem representative of the new
behaviour
overall.

It is abrupt termination in the sense that it tells the application that
the transfer was not successful. For example, when downloading a file, you
might treat a FIN as "all the bytes I received constitute the entirety of
this file" vs. a RESET_STREAM (or RESET_STREAM_AT) as "parts of the file
were transferred, but what I received is not the complete file".

https://github.com/quicwg/reliable-stream-reset/pull/94 should make this
clearer.

> In sec. 5: "A RESET_STREAM_AT frame with this value is logically
equivalent to
a RESET_STREAM frame". I'm not sure this is consistent with the state
machine
transitions described in sec. 5.3. For example, with RESET_STREAM the state
machine is not expected to go from Recv through Size Known.

I think it is, given the following sentence in the draft:
> Once all data up to the smallest Reliable Size have been received, it
enters the "Data Recvd" state.

...which in the case of a Reliable Size of 0 is immediate. That said, I
think we can improve the wording a bit:
https://github.com/quicwg/reliable-stream-reset/pull/92

> In sec 5.3: "Conversely, if bytes below that offset still need to be sent
or
acknowledged, the transition might take multiple network roundtrips and
*might
require additional flow control credit issued by the receiver*." (emphasis
mine) It seems impossible to reach the state described at the end, requiring
additional flow control credit. In sec. 4 you note that "An endpoint MUST
NOT
send a RESET_STREAM_AT frame that exceeds the largest maximum stream data
value
advertised by the receiver for the stream, or that violates the receiver's
maximum data limit." Coupled with "If the Reliable Size is larger than the
Final Size, the receiver MUST close the connection", Reliable Size must
always
be fully accounted for in the current flow control credit.

> In sec. 5.3: "This might require the receiver to issue additional flow
control
credit." - identical reasoning to above.

The intention of this section was to say that if your application's
requirement is to send a stream header of N bytes, you're not able to send
RESET_STREAM_AT with Reliable Size N before you've received flow control
credit for at least N. I opened a PR:
https://github.com/quicwg/reliable-stream-reset/pull/93



On Wed, 29 Jul 2026 at 23:47, Ionuț Mihalcea via Datatracker <
noreply@ietf.org> wrote:

> Document: draft-ietf-quic-reliable-stream-reset
> Title: QUIC Stream Resets with Partial Delivery
> Reviewer: Ionuț Mihalcea
> Review result: Has Nits
>
> I have reviewed this document as part of the security directorate's
> ongoing effort to review all IETF documents being processed by the
> IESG. These comments were written primarily for the benefit of the
> security area directors. Document editors and WG chairs should treat
> these comments just like any other last call comments.
>
> The summary of the review is Almost Ready.
>
> The draft defines a new frame for QUIC, allowing senders to reset a stream
> with
> the promise of reliable delivery for a given amount of data on said stream.
>
> The document is well written and seems comprehensive in integrating the new
> mechanism in the QUIC stream management machinery. I noticed a few
> inconsistencies (which might be due to my lack of expertise with QUIC),
> described below.
>
> At the end of sec. 1: "application protocols continue to treat this stream
> function as an abrupt termination". Clarifying question: is this in the
> sense
> that application protocol can expect no new data to be sent over this
> stream?
> Because "abrupt termination" doesn't seem representative of the new
> behaviour
> overall.
>
> In sec. 5: "A RESET_STREAM_AT frame with this value is logically
> equivalent to
> a RESET_STREAM frame". I'm not sure this is consistent with the state
> machine
> transitions described in sec. 5.3. For example, with RESET_STREAM the state
> machine is not expected to go from Recv through Size Known.
>
> In sec 5.3: "Conversely, if bytes below that offset still need to be sent
> or
> acknowledged, the transition might take multiple network roundtrips and
> *might
> require additional flow control credit issued by the receiver*." (emphasis
> mine) It seems impossible to reach the state described at the end,
> requiring
> additional flow control credit. In sec. 4 you note that "An endpoint MUST
> NOT
> send a RESET_STREAM_AT frame that exceeds the largest maximum stream data
> value
> advertised by the receiver for the stream, or that violates the receiver's
> maximum data limit." Coupled with "If the Reliable Size is larger than the
> Final Size, the receiver MUST close the connection", Reliable Size must
> always
> be fully accounted for in the current flow control credit.
>
> In sec. 5.3: "This might require the receiver to issue additional flow
> control
> credit." - identical reasoning to above.
>
> Thanks!
>
>
>