]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: fix nil pointer dereference in Select on linux/{arm64,mips64x}
authorTobias Klauser <tklauser@distanz.ch>
Thu, 1 Mar 2018 08:20:26 +0000 (09:20 +0100)
committerTobias Klauser <tobias.klauser@gmail.com>
Fri, 2 Mar 2018 08:18:31 +0000 (08:18 +0000)
The timeout parameter might be nil, don't dereference it
unconditionally.

Fixes #24189

Change-Id: I03e6a1ab74fe30322ce6bcfd3d6c42130b6d61be
Reviewed-on: https://go-review.googlesource.com/97819
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/syscall/syscall_linux_arm64.go
src/syscall/syscall_linux_mips64x.go

index 27c351d7bd13888659ae7bc7313384f419a0c0d3..10270cfd00ab96b9db982e4ccefd2732e90baa76 100644 (file)
@@ -74,8 +74,11 @@ type sigset_t struct {
 //sys  pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_t) (n int, err error) = SYS_PSELECT6
 
 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)
 }
 
 //sysnb        Gettimeofday(tv *Timeval) (err error)
index d9eba62b0671d67b792bc5aa3671ba49e33be2b8..e9bc01f8a02eb4eef50d525cd91870ae3a7f8ccf 100644 (file)
@@ -65,8 +65,11 @@ type sigset_t struct {
 //sys  pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_t) (n int, err error) = SYS_PSELECT6
 
 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)
 }
 
 //sysnb        Gettimeofday(tv *Timeval) (err error)