diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h index 17ed0146687510..9a37eddbb87a75 100644 --- a/include/linux/virtio_vsock.h +++ b/include/linux/virtio_vsock.h @@ -8,6 +8,9 @@ #include #include +/* Threshold for detecting small packets to copy */ +#define GOOD_COPY_LEN 128 + enum virtio_vsock_metadata_flags { VIRTIO_VSOCK_METADATA_FLAGS_REPLY = BIT(0), VIRTIO_VSOCK_METADATA_FLAGS_TAP_DELIVERED = BIT(1), diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index de8a9b0ec3a025..436e6721fdfdf0 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -1852,8 +1852,9 @@ static int vsock_connectible_sendmsg(struct socket *sock, struct msghdr *msg, written = transport->stream_enqueue(vsk, msg, len - total_written); } + if (written < 0) { - err = -ENOMEM; + err = written; goto out_err; } diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c index fd98229e3db309..e99aea571f6fa3 100644 --- a/net/vmw_vsock/hyperv_transport.c +++ b/net/vmw_vsock/hyperv_transport.c @@ -687,7 +687,7 @@ static ssize_t hvs_stream_enqueue(struct vsock_sock *vsk, struct msghdr *msg, if (bytes_written) ret = bytes_written; kfree(send_buf); - return ret; + return ret < 0 ? -ENOMEM : ret; } static s64 hvs_stream_has_data(struct vsock_sock *vsk) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index 920578597bb921..d5780599fe9382 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -23,9 +23,6 @@ /* How long to wait for graceful shutdown of a connection */ #define VSOCK_CLOSE_TIMEOUT (8 * HZ) -/* Threshold for detecting small packets to copy */ -#define GOOD_COPY_LEN 128 - static const struct virtio_transport * virtio_transport_get_ops(struct vsock_sock *vsk) { diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c index b14f0ed7427bc4..c927a90dc8590f 100644 --- a/net/vmw_vsock/vmci_transport.c +++ b/net/vmw_vsock/vmci_transport.c @@ -1838,7 +1838,14 @@ static ssize_t vmci_transport_stream_enqueue( struct msghdr *msg, size_t len) { - return vmci_qpair_enquev(vmci_trans(vsk)->qpair, msg, len, 0); + int err; + + err = vmci_qpair_enquev(vmci_trans(vsk)->qpair, msg, len, 0); + + if (err < 0) + err = -ENOMEM; + + return err; } static s64 vmci_transport_stream_has_data(struct vsock_sock *vsk)