[release-branch.go1.15] all: merge release-branch.go1.15-security into release-branch.go1.15

Change-Id: I5690e7f4f7f04b9df1881fa60f3d3c6841cefe40
diff --git a/src/internal/poll/copy_file_range_linux.go b/src/internal/poll/copy_file_range_linux.go
index 09de299..24bee61 100644
--- a/src/internal/poll/copy_file_range_linux.go
+++ b/src/internal/poll/copy_file_range_linux.go
@@ -41,7 +41,7 @@
 			// use copy_file_range(2) again.
 			atomic.StoreInt32(&copyFileRangeSupported, 0)
 			return 0, false, nil
-		case syscall.EXDEV, syscall.EINVAL, syscall.EOPNOTSUPP, syscall.EPERM:
+		case syscall.EXDEV, syscall.EINVAL, syscall.EIO, syscall.EOPNOTSUPP, syscall.EPERM:
 			// Prior to Linux 5.3, it was not possible to
 			// copy_file_range across file systems. Similarly to
 			// the ENOSYS case above, if we see EXDEV, we have
@@ -53,6 +53,9 @@
 			// file. This is another case where no data has been
 			// transfered, so we consider it unhandled.
 			//
+			// If src and dst are on CIFS, we can see EIO.
+			// See issue #42334.
+			//
 			// If the file is on NFS, we can see EOPNOTSUPP.
 			// See issue #40731.
 			//