virtio/vsock: replace virtio_vsock_pkt with sk_buff Signed-off-by: Arseniy Krasnov <AVKrasnov@xxxxxxxxxxxxxx> --- net/vmw_vsock/virtio_transport_common.c | 4 +++ tools/testing/vsock/vsock_test.c | 44 +++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index a1581c77cf84..77bb1cad8471 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -256,6 +256,10 @@ static void virtio_transport_dec_rx_pkt(struct virtio_vsock_sock *vvs, int len; len = skb_headroom(skb) - sizeof(struct virtio_vsock_hdr) - skb->len; + + if (len < 0) + pr_emerg("Negative len %i\n", len); + vvs->rx_bytes -= len; vvs->fwd_cnt += len; } diff --git a/tools/testing/vsock/vsock_test.c b/tools/testing/vsock/vsock_test.c index 67e9f9df3a8c..2651de2aedc9 100644 --- a/tools/testing/vsock/vsock_test.c +++ b/tools/testing/vsock/vsock_test.c @@ -860,7 +860,51 @@ static void test_stream_poll_rcvlowat_client(const struct test_opts *opts) close(fd); } +static void test_seqpacket_rxbytes_client(const struct test_opts *opts) +{ + unsigned char data[256]; + int fd; + + fd = vsock_seqpacket_connect(opts->peer_cid, 1234); + if (fd < 0) { + perror("connect"); + exit(EXIT_FAILURE); + } + + send(fd, data, sizeof(data), 0); + + control_writeln("CLISENT"); + + close(fd); + + exit(0); +} + +static void test_seqpacket_rxbytes_server(const struct test_opts *opts) +{ + unsigned char data[8]; + int fd; + + fd = vsock_seqpacket_accept(VMADDR_CID_ANY, 1234, NULL); + if (fd < 0) { + perror("accept"); + exit(EXIT_FAILURE); + } + + control_expectln("CLISENT"); + read(fd, data, sizeof(data)); + + close(fd); + + exit(0); +} + static struct test_case test_cases[] = { + { + .name = "SOCK_SEQPACKET negative 'rx_bytes'", + .run_client = test_seqpacket_rxbytes_client, + .run_server = test_seqpacket_rxbytes_server, + }, { .name = "SOCK_STREAM connection reset", .run_client = test_stream_connection_reset, -- 2.25.1