From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Rongguang Wei <clementwei90@163.com>, netdev@vger.kernel.org
Cc: willemdebruijn.kernel@gmail.com, jasowangio@gmail.com,
andrew+netdev@lunn.ch, davem@davemloft.net, kuba@kernel.org,
Rongguang Wei <weirongguang@kylinos.cn>
Subject: Re: [PATCH net v4 1/2] tun: keep a kernel copy of the socket filter program
Date: Sat, 03 Oct 2026 14:46:01 -0400 [thread overview]
Message-ID: <willemdebruijn.kernel.12142fb57567@gmail.com> (raw)
In-Reply-To: <20261003063859.136895-2-clementwei90@163.com>
Rongguang Wei wrote:
> From: Rongguang Wei <weirongguang@kylinos.cn>
>
> TUNATTACHFILTER copies only the sock_fprog header, so tun->fprog.filter
> stays a pointer into the address space of the process that issued the
> ioctl. tun_attach() reads it again whenever a queue is attached to the
> persistent device later on.
>
> Rebuilding the filter from that pointer is not reliable. With the inverted
> check below, a failed read (-EFAULT for an unmapped address, -EINVAL for
> bytes that are not a valid classic BPF program) was not fatal: for a new
> tfile err is overwritten by "err = 0", so the queue was attached without a
> filter. And when the read succeeded, the early return meant the queue was
> never published at all.
>
> Keep the program in the kernel instead: tun->fprog_kern holds the
> instructions, and each queue gets its own program built from it with the
> new sk_attach_filter_kern(), the kernel memory counterpart of
> sk_attach_filter(). The copy is freed when the filter is detached or
> replaced and with the device, and tun->fprog is left untouched so
> TUNGETFILTER keeps its uapi behaviour.
>
> Also fix the inverted check at the same time when tun_attach() returns
> early when sk_attach_filter_kern() succeeds instead of when it fails.
> Neither change works on its own: with only the kernel copy, every re-attach
> returns 0 without publishing the queue; with only the check fixed, a
> re-attach that used to succeed without installing a filter would start to
> fail.
>
> sk_attach_filter_kern() builds the program with bpf_prog_create(), which
> does not keep an original program, so SO_GET_FILTER returns -EACCES and
> sock_diag omits the filter for sockets that use it. tun sockets are not
> exposed as file descriptors, so this is not user visible.
>
> The inverted check was discovered by manual code inspection first [1], and
> the review of v1 reported the other things.
>
> [1] https://lore.kernel.org/netdev/20260923025653.59348-1-clementwei90@163.com/
>
> Fixes: 54f968d6efdb ("tuntap: move socket to tun_file")
> Link: https://lore.kernel.org/netdev/179027275318.2160803.4185895144088175048@kernel.org/
> Signed-off-by: Rongguang Wei <weirongguang@kylinos.cn>
Reviewed-by: Willem de Bruijn <willemb@google.com>
next prev parent reply other threads:[~2026-10-03 18:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-03 6:38 [PATCH net v4 0/2] tun: fix re-attaching the socket filter Rongguang Wei
2026-10-03 6:38 ` [PATCH net v4 1/2] tun: keep a kernel copy of the socket filter program Rongguang Wei
2026-10-03 18:46 ` Willem de Bruijn [this message]
2026-10-04 6:39 ` netdev-bot+sashiko
2026-10-08 6:45 ` Rongguang Wei
2026-10-03 6:38 ` [PATCH net v4 2/2] selftests: net: add TAP socket filter attach tests Rongguang Wei
2026-10-03 18:46 ` Willem de Bruijn
2026-10-04 6:39 ` netdev-bot+sashiko
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.12142fb57567@gmail.com \
--to=willemdebruijn.kernel@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=clementwei90@163.com \
--cc=davem@davemloft.net \
--cc=jasowangio@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=weirongguang@kylinos.cn \
/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.