From dd2ff4accc098aceecb86b36eaa7829b2a17b1c9 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Thu, 1 Mar 2018 09:23:35 +0100 Subject: [PATCH] unix: fix nil pointer dereference in Select on linux/{arm64,mips64x} The timeout parameter might be nil, don't dereference it unconditionally. CL 97819 did the same for the syscall package. Updates golang/go#24189 Change-Id: I95a93468c7d8431abf2e9a3a9b8d0fbd1a223e0d Reviewed-on: https://go-review.googlesource.com/97820 Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- unix/syscall_linux_arm64.go | 7 +++++-- unix/syscall_linux_mips64x.go | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/unix/syscall_linux_arm64.go b/unix/syscall_linux_arm64.go index 9a8e6e41..c464783d 100644 --- a/unix/syscall_linux_arm64.go +++ b/unix/syscall_linux_arm64.go @@ -23,8 +23,11 @@ package unix //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - ts := Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - return Pselect(nfd, r, w, e, &ts, nil) + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) diff --git a/unix/syscall_linux_mips64x.go b/unix/syscall_linux_mips64x.go index 46aa4ff9..15a69cbd 100644 --- a/unix/syscall_linux_mips64x.go +++ b/unix/syscall_linux_mips64x.go @@ -26,8 +26,11 @@ package unix //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - ts := Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} - return Pselect(nfd, r, w, e, &ts, nil) + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) } //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)