* [PULL 0/1] Net patches @ 2024-01-25 8:47 Jason Wang 2024-01-25 8:47 ` [PULL 1/1] virtio-net: correctly copy vnet header when flushing TX Jason Wang 2024-01-26 13:09 ` [PULL 0/1] Net patches Peter Maydell 0 siblings, 2 replies; 3+ messages in thread From: Jason Wang @ 2024-01-25 8:47 UTC (permalink / raw) To: qemu-devel, peter.maydell; +Cc: Jason Wang The following changes since commit 4a4efae44f19528589204581e9e2fab69c5d39aa: Merge tag 'pull-hex-20240121' of https://github.com/quic/qemu into staging (2024-01-23 13:40:45 +0000) are available in the Git repository at: https://github.com/jasowang/qemu.git net-pull-request for you to fetch changes up to 2220e8189fb94068dbad333228659fbac819abb0: virtio-net: correctly copy vnet header when flushing TX (2024-01-25 14:58:00 +0800) ---------------------------------------------------------------- ---------------------------------------------------------------- Jason Wang (1): virtio-net: correctly copy vnet header when flushing TX hw/net/virtio-net.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PULL 1/1] virtio-net: correctly copy vnet header when flushing TX 2024-01-25 8:47 [PULL 0/1] Net patches Jason Wang @ 2024-01-25 8:47 ` Jason Wang 2024-01-26 13:09 ` [PULL 0/1] Net patches Peter Maydell 1 sibling, 0 replies; 3+ messages in thread From: Jason Wang @ 2024-01-25 8:47 UTC (permalink / raw) To: qemu-devel, peter.maydell Cc: Jason Wang, Xiao Lei, Yuri Benditovich, qemu-stable, Mauro Matteo Cascella, Michael Tokarev When HASH_REPORT is negotiated, the guest_hdr_len might be larger than the size of the mergeable rx buffer header. Using virtio_net_hdr_mrg_rxbuf during the header swap might lead a stack overflow in this case. Fixing this by using virtio_net_hdr_v1_hash instead. Reported-by: Xiao Lei <leixiao.nop@zju.edu.cn> Cc: Yuri Benditovich <yuri.benditovich@daynix.com> Cc: qemu-stable@nongnu.org Cc: Mauro Matteo Cascella <mcascell@redhat.com> Fixes: CVE-2023-6693 Fixes: e22f0603fb2f ("virtio-net: reference implementation of hash report") Reviewed-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Jason Wang <jasowang@redhat.com> --- hw/net/virtio-net.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 7a2846fa1c..5a79bc3a3a 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -674,6 +674,11 @@ static void virtio_net_set_mrg_rx_bufs(VirtIONet *n, int mergeable_rx_bufs, n->mergeable_rx_bufs = mergeable_rx_bufs; + /* + * Note: when extending the vnet header, please make sure to + * change the vnet header copying logic in virtio_net_flush_tx() + * as well. + */ if (version_1) { n->guest_hdr_len = hash_report ? sizeof(struct virtio_net_hdr_v1_hash) : @@ -2693,7 +2698,7 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q) ssize_t ret; unsigned int out_num; struct iovec sg[VIRTQUEUE_MAX_SIZE], sg2[VIRTQUEUE_MAX_SIZE + 1], *out_sg; - struct virtio_net_hdr_mrg_rxbuf mhdr; + struct virtio_net_hdr_v1_hash vhdr; elem = virtqueue_pop(q->tx_vq, sizeof(VirtQueueElement)); if (!elem) { @@ -2710,7 +2715,7 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q) } if (n->has_vnet_hdr) { - if (iov_to_buf(out_sg, out_num, 0, &mhdr, n->guest_hdr_len) < + if (iov_to_buf(out_sg, out_num, 0, &vhdr, n->guest_hdr_len) < n->guest_hdr_len) { virtio_error(vdev, "virtio-net header incorrect"); virtqueue_detach_element(q->tx_vq, elem, 0); @@ -2718,8 +2723,8 @@ static int32_t virtio_net_flush_tx(VirtIONetQueue *q) return -EINVAL; } if (n->needs_vnet_hdr_swap) { - virtio_net_hdr_swap(vdev, (void *) &mhdr); - sg2[0].iov_base = &mhdr; + virtio_net_hdr_swap(vdev, (void *) &vhdr); + sg2[0].iov_base = &vhdr; sg2[0].iov_len = n->guest_hdr_len; out_num = iov_copy(&sg2[1], ARRAY_SIZE(sg2) - 1, out_sg, out_num, -- 2.42.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PULL 0/1] Net patches 2024-01-25 8:47 [PULL 0/1] Net patches Jason Wang 2024-01-25 8:47 ` [PULL 1/1] virtio-net: correctly copy vnet header when flushing TX Jason Wang @ 2024-01-26 13:09 ` Peter Maydell 1 sibling, 0 replies; 3+ messages in thread From: Peter Maydell @ 2024-01-26 13:09 UTC (permalink / raw) To: Jason Wang; +Cc: qemu-devel On Thu, 25 Jan 2024 at 08:47, Jason Wang <jasowang@redhat.com> wrote: > > The following changes since commit 4a4efae44f19528589204581e9e2fab69c5d39aa: > > Merge tag 'pull-hex-20240121' of https://github.com/quic/qemu into staging (2024-01-23 13:40:45 +0000) > > are available in the Git repository at: > > https://github.com/jasowang/qemu.git net-pull-request > > for you to fetch changes up to 2220e8189fb94068dbad333228659fbac819abb0: > > virtio-net: correctly copy vnet header when flushing TX (2024-01-25 14:58:00 +0800) > > ---------------------------------------------------------------- > > ---------------------------------------------------------------- > Jason Wang (1): > virtio-net: correctly copy vnet header when flushing TX Applied, thanks. Please update the changelog at https://wiki.qemu.org/ChangeLog/9.0 for any user-visible changes. -- PMM ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-01-26 13:10 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-01-25 8:47 [PULL 0/1] Net patches Jason Wang 2024-01-25 8:47 ` [PULL 1/1] virtio-net: correctly copy vnet header when flushing TX Jason Wang 2024-01-26 13:09 ` [PULL 0/1] Net patches Peter Maydell
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).