On Sat, Jul 03, 2021 at 07:52 PM CEST, Jakub Sitnicki wrote:
[...]
Then there is the case when a parser prog is attached. In this case the
skb is really gone if we drop it on redirect.
In sk_psock_strp_read, we ignore the -EIO error from
sk_psock_verdict_apply, and return to tcp_read_sock how many bytes have
been parsed.
sk->sk_data_ready
sk_psock_verdict_data_ready
->read_sock(..., sk_psock_verdict_recv)
tcp_read_sock (used = copied = eaten)
strp_recv -> ret = eaten
__strp_recv -> ret = eaten
strp->cb.rcv_msg -> -EIO
sk_psock_verdict_apply -> -EIO
sk_psock_redirect -> -EIO
Copy-paste error. The call chain for the parser case goes as so:
sk->sk_data_ready
sk_psock_strp_data_ready
strp_data_ready
strp_read_sock
->read_sock(..., strp_recv)
tcp_read_sock (used = copied = skb->len)
strp_recv -> ret = skb->len
__strp_recv -> ret = skb->len (dummy parser case)
strp->cb.rcv_msg -> -EIO
sk_psock_verdict_apply -> -EIO
sk_psock_redirect -> -EIO