瀏覽代碼

correctness

JackDoan 5 月之前
父節點
當前提交
d1ea33659a
共有 2 個文件被更改,包括 4 次插入 和 1 次删除
  1. 1 1
      overlay/tio/tio_gso_linux.go
  2. 3 0
      overlay/tio/tun_linux_offload.go

+ 1 - 1
overlay/tio/tio_gso_linux.go

@@ -80,7 +80,7 @@ func newOffload(fd int, shutdownFd int) (*Offload, error) {
 		fd:         fd,
 		shutdownFd: shutdownFd,
 		closed:     atomic.Bool{},
-		readBuf:    make([]byte, tunReadBufSize),
+		readBuf:    make([]byte, virtioNetHdrLen+tunReadBufSize),
 		readPoll: [2]unix.PollFd{
 			{Fd: int32(fd), Events: unix.POLLIN},
 			{Fd: int32(shutdownFd), Events: unix.POLLIN},

+ 3 - 0
overlay/tio/tun_linux_offload.go

@@ -56,6 +56,9 @@ func checkVirtioValid(pkt []byte, hdr VirtioNetHdr) error {
 	if hdr.Flags&unix.VIRTIO_NET_HDR_F_RSC_INFO != 0 {
 		return fmt.Errorf("virtio RSC_INFO flag not supported on TUN reads")
 	}
+	if len(pkt) < ipv4HeaderMinLen {
+		return fmt.Errorf("packet too short")
+	}
 	ipVersion := pkt[0] >> 4
 	switch hdr.GSOType {
 	case unix.VIRTIO_NET_HDR_GSO_TCPV4: