Skip to content

Commit

Permalink
internal/poll: better panic for invalid write return value
Browse files Browse the repository at this point in the history
For #61060

Change-Id: I13cd73b4062cb7bd248d2a4afae06dfa29ac0203
Reviewed-on: https://go-review.googlesource.com/c/go/+/577955
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Ian Lance Taylor <iant@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
  • Loading branch information
ianlancetaylor authored and gopherbot committed Apr 11, 2024
1 parent 7b3c380 commit b6778c5
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/internal/poll/fd_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package poll

import (
"internal/itoa"
"internal/syscall/unix"
"io"
"sync/atomic"
Expand Down Expand Up @@ -379,6 +380,14 @@ func (fd *FD) Write(p []byte) (int, error) {
}
n, err := ignoringEINTRIO(syscall.Write, fd.Sysfd, p[nn:max])
if n > 0 {
if n > max-nn {
// This can reportedly happen when using
// some VPN software. Issue #61060.
// If we don't check this we will panic
// with slice bounds out of range.
// Use a more informative panic.
panic("invalid return from write: got " + itoa.Itoa(n) + " from a write of " + itoa.Itoa(max-nn))
}
nn += n
}
if nn == len(p) {
Expand Down

0 comments on commit b6778c5

Please sign in to comment.