On Tue, Jun 9, 2026 at 6:55 AM Jiayuan Chen <[email protected]> wrote:
>
>
> On 6/9/26 6:34 AM, Kuniyuki Iwashima wrote:
> > On Mon, Jun 8, 2026 at 3:16 PM Alexei Starovoitov
> > <[email protected]> wrote:
> >> On Mon Jun 8, 2026 at 2:35 PM PDT, Kuniyuki Iwashima wrote:
> >>>> btw is earlier sashiko TOCTOU concern real?
> >>> Yes, the selftest in patch 2 should reproduce null-ptr-deref.
> >>> (I tested one in a prior version)
> >>>
> >>>
> >>>> iph->protocol = IPPROTO_TCP;
> >>>> bpf_sk_assign_tcp_reqsk(udp_skb, tcp_sk);
> >>>> iph->protocol = IPPROTO_UDP;
> >>>>
> >>>> as far as I can tell past bpf_sk_assign_tcp_reqsk()
> >>>> the networking stack only looks at skb->protocol,
> >>>> so modifying iph->protocol will only mess up
> >>>> things on the wire (if this packet goes out).
> >>> ip_rcv_finish_core() uses iph->protocol for early demux
> >>> and ip_local_deliver_finish() also uses it for demux.
> >> ok. Another idea... we can keep the checks on bpf side and
> >> teach the verifier to invalidate packet pointers at 
> >> bpf_sk_assign_tcp_reqsk()
> >> and introduce new concept of "readonly skb".
> >> So after invalidation the reloaded sbk->data will be read only.
> > Yes, this is exactly what I had in mind in the other thread :)
> >
> > ---8<---
> > On top of L4 validation in bpf_sk_assign() and bpf_sk_assign_tcp_reqsk(),
> > can't we mark such an skb immutable after the helpers and catch
> > subsequent writes to skb->data on the verifier ?
> > ---8<---
> >
> >
> >> There is no such thing today. The verifier only understands PTR_TO_PACKET
> >> as read/write. So it's not easy, but probably good thing to have
> >> for this and other cases where bpf prog shouldn't touch the packet
> >> once it called some kfunc/helper.
> > This would be useful and we could (re)move some validations from
> > the fast path.
>
>
> Hi Kuniyuki and Alexei,
>
>
> Thanks both for the discussion, it makes sense to me.
>
> I'll go back to fixing this in the helper itself, like the previous
> version did.

I think even the previous version is the same type of change
for intentional misuse.

Both bpf_sk_assign() and bpf_sk_assign_tcp_reqsk() assumes
sk_lookup() in advance, meaning the bpf must have dissected
skb, and bpf_sk_assign() relies on it and has no protocol check.


>
>
> Then, as a longer-term and more general solution, I'll try look into
> marking the
> skb as immutable after these helpers so the verifier can reject any
> later writes
> to the packet.
>

Reply via email to