mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 12:03:54 +02:00
For non-linear skbs, virtio_transport_build_skb() goes through
virtio_transport_copy_nonlinear_skb() to copy the original payload
in the new skb to be delivered to the vsockmon tap device.
This manually initializes an iov_iter but does not set iov_iter.count.
Since the iov_iter is zero-initialized, the copy length is zero and no
payload is actually copied to the monitor interface, leaving data
un-initialized.
Fix this by removing the linear vs non-linear split and using
skb_copy_datagram_iter() with iov_iter_kvec() for all cases, as
vhost-vsock already does. This handles both linear and non-linear skbs,
properly initializes the iov_iter, and removes the now unused
virtio_transport_copy_nonlinear_skb().
While touching this code, let's also check the return value of
skb_copy_datagram_iter(), even though it's unlikely to fail.
Fixes:
|
||
|---|---|---|
| .. | ||
| af_vsock_tap.c | ||
| af_vsock.c | ||
| diag.c | ||
| hyperv_transport.c | ||
| Kconfig | ||
| Makefile | ||
| virtio_transport_common.c | ||
| virtio_transport.c | ||
| vmci_transport_notify_qstate.c | ||
| vmci_transport_notify.c | ||
| vmci_transport_notify.h | ||
| vmci_transport.c | ||
| vmci_transport.h | ||
| vsock_addr.c | ||
| vsock_bpf.c | ||
| vsock_loopback.c | ||