diff --git a/0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch b/0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch new file mode 100644 index 0000000000000000000000000000000000000000..a4db4de85ef19faa4fa5ad29d09fd1bd5e043b9b --- /dev/null +++ b/0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch @@ -0,0 +1,50 @@ +From 85a19a714c4b4702edc59db0a3419f48fffe2b0a Mon Sep 17 00:00:00 2001 +From: Jinhua Cao +Date: Thu, 17 Feb 2022 17:38:41 +0800 +Subject: [PATCH] OvmfPkg: VirtioNetDxe: Extend the RxBufferSize to avoid data + truncation + +1822 net card needs at least 1536 bytes for DMA, even we never negotiate +VIRTIO_NET_F_MRG_RXBUF. The original max size of packet is 15144 which would +cause data trucation. Now we extend the RxBufSize to 9014(Jumbo Frame type) +so that we can avoid it. + +Signed-off-by: Jinhua Cao +--- + OvmfPkg/Include/IndustryStandard/Virtio095Net.h | 7 +++++++ + OvmfPkg/VirtioNetDxe/SnpInitialize.c | 3 ++- + 2 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/OvmfPkg/Include/IndustryStandard/Virtio095Net.h b/OvmfPkg/Include/IndustryStandard/Virtio095Net.h +index 9c0ed5ed24..28f5cc0899 100644 +--- a/OvmfPkg/Include/IndustryStandard/Virtio095Net.h ++++ b/OvmfPkg/Include/IndustryStandard/Virtio095Net.h +@@ -88,4 +88,11 @@ typedef struct { + #define VIRTIO_NET_S_LINK_UP BIT0 + #define VIRTIO_NET_S_ANNOUNCE BIT1 + ++// ++// 1822 net card needs at least 1536 bytes for DMA, even we never negotiate ++// VIRTIO_NET_F_MRG_RXBUF. The original max size of packet is 15144 which would ++// cause data trucation. Now we extend the RxBufSize to 9014(Jumbo Frame type) ++// so that we can avoid it. ++#define VIRTIO_RXBUF_JUMBO_PADDING 7500 ++ + #endif // _VIRTIO_0_9_5_NET_H_ +diff --git a/OvmfPkg/VirtioNetDxe/SnpInitialize.c b/OvmfPkg/VirtioNetDxe/SnpInitialize.c +index bb3b552d68..6febfea3bb 100644 +--- a/OvmfPkg/VirtioNetDxe/SnpInitialize.c ++++ b/OvmfPkg/VirtioNetDxe/SnpInitialize.c +@@ -337,7 +337,8 @@ VirtioNetInitRx ( + // and Ethernet payload). + // + RxBufSize = VirtioNetReqSize + +- (Dev->Snm.MediaHeaderSize + Dev->Snm.MaxPacketSize); ++ (Dev->Snm.MediaHeaderSize + Dev->Snm.MaxPacketSize) + ++ VIRTIO_RXBUF_JUMBO_PADDING; + + // + // Limit the number of pending RX packets if the queue is big. The division +-- +2.27.0 + diff --git a/edk2.spec b/edk2.spec index e86ead077aa2e3d4104df4a96afe8ad9a599b251..81fd6e2035f01d8cce69cd3c86246646fe13e006 100644 --- a/edk2.spec +++ b/edk2.spec @@ -5,7 +5,7 @@ Name: edk2 Version: %{stable_date} -Release: 2 +Release: 3 Summary: EFI Development Kit II License: BSD-2-Clause-Patent URL: https://github.com/tianocore/edk2 @@ -38,6 +38,8 @@ Patch0017: 0017-SecurityPkg-Tcg-Import-Tcg2PlatformPei-from-edk2-pla.patch Patch0018: 0018-SecurityPkg-Tcg-Make-Tcg2PlatformPei-buildable-and-f.patch Patch0019: 0019-SecurityPkg-Add-references-to-header-and-inf-files-t.patch +Patch0020: 0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch + BuildRequires: acpica-tools gcc gcc-c++ libuuid-devel python3 bc nasm python3-unversioned-command %description