* [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust
@ 2019-10-17 12:44 Stefano Garzarella
2019-10-17 12:44 ` [PATCH net 1/2] vsock/virtio: send a credit update when buffer size is changed Stefano Garzarella
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Stefano Garzarella @ 2019-10-17 12:44 UTC (permalink / raw)
To: netdev
Cc: kvm, linux-kernel, David S. Miller, Stefan Hajnoczi, virtualization
This series makes the credit mechanism implemented in the
virtio-vsock devices more robust.
Patch 1 sends an update to the remote peer when the buf_alloc
change.
Patch 2 prevents a malicious peer (especially the guest) can
consume all the memory of the other peer, discarding packets
when the credit available is not respected.
Stefano Garzarella (2):
vsock/virtio: send a credit update when buffer size is changed
vsock/virtio: discard packets if credit is not respected
net/vmw_vsock/virtio_transport_common.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH net 1/2] vsock/virtio: send a credit update when buffer size is changed
2019-10-17 12:44 [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust Stefano Garzarella
@ 2019-10-17 12:44 ` Stefano Garzarella
2019-10-17 12:44 ` [PATCH net 2/2] vsock/virtio: discard packets if credit is not respected Stefano Garzarella
2019-10-18 17:20 ` [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Stefano Garzarella @ 2019-10-17 12:44 UTC (permalink / raw)
To: netdev
Cc: kvm, linux-kernel, David S. Miller, Stefan Hajnoczi, virtualization
When the user application set a new buffer size value, we should
update the remote peer about this change, since it uses this
information to calculate the credit available.
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
net/vmw_vsock/virtio_transport_common.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index a666ef8fc54e..db127a69f5c3 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -458,6 +458,9 @@ void virtio_transport_set_buffer_size(struct vsock_sock *vsk, u64 val)
vvs->buf_size_max = val;
vvs->buf_size = val;
vvs->buf_alloc = val;
+
+ virtio_transport_send_credit_update(vsk, VIRTIO_VSOCK_TYPE_STREAM,
+ NULL);
}
EXPORT_SYMBOL_GPL(virtio_transport_set_buffer_size);
--
2.21.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH net 2/2] vsock/virtio: discard packets if credit is not respected
2019-10-17 12:44 [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust Stefano Garzarella
2019-10-17 12:44 ` [PATCH net 1/2] vsock/virtio: send a credit update when buffer size is changed Stefano Garzarella
@ 2019-10-17 12:44 ` Stefano Garzarella
2019-10-18 17:20 ` [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Stefano Garzarella @ 2019-10-17 12:44 UTC (permalink / raw)
To: netdev
Cc: kvm, linux-kernel, David S. Miller, Stefan Hajnoczi, virtualization
If the remote peer doesn't respect the credit information
(buf_alloc, fwd_cnt), sending more data than it can send,
we should drop the packets to prevent a malicious peer
from using all of our memory.
This is patch follows the VIRTIO spec: "VIRTIO_VSOCK_OP_RW data
packets MUST only be transmitted when the peer has sufficient
free buffer space for the payload"
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
---
net/vmw_vsock/virtio_transport_common.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index db127a69f5c3..481f7f8a1655 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -204,10 +204,14 @@ static int virtio_transport_send_pkt_info(struct vsock_sock *vsk,
return virtio_transport_get_ops()->send_pkt(pkt);
}
-static void virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs,
+static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs,
struct virtio_vsock_pkt *pkt)
{
+ if (vvs->rx_bytes + pkt->len > vvs->buf_alloc)
+ return false;
+
vvs->rx_bytes += pkt->len;
+ return true;
}
static void virtio_transport_dec_rx_pkt(struct virtio_vsock_sock *vvs,
@@ -879,14 +883,18 @@ virtio_transport_recv_enqueue(struct vsock_sock *vsk,
struct virtio_vsock_pkt *pkt)
{
struct virtio_vsock_sock *vvs = vsk->trans;
- bool free_pkt = false;
+ bool can_enqueue, free_pkt = false;
pkt->len = le32_to_cpu(pkt->hdr.len);
pkt->off = 0;
spin_lock_bh(&vvs->rx_lock);
- virtio_transport_inc_rx_pkt(vvs, pkt);
+ can_enqueue = virtio_transport_inc_rx_pkt(vvs, pkt);
+ if (!can_enqueue) {
+ free_pkt = true;
+ goto out;
+ }
/* Try to copy small packets into the buffer of last packet queued,
* to avoid wasting memory queueing the entire buffer with a small
--
2.21.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust
2019-10-17 12:44 [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust Stefano Garzarella
2019-10-17 12:44 ` [PATCH net 1/2] vsock/virtio: send a credit update when buffer size is changed Stefano Garzarella
2019-10-17 12:44 ` [PATCH net 2/2] vsock/virtio: discard packets if credit is not respected Stefano Garzarella
@ 2019-10-18 17:20 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2019-10-18 17:20 UTC (permalink / raw)
To: sgarzare; +Cc: netdev, kvm, linux-kernel, stefanha, virtualization
From: Stefano Garzarella <sgarzare@redhat.com>
Date: Thu, 17 Oct 2019 14:44:01 +0200
> This series makes the credit mechanism implemented in the
> virtio-vsock devices more robust.
> Patch 1 sends an update to the remote peer when the buf_alloc
> change.
> Patch 2 prevents a malicious peer (especially the guest) can
> consume all the memory of the other peer, discarding packets
> when the credit available is not respected.
Series applied, thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-10-18 17:20 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-17 12:44 [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust Stefano Garzarella
2019-10-17 12:44 ` [PATCH net 1/2] vsock/virtio: send a credit update when buffer size is changed Stefano Garzarella
2019-10-17 12:44 ` [PATCH net 2/2] vsock/virtio: discard packets if credit is not respected Stefano Garzarella
2019-10-18 17:20 ` [PATCH net 0/2] vsock/virtio: make the credit mechanism more robust David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).