From: Stanislav Fomichev <sdf.kernel@gmail.com>
To: Kaifeng Wang <kaifengw@google.com>
Cc: netdev@vger.kernel.org, edumazet@google.com,
ncardwell@google.com, kuniyu@google.com, davem@davemloft.net,
kuba@kernel.org, pabeni@redhat.com, horms@kernel.org,
asml.silence@gmail.com, almasrymina@google.com,
willemb@google.com, kaiyuanz@google.com, sdf@fomichev.me,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH net v2] tcp: reject devmem tx with fastopen and repair
Date: Tue, 20 Oct 2026 09:54:16 -0700 [thread overview]
Message-ID: <atecrKwmLG4aYsSB@devvm7509.cco0.facebook.com> (raw)
In-Reply-To: <20261019174522.55644-1-kaifengw@google.com>
On 10/19, Kaifeng Wang wrote:
> tcp_sendmsg_locked() enforces that devmem TX can only proceed if the
> zero-copy path is active and a valid dmabuf binding exists. However,
> subsequent branches in tcp_sendmsg_locked() can still intercept the
> message before it reaches the devmem zero-copy loop:
>
> 1. TCP Fast Open (MSG_FASTOPEN or DEFER_CONNECT):
> If TCP_FASTOPEN_CONNECT is set, the socket may have a valid dst with
> NETIF_F_SG (so zc == MSG_ZEROCOPY and binding is present), but
> tcp_sendmsg_fastopen() -> tcp_send_syn_data() will use
> copy_page_from_iter() to byte-copy from the iterator. Since iov_base
> represents dma-buf offsets rather than user virtual addresses, this
> misinterprets offsets as user pointers and copies the caller's memory
> at those addresses into the SYN packet.
>
> 2. TCP repair mode:
> If tp->repair is enabled with TCP_RECV_QUEUE, tcp_send_rcvq() similarly
> calls skb_copy_datagram_from_iter(), byte-copying from the iterator.
>
> Neither path supports or makes sense for devmem transmission. Reject
> devmem sends inside the Fast Open and TCP repair branches when a devmem
> binding is present. Checking inside the tp->repair branch also covers
> the case where repair mode is enabled while sk_stream_wait_connect()
> drops the socket lock.
>
> Additionally, drop the !sockc_err gate from the devmem validation check
> and return sockc_err if set. Otherwise, if a valid SCM_DEVMEM_DMABUF is
> followed by a failing cmsg, sockc.dmabuf_id remains set while binding is
> not acquired, allowing the Fast Open and TCP_RECV_QUEUE repair paths to
> proceed and return before sockc_err is checked.
>
> This pre-existing issue was identified by Sashiko AI review on commit
> 125755776bc6 ("tcp: reject non zerocopy devmem tx") and has not been
> hit in production.
>
> Fixes: 125755776bc6 ("tcp: reject non zerocopy devmem tx")
> Fixes: bd61848900bf ("net: devmem: Implement TX path")
> Reviewed-by: Mina Almasry <almasrymina@google.com>
> Signed-off-by: Kaifeng Wang <kaifengw@google.com>
> ---
> v1 -> v2:
> - Move the devmem rejection checks into the Fast Open and TCP repair
> branches directly, also covering the case where tp->repair is enabled
> while sk_stream_wait_connect() drops the socket lock.
> - Drop the !sockc_err gate from the devmem validation check and return
> sockc_err if set, preventing a valid SCM_DEVMEM_DMABUF followed by a
> failing cmsg from bypassing the check.
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
prev parent reply other threads:[~2026-10-20 16:54 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 17:45 [PATCH net v2] tcp: reject devmem tx with fastopen and repair Kaifeng Wang
2026-10-20 16:54 ` Stanislav Fomichev [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=atecrKwmLG4aYsSB@devvm7509.cco0.facebook.com \
--to=sdf.kernel@gmail.com \
--cc=almasrymina@google.com \
--cc=asml.silence@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kaifengw@google.com \
--cc=kaiyuanz@google.com \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=willemb@google.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.