On 06.03.2023 15:08, Stefano Garzarella wrote: > On Sun, Mar 05, 2023 at 11:07:37PM +0300, Arseniy Krasnov wrote: >> In case of SOCK_SEQPACKET all sk_buffs are used once - after read some >> data from it, it will be removed, so user will never read rest of the >> data. Thus we need to update credit parameters of the socket like whole >> sk_buff is read - so call 'skb_pull()' for the whole buffer. >> >> Fixes: 71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with sk_buff") >> Signed-off-by: Arseniy Krasnov <AVKrasnov@xxxxxxxxxxxxxx> >> --- >> net/vmw_vsock/virtio_transport_common.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) > > Maybe we could avoid this patch if we directly use pkt_len as I > suggested in the previous patch. Hm, may be we can avoid calling 'skb_pull()' here if 'virtio_transport_dec_rx_pkt()' will use integer argument? Just call 'virtio_transport_dec_rx_pkt(skb->len)'. skb is never returned to queue to read it again, so i think may be there is no sense for extra call 'skb_pull'? Thanks, Arseniy > > Thanks, > Stefano > >> >> diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c >> index 2e2a773df5c1..30b0539990ba 100644 >> --- a/net/vmw_vsock/virtio_transport_common.c >> +++ b/net/vmw_vsock/virtio_transport_common.c >> @@ -466,7 +466,6 @@ static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, >> dequeued_len = err; >> } else { >> user_buf_len -= bytes_to_copy; >> - skb_pull(skb, bytes_to_copy); >> } >> >> spin_lock_bh(&vvs->rx_lock); >> @@ -484,6 +483,7 @@ static int virtio_transport_seqpacket_do_dequeue(struct vsock_sock *vsk, >> msg->msg_flags |= MSG_EOR; >> } >> >> + skb_pull(skb, skb->len); >> virtio_transport_dec_rx_pkt(vvs, skb); >> kfree_skb(skb); >> } >> -- >> 2.25.1 >> >