From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Mark Amirkan via B4 Relay
<devnull+markdamirkan.gmail.com@kernel.org>,
netdev@vger.kernel.org,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: Paolo Abeni <pabeni@redhat.com>,
linux-kernel@vger.kernel.org,
Johann Baudy <johann.baudy@gnu-log.net>,
Simon Horman <horms@kernel.org>,
Jakub Kicinski <kuba@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>
Subject: Re: [PATCH net] net/packet: preserve TX_RING progress on a later frame error
Date: Sun, 13 Sep 2026 18:26:11 -0400 [thread overview]
Message-ID: <willemdebruijn.kernel.51a5bb8e519d@gmail.com> (raw)
In-Reply-To: <20260913-b4-send-packet-tx-progress-v1-1-01b99569cda6@gmail.com>
Mark Amirkan via B4 Relay wrote:
> From: Mark Amirkan <markdamirkan@gmail.com>
>
> tpacket_snd() can transmit one or more frames before a later frame fails
> validation. The failing frame is marked TP_STATUS_WRONG_FORMAT, but its
> error replaces len_sum, so send() reports failure despite the earlier
> transmission.
>
> Return the completed byte count when it is nonzero, as the allocation
> failure path already does. Keep TP_STATUS_WRONG_FORMAT on the bad frame
> so userspace can identify it.
>
> In a two-frame TPACKET_V2 test, a valid 60-byte frame followed by an
> oversized frame sends the first frame but returns -EMSGSIZE. With this
> change, send() returns 60 and the second frame remains marked
> TP_STATUS_WRONG_FORMAT.
>
> Fixes: 69e3c75f4d54 ("net: TX_RING and packet mmap")
> Cc: stable@vger.kernel.org
> Assisted-by: Symbolic
> Signed-off-by: Mark Amirkan <markdamirkan@gmail.com>
> ---
> net/packet/af_packet.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
> index 76bde7906d..b7e1848b61 100644
> --- a/net/packet/af_packet.c
> +++ b/net/packet/af_packet.c
> @@ -2893,7 +2893,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
> continue;
> } else {
> status = TP_STATUS_WRONG_FORMAT;
> - err = tp_len;
> + err = len_sum ? : tp_len;
> goto out_status;
> }
This makes sense in principle, but changes longtime established and
expected behavior.
In particular, applications may not know to recover from a
TP_STATUS_WRONG_FORMAT unless an error is returned.
If this sendmsg returns tp_len here, i.e., (partial) success,
subsequent calls will return 0 / -ETIMEDOUT, as if no space is
available.
prev parent reply other threads:[~2026-09-13 22:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-13 10:31 [PATCH net] net/packet: preserve TX_RING progress on a later frame error Mark Amirkan via B4 Relay
2026-09-13 10:31 ` Mark Amirkan
2026-09-13 22:26 ` Willem de Bruijn [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=willemdebruijn.kernel.51a5bb8e519d@gmail.com \
--to=willemdebruijn.kernel@gmail.com \
--cc=davem@davemloft.net \
--cc=devnull+markdamirkan.gmail.com@kernel.org \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=johann.baudy@gnu-log.net \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.