From 68a4a8e945b22751c1a619261b1d755372a1d5f7 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Thu, 9 Apr 2026 15:32:13 +0200 Subject: [PATCH] unix: avoid nil pointer dereference in Utime Passing a nil buf *Utimbuf to Utime on linux/{arm,arm64,loong64,riscv64} will cause a nil pointer dereference. Check buf explicitly to avoid this case. Change-Id: Ifb719f83029002f043919daa066af6b1fb4ebe03 Reviewed-on: https://go-review.googlesource.com/c/sys/+/764562 Reviewed-by: Dmitri Shuralyov Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Auto-Submit: Tobias Klauser Reviewed-by: David Chase --- unix/syscall_linux_arm.go | 3 +++ unix/syscall_linux_arm64.go | 3 +++ unix/syscall_linux_loong64.go | 3 +++ unix/syscall_linux_riscv64.go | 3 +++ 4 files changed, 12 insertions(+) diff --git a/unix/syscall_linux_arm.go b/unix/syscall_linux_arm.go index cd2dd797..ecf92bfa 100644 --- a/unix/syscall_linux_arm.go +++ b/unix/syscall_linux_arm.go @@ -82,6 +82,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime}, diff --git a/unix/syscall_linux_arm64.go b/unix/syscall_linux_arm64.go index 745e5c7e..17373807 100644 --- a/unix/syscall_linux_arm64.go +++ b/unix/syscall_linux_arm64.go @@ -113,6 +113,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime}, diff --git a/unix/syscall_linux_loong64.go b/unix/syscall_linux_loong64.go index dd2262a4..a3fd1d0b 100644 --- a/unix/syscall_linux_loong64.go +++ b/unix/syscall_linux_loong64.go @@ -150,6 +150,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime}, diff --git a/unix/syscall_linux_riscv64.go b/unix/syscall_linux_riscv64.go index 8cf3670b..fc5543c5 100644 --- a/unix/syscall_linux_riscv64.go +++ b/unix/syscall_linux_riscv64.go @@ -112,6 +112,9 @@ func Time(t *Time_t) (Time_t, error) { } func Utime(path string, buf *Utimbuf) error { + if buf == nil { + return Utimes(path, nil) + } tv := []Timeval{ {Sec: buf.Actime}, {Sec: buf.Modtime},