From 15c56d92d8b12b7a7bc72aa8a7d1751682e68302 Mon Sep 17 00:00:00 2001
From: Ting-Yu Wang <anivia@google.com>
Date: Mon, 6 Jul 2020 16:46:27 -0700
Subject: Fix NonBlockingWrite3 not writing b3 if b2 is zero-length.

PiperOrigin-RevId: 319882171
---
 pkg/tcpip/link/rawfile/rawfile_unsafe.go | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

(limited to 'pkg/tcpip/link')

diff --git a/pkg/tcpip/link/rawfile/rawfile_unsafe.go b/pkg/tcpip/link/rawfile/rawfile_unsafe.go
index 44e25d475..69de6eb3e 100644
--- a/pkg/tcpip/link/rawfile/rawfile_unsafe.go
+++ b/pkg/tcpip/link/rawfile/rawfile_unsafe.go
@@ -69,13 +69,12 @@ func NonBlockingWrite(fd int, buf []byte) *tcpip.Error {
 // NonBlockingWrite3 writes up to three byte slices to a file descriptor in a
 // single syscall. It fails if partial data is written.
 func NonBlockingWrite3(fd int, b1, b2, b3 []byte) *tcpip.Error {
-	// If the is no second buffer, issue a regular write.
-	if len(b2) == 0 {
+	// If there is no second and third buffer, issue a regular write.
+	if len(b2) == 0 && len(b3) == 0 {
 		return NonBlockingWrite(fd, b1)
 	}
 
-	// We have two buffers. Build the iovec that represents them and issue
-	// a writev syscall.
+	// Build the iovec that represents them and issue a writev syscall.
 	iovec := [3]syscall.Iovec{
 		{
 			Base: &b1[0],
-- 
cgit v1.2.3