Skip to content

Commit 6b4eab5

Browse files
paulzholgopherbot
authored andcommitted
unix: suppress ENOMEM errors from sysctl's implementing Uname(uname *Utsname) on FreeBSD due to truncated fields.
Fixes golang/go#65585. Change-Id: I7e529eaef224be977e3b0c20d071802f49b297e7 Reviewed-on: https://go-review.googlesource.com/c/sys/+/562617 Reviewed-by: Than McIntosh <thanm@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
1 parent 2f2cc5d commit 6b4eab5

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

unix/syscall_freebsd.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package unix
1414

1515
import (
16+
"errors"
1617
"sync"
1718
"unsafe"
1819
)
@@ -169,25 +170,26 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) {
169170
func Uname(uname *Utsname) error {
170171
mib := []_C_int{CTL_KERN, KERN_OSTYPE}
171172
n := unsafe.Sizeof(uname.Sysname)
172-
if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {
173+
// Suppress ENOMEM errors to be compatible with the C library __xuname() implementation.
174+
if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {
173175
return err
174176
}
175177

176178
mib = []_C_int{CTL_KERN, KERN_HOSTNAME}
177179
n = unsafe.Sizeof(uname.Nodename)
178-
if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {
180+
if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {
179181
return err
180182
}
181183

182184
mib = []_C_int{CTL_KERN, KERN_OSRELEASE}
183185
n = unsafe.Sizeof(uname.Release)
184-
if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {
186+
if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {
185187
return err
186188
}
187189

188190
mib = []_C_int{CTL_KERN, KERN_VERSION}
189191
n = unsafe.Sizeof(uname.Version)
190-
if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {
192+
if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {
191193
return err
192194
}
193195

@@ -205,7 +207,7 @@ func Uname(uname *Utsname) error {
205207

206208
mib = []_C_int{CTL_HW, HW_MACHINE}
207209
n = unsafe.Sizeof(uname.Machine)
208-
if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {
210+
if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {
209211
return err
210212
}
211213

0 commit comments

Comments
 (0)