Cong Wang wrote: > On Wed, Mar 24, 2021 at 7:46 PM John Fastabend <john.fastabend@xxxxxxxxx> wrote: > > > > Cong Wang wrote: > > > On Wed, Mar 24, 2021 at 2:00 PM John Fastabend <john.fastabend@xxxxxxxxx> wrote: > > > > > > > > Incorrect accounting fwd_alloc can result in a warning when the socket > > > > is torn down, > > > > > > > > [...] > > > > > > To resolve lets only account for sockets on the ingress queue that are > > > > still associated with the current socket. On the redirect case we will > > > > check memory limits per 6fa9201a89898, but will omit fwd_alloc accounting > > > > until skb is actually enqueued. When the skb is sent via skb_send_sock_locked > > > > or received with sk_psock_skb_ingress memory will be claimed on psock_other. > > ^^^^^^^^^^^^^^^^^^^^ > > > > > > You mean sk_psock_skb_ingress(), right? > > > > Yes. > > skb_send_sock_locked() actually allocates its own skb when sending, hence > it uses a different skb for memory accounting. > > > > > [...] > > > > > > @@ -880,12 +876,13 @@ static void sk_psock_strp_read(struct strparser *strp, struct sk_buff *skb) > > > > kfree_skb(skb); > > > > goto out; > > > > } > > > > - skb_set_owner_r(skb, sk); > > > > prog = READ_ONCE(psock->progs.skb_verdict); > > > > if (likely(prog)) { > > > > + skb->sk = psock->sk; > > > > > > Why is skb_orphan() not needed here? > > > > These come from strparser which do not have skb->sk set. > > Hmm, but sk_psock_verdict_recv() passes a clone too, like > strparser, so either we need it for both, or not at all. Clones > do not have skb->sk, so I think you can remove the one in > sk_psock_verdict_recv() too. Agree skb_orphan can just be removed, I was being overly paranoid. Thanks.